diff --git a/tools/under-control/src/RELEASE b/tools/under-control/src/RELEASE index 414a4ae2..e0525863 100644 --- a/tools/under-control/src/RELEASE +++ b/tools/under-control/src/RELEASE @@ -1 +1 @@ -145.0.7632.120 +146.0.7680.31 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 ab54428a..fae9f145 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 @@ -55,7 +55,6 @@ #include "base/base_paths_android.h" #include "base/base_switches.h" #include "base/command_line.h" -#include "base/containers/contains.h" #include "base/feature_list.h" #include "base/files/scoped_file.h" #include "base/functional/bind.h" @@ -238,7 +237,7 @@ std::string AwContentBrowserClient::GetAcceptLangsImpl() { // If accept languages do not contain en-US, add in en-US which will be // used with a lower q-value. - if (!base::Contains(locales_string, "en-US")) { + if (!locales_string.contains("en-US")) { locales_string += ",en-US"; } return locales_string; @@ -1095,12 +1094,6 @@ bool AwContentBrowserClient::ShouldLockProcessToSite( return false; } -bool AwContentBrowserClient::ShouldEnforceNewCanCommitUrlChecks() { - // TODO(https://crbug.com/326250356): Diagnose any remaining Android WebView - // crashes from these new checks and then remove this function. - return true; -} - void AwContentBrowserClient::WillCreateURLLoaderFactory( content::BrowserContext* browser_context, content::RenderFrameHost* frame, @@ -1303,16 +1296,16 @@ void AwContentBrowserClient::LogWebDXFeatureForCurrentPage( render_frame_host, feature); } -content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride -AwContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy( +content::ContentBrowserClient::LocalNetworkAccessRequestPolicyOverride +AwContentBrowserClient::ShouldOverrideLocalNetworkAccessRequestPolicy( content::BrowserContext* browser_context, const url::Origin& origin) { // Webview does not implement support for deprecation trials, so webview apps - // broken by Private Network Access restrictions cannot help themselves by + // broken by Local Network Access restrictions cannot help themselves by // registering for the trial. // See crbug.com/1255675. - return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride:: - kForceAllow; + return content::ContentBrowserClient:: + LocalNetworkAccessRequestPolicyOverride::kForceAllow; } content::SpeechRecognitionManagerDelegate* @@ -1527,4 +1520,9 @@ bool AwContentBrowserClient::ShouldAnimateBackForwardTransitions() { return false; } +bool AwContentBrowserClient::OriginSupportsConcreteCrossOriginIsolation( + const url::Origin& origin) { + return false; +} + } // namespace android_webview 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 cd6baf2e..ee925a45 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 @@ -18,6 +18,7 @@ #include "components/payments/content/android/payment_feature_map.h" #include "components/permissions/features.h" #include "components/safe_browsing/core/common/features.h" +#include "components/stylus_handwriting/android/stylus_handwriting_feature_map.h" #include "components/variations/feature_overrides.h" #include "components/viz/common/features.h" #include "content/public/common/content_features.h" @@ -32,7 +33,6 @@ #include "third_party/blink/public/common/features_generated.h" #include "ui/android/ui_android_features.h" #include "ui/base/ui_base_features.h" -#include "ui/events/features.h" #include "ui/gl/gl_features.h" #include "ui/gl/gl_switches.h" @@ -82,10 +82,6 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // HDR does not support webview yet. See crbug.com/1493153 for an explanation. aw_feature_overrides.DisableFeature(ui::kAndroidHDR); - // TODO(crbug.com/450845471): Remove this once webview experiment has - // concluded. - aw_feature_overrides.DisableFeature(ui::kCompensateGestureDetectorTimeouts); - // Disable launch_handler on WebView. aw_feature_overrides.DisableFeature(::features::kAndroidWebAppLaunchHandler); @@ -317,4 +313,8 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // Don't pass the data about browser window position on screen to WebView. aw_feature_overrides.DisableFeature(ui::kAndroidUseCorrectWindowBounds); + + // Launched for WebView. Experimentation needed for Chrome on Android. + aw_feature_overrides.EnableFeature( + stylus_handwriting::android::kProbeStylusWritingInBackground); } diff --git a/tools/under-control/src/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt b/tools/under-control/src/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt index 19fe9bfc..520532b8 100755 --- a/tools/under-control/src/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt +++ b/tools/under-control/src/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt @@ -180,6 +180,7 @@ interface AudioContext : BaseAudioContext getter onerror getter onsinkchange getter outputLatency + getter playbackStats getter playoutStats getter sinkId method close @@ -292,6 +293,17 @@ interface AudioParamMap method has method keys method values +interface AudioPlaybackStats + attribute @@toStringTag + getter averageLatency + getter maximumLatency + getter minimumLatency + getter totalDuration + getter underrunDuration + getter underrunEvents + method constructor + method resetLatency + method toJSON interface AudioPlayoutStats attribute @@toStringTag getter averageLatency @@ -352,6 +364,11 @@ interface AudioWorkletNode : AudioNode getter port method constructor setter onprocessorerror +interface AutofillEvent : Event + attribute @@toStringTag + getter autofillValues + getter refill + method constructor interface BackForwardCacheRestoration : PerformanceEntry attribute @@toStringTag getter pageshowEventEnd @@ -1365,11 +1382,18 @@ interface ChildNodePart : Part method replaceChildren interface Clipboard : EventTarget attribute @@toStringTag + getter onclipboardchange method constructor method read method readText method write method writeText + setter onclipboardchange +interface ClipboardChangeEvent : Event + attribute @@toStringTag + getter changeId + getter types + method constructor interface ClipboardEvent : Event attribute @@toStringTag getter clipboardData @@ -1514,6 +1538,7 @@ interface CustomElementRegistry method define method get method getName + method initialize method upgrade method whenDefined interface CustomEvent : Event @@ -1890,6 +1915,7 @@ interface Document : Node getter contentType getter cookie getter currentScript + getter customElementRegistry getter defaultView getter designMode getter dir @@ -2346,6 +2372,7 @@ interface EditContext : EventTarget interface Element : Node attribute @@toStringTag attribute @@unscopables + getter activeViewTransition getter anchorElement getter ariaActiveDescendantElement getter ariaAtomic @@ -2414,6 +2441,7 @@ interface Element : Node getter containerTiming getter containerTimingIgnore getter currentCSSZoom + getter customElementRegistry getter elementTiming getter firstElementChild getter headingOffset @@ -5042,12 +5070,14 @@ interface HTMLTemplateElement : HTMLElement getter content getter parseparts getter shadowRootClonable + getter shadowRootCustomElementRegistry getter shadowRootDelegatesFocus getter shadowRootMode getter shadowRootSerializable method constructor setter parseparts setter shadowRootClonable + setter shadowRootCustomElementRegistry setter shadowRootDelegatesFocus setter shadowRootMode setter shadowRootSerializable @@ -6438,6 +6468,7 @@ interface NavigateEvent : Event getter sourceElement getter userInitiated method constructor + method deferPageSwap method intercept method scroll interface Navigation : EventTarget @@ -6474,6 +6505,10 @@ interface NavigationCurrentEntryChangeEvent : Event getter from getter navigationType method constructor +interface NavigationDeferPageSwapController + attribute @@toStringTag + method addRestoreCallback + method constructor interface NavigationDestination attribute @@toStringTag getter id @@ -7119,6 +7154,7 @@ interface PerformanceLongAnimationFrameTiming : PerformanceEntry getter renderStart getter scripts getter styleAndLayoutStart + getter styleDuration method constructor method toJSON interface PerformanceLongTaskTiming : PerformanceEntry @@ -7219,6 +7255,7 @@ interface PerformanceScriptTiming : PerformanceEntry attribute @@toStringTag getter executionStart getter forcedStyleAndLayoutDuration + getter forcedStyleDuration getter invoker getter invokerType getter pauseDuration @@ -9282,6 +9319,7 @@ interface ShadowRoot : DocumentFragment getter activeElement getter adoptedStyleSheets getter clonable + getter customElementRegistry getter delegatesFocus getter fullscreenElement getter host @@ -9552,8 +9590,10 @@ interface StyleSheetList method item interface SubmitEvent : Event attribute @@toStringTag + getter agentInvoked getter submitter method constructor + method respondWith interface Subscriber attribute @@toStringTag getter active @@ -9766,10 +9806,10 @@ interface TimelineTrigger : AnimationTrigger method constructor interface TimelineTriggerRange attribute @@toStringTag - getter exitRangeEnd - getter exitRangeStart - getter rangeEnd - getter rangeStart + getter activationRangeEnd + getter activationRangeStart + getter activeRangeEnd + getter activeRangeStart getter timeline method constructor interface TimelineTriggerRangeList @@ -11594,6 +11634,10 @@ interface WebKitMutationObserver method disconnect method observe method takeRecords +interface WebMCPEvent : Event + attribute @@toStringTag + getter toolName + method constructor interface WebSocket : EventTarget attribute @@toStringTag attribute CLOSED diff --git a/tools/under-control/src/chrome/android/java/AndroidManifest.xml b/tools/under-control/src/chrome/android/java/AndroidManifest.xml index 216c4730..1aef3a49 100755 --- a/tools/under-control/src/chrome/android/java/AndroidManifest.xml +++ b/tools/under-control/src/chrome/android/java/AndroidManifest.xml @@ -168,6 +168,9 @@ by a child template that "extends" this file. + + + {% block extra_uses_permissions %} {% endblock %} @@ -1116,7 +1119,6 @@ by a child template that "extends" this file. android:exported="false" android:autoRemoveFromRecents="true" android:excludeFromRecents="true" - android:documentLaunchMode="always" android:noHistory="true"/> diff --git a/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java index c983ec7d..33e3feb5 100755 --- a/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java @@ -839,7 +839,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid @BrowserServicesIntentDataProvider.CustomTabsUiType private int getCustomTabsUiType(int requestedUiType) { if (mNetwork != null) return CustomTabsUiType.NETWORK_BOUND_TAB; - if (isTrustedWebActivity() && resolveDisplayMode() == DisplayMode.MINIMAL_UI) { + if (isTrustedWebActivity()) { return CustomTabsUiType.TRUSTED_WEB_ACTIVITY; } if (!isTrustedIntent()) { @@ -1068,14 +1068,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid switch (type) { case CustomTabsUiType.MEDIA_VIEWER: case CustomTabsUiType.READER_MODE: - case CustomTabsUiType.MINIMAL_UI_WEBAPP: case CustomTabsUiType.OFFLINE_PAGE: case CustomTabsUiType.AUTH_TAB: case CustomTabsUiType.NETWORK_BOUND_TAB: + case CustomTabsUiType.TRUSTED_WEB_ACTIVITY: case CustomTabsUiType.POPUP: return false; - case CustomTabsUiType.TRUSTED_WEB_ACTIVITY: - return !ChromeFeatureList.sAndroidWebAppMenuButton.isEnabled(); + case CustomTabsUiType.MINIMAL_UI_WEBAPP: case CustomTabsUiType.DEFAULT: default: return true; @@ -1323,6 +1322,18 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid if (IntentUtils.safeHasExtra(intent, EXTRA_CUSTOM_CONTENT_ACTIONS)) { featureUsage.log(CustomTabsFeature.EXTRA_CUSTOM_CONTENT_ACTIONS); } + if (IntentUtils.safeHasExtra( + intent, CustomTabActivityTimeoutHandler.EXTRA_TIMEOUT_MINUTES)) { + featureUsage.log(CustomTabsFeature.EXTRA_TIMEOUT_MINUTES); + } + if (IntentUtils.safeHasExtra( + intent, CustomTabActivityTimeoutHandler.EXTRA_TIMEOUT_MINUTES_ALLOWED)) { + featureUsage.log(CustomTabsFeature.EXTRA_TIMEOUT_MINUTES_ALLOWED); + } + if (IntentUtils.safeHasExtra( + intent, CustomTabActivityTimeoutHandler.EXTRA_TIMEOUT_PENDING_INTENT)) { + featureUsage.log(CustomTabsFeature.EXTRA_TIMEOUT_PENDING_INTENT); + } } @Override diff --git a/tools/under-control/src/chrome/browser/about_flags.cc b/tools/under-control/src/chrome/browser/about_flags.cc index ac82cb9d..ec85200d 100755 --- a/tools/under-control/src/chrome/browser/about_flags.cc +++ b/tools/under-control/src/chrome/browser/about_flags.cc @@ -36,7 +36,9 @@ #include "chrome/browser/apps/app_discovery_service/app_discovery_service.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/default_browser/default_browser_features.h" #include "chrome/browser/devtools/features.h" +#include "chrome/browser/first_run/first_run_features.h" #include "chrome/browser/flag_descriptions.h" #include "chrome/browser/login_detection/login_detection_util.h" #include "chrome/browser/media/router/discovery/access_code/access_code_cast_constants.h" @@ -121,7 +123,6 @@ #include "components/metrics/private_metrics/private_metrics_features.h" #include "components/mirroring/service/mirroring_features.h" #include "components/network_session_configurator/common/network_switches.h" -#include "components/no_state_prefetch/browser/no_state_prefetch_field_trial.h" #include "components/ntp_tiles/features.h" #include "components/offline_pages/core/offline_page_feature.h" #include "components/omnibox/browser/aim_eligibility_service_features.h" @@ -145,7 +146,6 @@ #include "components/permissions/features.h" #include "components/plus_addresses/core/common/features.h" #include "components/policy/core/common/features.h" -#include "components/power_bookmarks/core/power_bookmark_features.h" #include "components/privacy_sandbox/privacy_sandbox_features.h" #include "components/regional_capabilities/regional_capabilities_switches.h" #include "components/remote_cocoa/app_shim/features.h" @@ -179,6 +179,7 @@ #include "components/sync/base/command_line_switches.h" #include "components/sync/base/features.h" #include "components/sync_preferences/features.h" +#include "components/thin_webview/features.h" #include "components/touch_to_search/core/browser/contextual_search_field_trial.h" #include "components/touch_to_search/core/browser/public.h" #include "components/tracing/common/tracing_switches.h" @@ -292,7 +293,6 @@ #include "ash/constants/ash_switches.h" #include "ash/public/cpp/app_list/app_list_features.h" #include "ash/public/cpp/keyboard/keyboard_switches.h" -#include "base/process/process.h" #include "base/system/sys_info.h" #include "chrome/browser/apps/app_service/chrome_app_deprecation/chrome_app_deprecation.h" #include "chrome/browser/ash/app_list/search/search_features.h" @@ -322,7 +322,7 @@ #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_MAC) -#include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/dialogs/browser_dialogs.h" #endif // BUILDFLAG(IS_MAC) #if BUILDFLAG(IS_WIN) @@ -339,6 +339,7 @@ #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || \ BUILDFLAG(IS_WIN) #include "chrome/browser/contextual_cueing/contextual_cueing_features.h" // nogncheck +#include "chrome/browser/enterprise/data_protection/data_protection_features.h" #include "chrome/browser/enterprise/profile_management/profile_management_features.h" #include "chrome/browser/enterprise/webstore/features.h" #include "components/infobars/core/features.h" @@ -350,9 +351,13 @@ #endif // BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) -#include "chrome/browser/enterprise/platform_auth/platform_auth_features.h" +#include "components/enterprise/platform_auth/platform_auth_features.h" #endif +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) +#include "chrome/browser/enterprise/reporting/reporting_features.h" +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + #if BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS) #include "components/unexportable_keys/features.h" // nogncheck #endif @@ -376,6 +381,10 @@ #include "device/vr/public/cpp/switches.h" #endif +#if BUILDFLAG(ENABLE_GLIC) +#include "chrome/browser/glic/public/features.h" +#endif + #if defined(TOOLKIT_VIEWS) #include "ui/views/views_features.h" #include "ui/views/views_switches.h" @@ -413,8 +422,7 @@ const FeatureEntry::Choice kPullToRefreshChoices[] = { const FeatureEntry::FeatureParam kLocalNetworkAccessChecksBlock[] = { {"LocalNetworkAccessChecksWarn", "false"}}; const FeatureEntry::FeatureVariation kLocalNetworkAccessChecksVariations[] = { - {"(Blocking)", kLocalNetworkAccessChecksBlock, - std::size(kLocalNetworkAccessChecksBlock), nullptr}}; + {"(Blocking)", kLocalNetworkAccessChecksBlock, nullptr}}; const FeatureEntry::Choice kEnableBenchmarkingChoices[] = { {flag_descriptions::kEnableBenchmarkingChoiceDisabled, "", ""}, @@ -478,19 +486,19 @@ const FeatureEntry::Choice kExtensionsToolbarZeroStateChoices[] = { #endif // ENABLE_EXTENSIONS #if BUILDFLAG(IS_WIN) -const FeatureEntry::FeatureParam kDXGIWaitableSwapChain1Frame = { - "DXGIWaitableSwapChainMaxQueuedFrames", "1"}; +const FeatureEntry::FeatureParam kDXGIWaitableSwapChain1Frame[] = { + {"DXGIWaitableSwapChainMaxQueuedFrames", "1"}}; -const FeatureEntry::FeatureParam kDXGIWaitableSwapChain2Frames = { - "DXGIWaitableSwapChainMaxQueuedFrames", "2"}; +const FeatureEntry::FeatureParam kDXGIWaitableSwapChain2Frames[] = { + {"DXGIWaitableSwapChainMaxQueuedFrames", "2"}}; -const FeatureEntry::FeatureParam kDXGIWaitableSwapChain3Frames = { - "DXGIWaitableSwapChainMaxQueuedFrames", "3"}; +const FeatureEntry::FeatureParam kDXGIWaitableSwapChain3Frames[] = { + {"DXGIWaitableSwapChainMaxQueuedFrames", "3"}}; const FeatureEntry::FeatureVariation kDXGIWaitableSwapChainVariations[] = { - {"Max 1 Frame", &kDXGIWaitableSwapChain1Frame, 1, nullptr}, - {"Max 2 Frames", &kDXGIWaitableSwapChain2Frames, 1, nullptr}, - {"Max 3 Frames", &kDXGIWaitableSwapChain3Frames, 1, nullptr}}; + {"Max 1 Frame", kDXGIWaitableSwapChain1Frame, nullptr}, + {"Max 2 Frames", kDXGIWaitableSwapChain2Frames, nullptr}, + {"Max 3 Frames", kDXGIWaitableSwapChain3Frames, nullptr}}; #endif #if BUILDFLAG(ENABLE_VR) @@ -539,12 +547,9 @@ const FeatureEntry::FeatureParam kCCTAdaptiveButton_CPA_RMFallbackMenu[] = { const FeatureEntry::FeatureParam kCCTAdaptiveButton_MenuOIB[] = { {"show_open_in_browser_menu_top", "true"}}; const FeatureEntry::FeatureVariation kCCTAdaptiveButtonVariations[] = { - {"Menu OIB moved up", kCCTAdaptiveButton_MenuOIB, - std::size(kCCTAdaptiveButton_MenuOIB), nullptr}, - {"CPA+OIB", kCCTAdaptiveButton_CPA, std::size(kCCTAdaptiveButton_CPA), - nullptr}, - {"CPA+OIB+RMFallbackMenu", kCCTAdaptiveButton_CPA_RMFallbackMenu, - std::size(kCCTAdaptiveButton_CPA_RMFallbackMenu), nullptr}, + {"Menu OIB moved up", kCCTAdaptiveButton_MenuOIB, nullptr}, + {"CPA+OIB", kCCTAdaptiveButton_CPA, nullptr}, + {"CPA+OIB+RMFallbackMenu", kCCTAdaptiveButton_CPA_RMFallbackMenu, nullptr}, }; const FeatureEntry::Choice kAdpfEfficiencyChoices[] = { @@ -552,7 +557,8 @@ const FeatureEntry::Choice kAdpfEfficiencyChoices[] = { {"High Efficiency", switches::kEnableFeatures, "EnableAdpfEfficiencyMode:mode/always_efficient"}, {"Adaptive", switches::kEnableFeatures, - "EnableAdpfEfficiencyMode:mode/adaptive"}, + "EnableAdpfEfficiencyMode:mode/adaptive,UsePerformanceHelper:helper_mode/" + "compositor"}, {"High Performance", switches::kEnableFeatures, "EnableAdpfEfficiencyMode:mode/never"}}; @@ -567,23 +573,9 @@ const FeatureEntry::FeatureParam kCCTAdaptiveButtonTestSwitchBoth[] = { {"always-animate", "true"}}; const FeatureEntry::FeatureVariation kCCTAdaptiveButtonTestSwitchVariations[] = { - {"+Hide button", kCCTAdaptiveButtonTestSwitchHide, - std::size(kCCTAdaptiveButtonTestSwitchHide), nullptr}, - {"+Always animate chip", kCCTAdaptiveButtonTestSwitchChip, - std::size(kCCTAdaptiveButtonTestSwitchChip), nullptr}, - {"+Both", kCCTAdaptiveButtonTestSwitchBoth, - std::size(kCCTAdaptiveButtonTestSwitchBoth), nullptr}, -}; -const FeatureEntry::FeatureParam - kAdaptiveButtonInTopToolbarPageSummaryDisableFallback[] = { - {"intent_fallback", "false"}, -}; -const FeatureEntry::FeatureVariation - kAdaptiveButtonInTopToolbarPageSummaryVariations[] = { - {"(Disable intent fallback)", - kAdaptiveButtonInTopToolbarPageSummaryDisableFallback, - std::size(kAdaptiveButtonInTopToolbarPageSummaryDisableFallback), - nullptr}, + {"+Hide button", kCCTAdaptiveButtonTestSwitchHide, nullptr}, + {"+Always animate chip", kCCTAdaptiveButtonTestSwitchChip, nullptr}, + {"+Both", kCCTAdaptiveButtonTestSwitchBoth, nullptr}, }; const FeatureEntry::FeatureParam kCCTAuthTabHttpsVerificationTimeout10000Ms[] = @@ -594,11 +586,9 @@ const FeatureEntry::FeatureParam kCCTAuthTabHttpsVerificationTimeout1000Ms[] = { const FeatureEntry::FeatureVariation kCCTAuthTabEnableHttpsRedirectsVariations[] = { {"HTTPS verification timeout 10,000ms", - kCCTAuthTabHttpsVerificationTimeout10000Ms, - std::size(kCCTAuthTabHttpsVerificationTimeout10000Ms), nullptr}, + kCCTAuthTabHttpsVerificationTimeout10000Ms, nullptr}, {"HTTPS verification timeout 1000ms", - kCCTAuthTabHttpsVerificationTimeout1000Ms, - std::size(kCCTAuthTabHttpsVerificationTimeout1000Ms), nullptr}}; + kCCTAuthTabHttpsVerificationTimeout1000Ms, nullptr}}; const FeatureEntry::FeatureParam kCCTResizablePolicyParamUseAllowlist[] = { {"default_policy", "use-allowlist"}}; @@ -607,10 +597,8 @@ const FeatureEntry::FeatureParam kCCTResizablePolicyParamUseDenylist[] = { const FeatureEntry::FeatureVariation kCCTResizableThirdPartiesDefaultPolicyVariations[] = { - {"Use Allowlist", kCCTResizablePolicyParamUseAllowlist, - std::size(kCCTResizablePolicyParamUseAllowlist), nullptr}, - {"Use Denylist", kCCTResizablePolicyParamUseDenylist, - std::size(kCCTResizablePolicyParamUseDenylist), nullptr}}; + {"Use Allowlist", kCCTResizablePolicyParamUseAllowlist, nullptr}, + {"Use Denylist", kCCTResizablePolicyParamUseDenylist, nullptr}}; const FeatureEntry::FeatureParam kCCTBottomBarButtonBalancedWithHomeParam[] = { {"google_bottom_bar_button_list", "0,10,3,2"}}; @@ -627,17 +615,16 @@ const FeatureEntry::FeatureParam kCCTBottomBarSearchInSpotlightParam[] = { const FeatureEntry::FeatureVariation kCCTGoogleBottomBarVariations[] = { {"Balanced with home button", kCCTBottomBarButtonBalancedWithHomeParam, - std::size(kCCTBottomBarButtonBalancedWithHomeParam), nullptr}, + nullptr}, {"Balanced with custom button", kCCTBottomBarButtonsBalancedWithCustomParam, - std::size(kCCTBottomBarButtonsBalancedWithCustomParam), nullptr}, + nullptr}, {"Balanced with search button", kCCTBottomBarButtonsBalancedWithSearchParam, - std::size(kCCTBottomBarButtonsBalancedWithSearchParam), nullptr}, - {"home button in spotlight", kCCTBottomBarHomeInSpotlightParam, - std::size(kCCTBottomBarHomeInSpotlightParam), nullptr}, + nullptr}, + {"home button in spotlight", kCCTBottomBarHomeInSpotlightParam, nullptr}, {"custom button in spotlight", kCCTBottomBarCustomInSpotlightParam, - std::size(kCCTBottomBarCustomInSpotlightParam), nullptr}, + nullptr}, {"search button in spotlight", kCCTBottomBarSearchInSpotlightParam, - std::size(kCCTBottomBarSearchInSpotlightParam), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kCCTDoubleDeckerBottomBarParam[] = { @@ -650,13 +637,10 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kCCTGoogleBottomBarVariantLayoutsVariations[] = { - {"Double decker", kCCTDoubleDeckerBottomBarParam, - std::size(kCCTDoubleDeckerBottomBarParam), nullptr}, - {"Single decker", kCCTSingleDeckerBottomBarParam, - std::size(kCCTSingleDeckerBottomBarParam), nullptr}, + {"Double decker", kCCTDoubleDeckerBottomBarParam, nullptr}, + {"Single decker", kCCTSingleDeckerBottomBarParam, nullptr}, {"Single decker with button(s) on right", - kCCTSingleDeckerBottomBarWithButtonsOnRightParam, - std::size(kCCTSingleDeckerBottomBarWithButtonsOnRightParam), nullptr}, + kCCTSingleDeckerBottomBarWithButtonsOnRightParam, nullptr}, }; const FeatureEntry::FeatureParam @@ -670,14 +654,10 @@ const FeatureEntry::FeatureParam kAndroidBottomToolbarV2ReverseAndForce[] = { const FeatureEntry::FeatureVariation kAndroidBottomToolbarV2Variations[] = { {"Force bottom for focused omnibox", - kAndroidBottomToolbarV2ForceBottomForFocusedOmniboxParam, - std::size(kAndroidBottomToolbarV2ForceBottomForFocusedOmniboxParam), - nullptr}, - {"Reverse List", kAndroidBottomToolbarV2ReverseListParam, - std::size(kAndroidBottomToolbarV2ReverseListParam), nullptr}, + kAndroidBottomToolbarV2ForceBottomForFocusedOmniboxParam, nullptr}, + {"Reverse List", kAndroidBottomToolbarV2ReverseListParam, nullptr}, {"Reverse list and force bottom for focused omnibox", - kAndroidBottomToolbarV2ReverseAndForce, - std::size(kAndroidBottomToolbarV2ReverseAndForce), nullptr}}; + kAndroidBottomToolbarV2ReverseAndForce, nullptr}}; const FeatureEntry::Choice kReaderModeHeuristicsChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, @@ -717,18 +697,14 @@ const FeatureEntry::FeatureParam kReaderModeImprovementsAllOn[] = { const FeatureEntry::FeatureVariation kReaderModeImprovementsChoices[] = { {"trigger on mobile-friendly pages", - kReaderModeImprovementsTriggerOnMobileFriendly, - std::size(kReaderModeImprovementsTriggerOnMobileFriendly), nullptr}, + kReaderModeImprovementsTriggerOnMobileFriendly, nullptr}, {"always-on entry point", kReaderModeImprovementsAlwaysOnEntryPoint, - std::size(kReaderModeImprovementsAlwaysOnEntryPoint), nullptr}, - {"increased cpa timeout", kReaderModeImprovementsCustomCPATimeout, - std::size(kReaderModeImprovementsCustomCPATimeout), nullptr}, + nullptr}, + {"increased cpa timeout", kReaderModeImprovementsCustomCPATimeout, nullptr}, {"reading mode in regular tab", - kReaderModeImprovementsShowReadingModeInRegularTab, - std::size(kReaderModeImprovementsShowReadingModeInRegularTab), nullptr}, + kReaderModeImprovementsShowReadingModeInRegularTab, nullptr}, - {"all", kReaderModeImprovementsAllOn, - std::size(kReaderModeImprovementsAllOn), nullptr}}; + {"all", kReaderModeImprovementsAllOn, nullptr}}; const FeatureEntry::FeatureParam kReaderModeUseReadabilityDistiller[] = { {"use_distiller", "true"}}; @@ -739,12 +715,10 @@ const FeatureEntry::FeatureParam kReaderModeUseReadabilityAll[] = { {"use_heuristic", "true"}}; const FeatureEntry::FeatureVariation kReaderModeUseReadabilityChoices[] = { - {"distiller only", kReaderModeUseReadabilityDistiller, - std::size(kReaderModeUseReadabilityDistiller), nullptr}, - {"triggering heuristic only", kReaderModeUseReadabilityHeuristic, - std::size(kReaderModeUseReadabilityHeuristic), nullptr}, + {"distiller only", kReaderModeUseReadabilityDistiller, nullptr}, + {"triggering heuristic only", kReaderModeUseReadabilityHeuristic, nullptr}, {"both distiller and triggering heuristic", kReaderModeUseReadabilityAll, - std::size(kReaderModeUseReadabilityAll), nullptr}}; + nullptr}}; const FeatureEntry::Choice kForceUpdateMenuTypeChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, @@ -762,22 +736,20 @@ const FeatureEntry::FeatureParam kOmahaMinSdkVersionAndroidMinSdk1000[] = { {"min_sdk_version", "1000"}}; const FeatureEntry::FeatureVariation kOmahaMinSdkVersionAndroidVariations[] = { {flag_descriptions::kOmahaMinSdkVersionAndroidMinSdk1Description, - kOmahaMinSdkVersionAndroidMinSdk1, - std::size(kOmahaMinSdkVersionAndroidMinSdk1), nullptr}, + kOmahaMinSdkVersionAndroidMinSdk1, nullptr}, {flag_descriptions::kOmahaMinSdkVersionAndroidMinSdk1000Description, - kOmahaMinSdkVersionAndroidMinSdk1000, - std::size(kOmahaMinSdkVersionAndroidMinSdk1000), nullptr}, + kOmahaMinSdkVersionAndroidMinSdk1000, nullptr}, }; -const FeatureEntry::FeatureParam kFeedHeaderRemovalParam1 = { - feed::kFeedHeaderRemovalTreatmentParam, - feed::kFeedHeaderRemovalTreatmentValue1}; -const FeatureEntry::FeatureParam kFeedHeaderRemovalParam2 = { - feed::kFeedHeaderRemovalTreatmentParam, - feed::kFeedHeaderRemovalTreatmentValue2}; +const FeatureEntry::FeatureParam kFeedHeaderRemovalParam1[] = { + {feed::kFeedHeaderRemovalTreatmentParam, + feed::kFeedHeaderRemovalTreatmentValue1}}; +const FeatureEntry::FeatureParam kFeedHeaderRemovalParam2[] = { + {feed::kFeedHeaderRemovalTreatmentParam, + feed::kFeedHeaderRemovalTreatmentValue2}}; const FeatureEntry::FeatureVariation kFeedHeaderRemovalVariations[] = { - {"1", &kFeedHeaderRemovalParam1, 1, nullptr}, - {"2", &kFeedHeaderRemovalParam2, 1, nullptr}, + {"1", kFeedHeaderRemovalParam1, nullptr}, + {"2", kFeedHeaderRemovalParam2, nullptr}, }; const FeatureEntry::Choice kSafetyHubUnifiedPasswordsModuleChoices[] = { @@ -805,45 +777,15 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kWebIdentityDigitalIdentityCredentialVariations[] = { {"with dialog depending on what credentials are requested", - kWebIdentityDigitalIdentityCredentialDefaultParam, - std::size(kWebIdentityDigitalIdentityCredentialDefaultParam), nullptr}, + kWebIdentityDigitalIdentityCredentialDefaultParam, nullptr}, {"without dialog", kWebIdentityDigitalIdentityCredentialNoDialogParam, - std::size(kWebIdentityDigitalIdentityCredentialNoDialogParam), nullptr}, {"with confirmation dialog with mild warning before sending identity " "request to Android OS", - kWebIdentityDigitalIdentityCredentialLowRiskDialogParam, - std::size(kWebIdentityDigitalIdentityCredentialLowRiskDialogParam), - nullptr}, + kWebIdentityDigitalIdentityCredentialLowRiskDialogParam, nullptr}, {"with confirmation dialog with severe warning before sending " "identity request to Android OS", - kWebIdentityDigitalIdentityCredentialHighRiskDialogParam, - std::size(kWebIdentityDigitalIdentityCredentialHighRiskDialogParam), - nullptr}}; - -const FeatureEntry::FeatureParam kClipboardMaximumAge60Seconds[] = { - {"UIClipboardMaximumAge", "60"}}; -const FeatureEntry::FeatureParam kClipboardMaximumAge90Seconds[] = { - {"UIClipboardMaximumAge", "90"}}; -const FeatureEntry::FeatureParam kClipboardMaximumAge120Seconds[] = { - {"UIClipboardMaximumAge", "120"}}; -const FeatureEntry::FeatureParam kClipboardMaximumAge150Seconds[] = { - {"UIClipboardMaximumAge", "150"}}; -const FeatureEntry::FeatureParam kClipboardMaximumAge180Seconds[] = { - {"UIClipboardMaximumAge", "180"}}; - -const FeatureEntry::FeatureVariation kClipboardMaximumAgeVariations[] = { - {"Enabled 60 seconds", kClipboardMaximumAge60Seconds, - std::size(kClipboardMaximumAge60Seconds), nullptr}, - {"Enabled 90 seconds", kClipboardMaximumAge90Seconds, - std::size(kClipboardMaximumAge90Seconds), nullptr}, - {"Enabled 120 seconds", kClipboardMaximumAge120Seconds, - std::size(kClipboardMaximumAge120Seconds), nullptr}, - {"Enabled 150 seconds", kClipboardMaximumAge150Seconds, - std::size(kClipboardMaximumAge150Seconds), nullptr}, - {"Enabled 180 seconds", kClipboardMaximumAge180Seconds, - std::size(kClipboardMaximumAge180Seconds), nullptr}, -}; + kWebIdentityDigitalIdentityCredentialHighRiskDialogParam, nullptr}}; const FeatureEntry::FeatureParam kMBIModeLegacy[] = {{"mode", "legacy"}}; const FeatureEntry::FeatureParam kMBIModeEnabledPerRenderProcessHost[] = { @@ -852,11 +794,9 @@ const FeatureEntry::FeatureParam kMBIModeEnabledPerSiteInstance[] = { {"mode", "per_site_instance"}}; const FeatureEntry::FeatureVariation kMBIModeVariations[] = { - {"legacy mode", kMBIModeLegacy, std::size(kMBIModeLegacy), nullptr}, - {"per render process host", kMBIModeEnabledPerRenderProcessHost, - std::size(kMBIModeEnabledPerRenderProcessHost), nullptr}, - {"per site instance", kMBIModeEnabledPerSiteInstance, - std::size(kMBIModeEnabledPerSiteInstance), nullptr}}; + {"legacy mode", kMBIModeLegacy, nullptr}, + {"per render process host", kMBIModeEnabledPerRenderProcessHost, nullptr}, + {"per site instance", kMBIModeEnabledPerSiteInstance, nullptr}}; const FeatureEntry::FeatureParam kSearchPrefetchWithoutHoldback[] = { {"prefetch_holdback", "false"}}; @@ -865,10 +805,8 @@ const FeatureEntry::FeatureParam kSearchPrefetchWithHoldback[] = { const FeatureEntry::FeatureVariation kSearchPrefetchServicePrefetchingVariations[] = { - {"without holdback", kSearchPrefetchWithoutHoldback, - std::size(kSearchPrefetchWithoutHoldback), nullptr}, - {"with holdback", kSearchPrefetchWithHoldback, - std::size(kSearchPrefetchWithHoldback), nullptr}}; + {"without holdback", kSearchPrefetchWithoutHoldback, nullptr}, + {"with holdback", kSearchPrefetchWithHoldback, nullptr}}; #if !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam @@ -904,35 +842,25 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kWebUIOmniboxAimPopupVariations[] = { {"- \"Add Context\" button below results", - kWebUIOmniboxAimPopupAddContextButtonBelowResults, - std::size(kWebUIOmniboxAimPopupAddContextButtonBelowResults), nullptr}, + kWebUIOmniboxAimPopupAddContextButtonBelowResults, nullptr}, {"- \"Add Context\" button below results - no contextual chips", kWebUIOmniboxAimPopupAddContextButtonBelowResultsNoContextualChips, - std::size( - kWebUIOmniboxAimPopupAddContextButtonBelowResultsNoContextualChips), nullptr}, {"- \"Add Context\" button inline", - kWebUIOmniboxAimPopupAddContextButtonInline, - std::size(kWebUIOmniboxAimPopupAddContextButtonInline), nullptr}, + kWebUIOmniboxAimPopupAddContextButtonInline, nullptr}, {"- \"Add Context\" button inline - no contextual chips", - kWebUIOmniboxAimPopupAddContextButtonInlineNoContextualChips, - std::size(kWebUIOmniboxAimPopupAddContextButtonInlineNoContextualChips), - nullptr}, + kWebUIOmniboxAimPopupAddContextButtonInlineNoContextualChips, nullptr}, {"- \"Add Context\" button above results [deprecated]", - kWebUIOmniboxAimPopupAddContextButtonAboveResults, - std::size(kWebUIOmniboxAimPopupAddContextButtonAboveResults), nullptr}, + kWebUIOmniboxAimPopupAddContextButtonAboveResults, nullptr}, {"- \"Add Context\" button above results - no contextual chips " "[deprecated]", kWebUIOmniboxAimPopupAddContextButtonAboveResultsNoContextualChips, - std::size( - kWebUIOmniboxAimPopupAddContextButtonAboveResultsNoContextualChips), nullptr}}; const FeatureEntry::FeatureParam kWebUIOmniboxPopupDebugSxS[] = { {"SxS", "true"}}; const FeatureEntry::FeatureVariation kWebUIOmniboxPopupDebugVariations[] = { - {"Side by Side", kWebUIOmniboxPopupDebugSxS, - std::size(kWebUIOmniboxPopupDebugSxS), nullptr}}; + {"Side by Side", kWebUIOmniboxPopupDebugSxS, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_CHROMEOS) @@ -944,12 +872,9 @@ const FeatureEntry::FeatureParam kArcVmMemorySizeShift_800[] = { {"shift_mib", "-800"}}; const FeatureEntry::FeatureVariation kArcVmMemorySizeVariations[] = { - {"shift -200MiB", kArcVmMemorySizeShift_200, - std::size(kArcVmMemorySizeShift_200), nullptr}, - {"shift -500MiB", kArcVmMemorySizeShift_500, - std::size(kArcVmMemorySizeShift_500), nullptr}, - {"shift -800MiB", kArcVmMemorySizeShift_800, - std::size(kArcVmMemorySizeShift_800), nullptr}, + {"shift -200MiB", kArcVmMemorySizeShift_200, nullptr}, + {"shift -500MiB", kArcVmMemorySizeShift_500, nullptr}, + {"shift -800MiB", kArcVmMemorySizeShift_800, nullptr}, }; #endif // BUILDFLAG(IS_CHROMEOS) @@ -969,9 +894,9 @@ const FeatureEntry::FeatureParam kEnableLazyLoadImageForPrerenderPage[] = { const FeatureEntry::FeatureVariation kSearchSuggsetionPrerenderTypeVariations[] = { {"for all invisible page", kEnableLazyLoadImageForAllInvisiblePage, - std::size(kEnableLazyLoadImageForAllInvisiblePage), nullptr}, + nullptr}, {"for prerendering page", kEnableLazyLoadImageForPrerenderPage, - std::size(kEnableLazyLoadImageForPrerenderPage), nullptr}}; + nullptr}}; const FeatureEntry::Choice kTopChromeTouchUiChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, @@ -990,9 +915,8 @@ const FeatureEntry::FeatureParam kZinkEnableAll[] = { {"BorealisZinkGlDriverParam", "ZinkEnableAll"}}; const FeatureEntry::FeatureVariation kBorealisZinkGlDriverVariations[] = { - {"for recommended apps", kZinkEnableRecommended, - std::size(kZinkEnableRecommended), nullptr}, - {"for all apps", kZinkEnableAll, std::size(kZinkEnableAll), nullptr}}; + {"for recommended apps", kZinkEnableRecommended, nullptr}, + {"for all apps", kZinkEnableAll, nullptr}}; const char kArcEnableVirtioBlkForDataInternalName[] = "arc-enable-virtio-blk-for-data"; @@ -1039,12 +963,9 @@ const FeatureEntry::FeatureParam kDynamicSearchUpdateAnimationDuration_150[] = { {"search_result_translation_duration", "150"}}; const FeatureEntry::FeatureVariation kDynamicSearchUpdateAnimationVariations[] = - {{"50ms", kDynamicSearchUpdateAnimationDuration_50, - std::size(kDynamicSearchUpdateAnimationDuration_50), nullptr}, - {"100ms", kDynamicSearchUpdateAnimationDuration_100, - std::size(kDynamicSearchUpdateAnimationDuration_100), nullptr}, - {"150ms", kDynamicSearchUpdateAnimationDuration_150, - std::size(kDynamicSearchUpdateAnimationDuration_150), nullptr}}; + {{"50ms", kDynamicSearchUpdateAnimationDuration_50, nullptr}, + {"100ms", kDynamicSearchUpdateAnimationDuration_100, nullptr}, + {"150ms", kDynamicSearchUpdateAnimationDuration_150, nullptr}}; #endif // BUILDFLAG(IS_CHROMEOS) const FeatureEntry::Choice kSiteIsolationOptOutChoices[] = { @@ -1132,12 +1053,9 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kOptimizationGuideOnDeviceModelVariations[] = { {"BypassPerfRequirement", - kOptimizationGuideOnDeviceModelBypassPerfParams, - std::size(kOptimizationGuideOnDeviceModelBypassPerfParams), nullptr}, + kOptimizationGuideOnDeviceModelBypassPerfParams, nullptr}, {"Force Small Model", - kOptimizationGuideOnDeviceModelBypassPerfSmallModelParams, - std::size(kOptimizationGuideOnDeviceModelBypassPerfSmallModelParams), - nullptr}, + kOptimizationGuideOnDeviceModelBypassPerfSmallModelParams, nullptr}, }; const FeatureEntry::FeatureParam kTextSafetyClassifierNoRetractParams[] = { @@ -1145,8 +1063,7 @@ const FeatureEntry::FeatureParam kTextSafetyClassifierNoRetractParams[] = { }; const FeatureEntry::FeatureVariation kTextSafetyClassifierVariations[] = { {"Executes safety classifier but no retraction of output", - kTextSafetyClassifierNoRetractParams, - std::size(kTextSafetyClassifierNoRetractParams), nullptr}, + kTextSafetyClassifierNoRetractParams, nullptr}, }; const FeatureEntry::FeatureParam kPageActionsMigrationParams[] = { @@ -1179,7 +1096,7 @@ const FeatureEntry::FeatureParam kPageActionsMigrationParams[] = { }; const FeatureEntry::FeatureVariation kPageActionsMigrationVariations[] = { {"with all migrated page actions enabled", kPageActionsMigrationParams, - std::size(kPageActionsMigrationParams), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kPageContentAnnotationsContentParams[] = { @@ -1199,14 +1116,11 @@ const FeatureEntry::FeatureParam }; const FeatureEntry::FeatureVariation kPageContentAnnotationsVariations[] = { {"All Annotations and Persistence on Content", - kPageContentAnnotationsContentParams, - std::size(kPageContentAnnotationsContentParams), nullptr}, + kPageContentAnnotationsContentParams, nullptr}, {"All Annotations and Persistence on Title", - kPageContentAnnotationsTitleParams, - std::size(kPageContentAnnotationsTitleParams), nullptr}, + kPageContentAnnotationsTitleParams, nullptr}, {"Annotation timeout duration 0 seconds", - kPageContentAnnotationsTimeoutDurationParams, - std::size(kPageContentAnnotationsTimeoutDurationParams), nullptr}}; + kPageContentAnnotationsTimeoutDurationParams, nullptr}}; #if !BUILDFLAG(IS_ANDROID) constexpr FeatureEntry::FeatureParam @@ -1215,9 +1129,7 @@ constexpr FeatureEntry::FeatureParam constexpr FeatureEntry::FeatureVariation kHappinessTrackingSurveysForDesktopDemoVariations[] = { {"without Auto Prompt", - kHappinessTrackingSurveysForDesktopDemoWithoutAutoPrompt, - std::size(kHappinessTrackingSurveysForDesktopDemoWithoutAutoPrompt), - nullptr}}; + kHappinessTrackingSurveysForDesktopDemoWithoutAutoPrompt, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kJourneysShowAllVisitsParams[] = { @@ -1230,10 +1142,8 @@ const FeatureEntry::FeatureParam kJourneysAllLocalesParams[] = { {"JourneysLocaleOrLanguageAllowlist", "*"}, }; const FeatureEntry::FeatureVariation kJourneysVariations[] = { - {"No 'Show More' - Show all visits", kJourneysShowAllVisitsParams, - std::size(kJourneysShowAllVisitsParams), nullptr}, - {"All Supported Locales", kJourneysAllLocalesParams, - std::size(kJourneysAllLocalesParams), nullptr}, + {"No 'Show More' - Show all visits", kJourneysShowAllVisitsParams, nullptr}, + {"All Supported Locales", kJourneysAllLocalesParams, nullptr}, }; const FeatureEntry::FeatureParam @@ -1268,27 +1178,21 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kLensAimSuggestionsVariations[] = { {"with Contextual - 3 suggestions", - kLensAimSuggestionsTypeContextualWith3Suggestions, - std::size(kLensAimSuggestionsTypeContextualWith3Suggestions), nullptr}, + kLensAimSuggestionsTypeContextualWith3Suggestions, nullptr}, {"with Contextual - 5 suggestions", - kLensAimSuggestionsTypeContextualWith5Suggestions, - std::size(kLensAimSuggestionsTypeContextualWith5Suggestions), nullptr}, + kLensAimSuggestionsTypeContextualWith5Suggestions, nullptr}, {"with Contextual - 8 suggestions", - kLensAimSuggestionsTypeContextualWith8Suggestions, - std::size(kLensAimSuggestionsTypeContextualWith8Suggestions), nullptr}, + kLensAimSuggestionsTypeContextualWith8Suggestions, nullptr}, {"with Multimodal - 3 suggestions", - kLensAimSuggestionsTypeMultimodalWith3Suggestions, - std::size(kLensAimSuggestionsTypeMultimodalWith3Suggestions), nullptr}, + kLensAimSuggestionsTypeMultimodalWith3Suggestions, nullptr}, {"with Multimodal - 5 suggestions", - kLensAimSuggestionsTypeMultimodalWith5Suggestions, - std::size(kLensAimSuggestionsTypeMultimodalWith5Suggestions), nullptr}, + kLensAimSuggestionsTypeMultimodalWith5Suggestions, nullptr}, {"with Multimodal - 8 suggestions", - kLensAimSuggestionsTypeMultimodalWith8Suggestions, - std::size(kLensAimSuggestionsTypeMultimodalWith8Suggestions), nullptr}, + kLensAimSuggestionsTypeMultimodalWith8Suggestions, nullptr}, }; const FeatureEntry::FeatureVariation kRemotePageMetadataVariations[] = { - {"High Performance Canonicalization", nullptr, 0, "3362133"}, + {"High Performance Canonicalization", {}, "3362133"}, }; const FeatureEntry::FeatureParam @@ -1301,10 +1205,8 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kAimServerEligibilityIncludeClientLocaleVariations[] = { {"GET with Locale", kAimServerEligibilityRequestModeGetWithLocale, - std::size(kAimServerEligibilityRequestModeGetWithLocale), nullptr}, {"POST with Proto", kAimServerEligibilityRequestModePostWithProto, - std::size(kAimServerEligibilityRequestModeGetWithLocale), nullptr}, }; @@ -1328,15 +1230,15 @@ const FeatureEntry::FeatureParam kOmniboxRichAutocompletionAggressive4[] = { const FeatureEntry::FeatureVariation kOmniboxRichAutocompletionPromisingVariations[] = { {"Min input length 1 characters", kOmniboxRichAutocompletionAggressive1, - std::size(kOmniboxRichAutocompletionAggressive1), nullptr}, + nullptr}, {"Min input length 2 characters", kOmniboxRichAutocompletionAggressive2, - std::size(kOmniboxRichAutocompletionAggressive2), nullptr}, + nullptr}, {"Min input length 2 characters", kOmniboxRichAutocompletionAggressive2, - std::size(kOmniboxRichAutocompletionAggressive2), nullptr}, + nullptr}, {"Min input length 3 characters", kOmniboxRichAutocompletionAggressive3, - std::size(kOmniboxRichAutocompletionAggressive3), nullptr}, + nullptr}, {"Min input length 4 characters", kOmniboxRichAutocompletionAggressive4, - std::size(kOmniboxRichAutocompletionAggressive4), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kOmniboxStarterPackExpansionPreProdUrl[] = { @@ -1345,10 +1247,8 @@ const FeatureEntry::FeatureParam kOmniboxStarterPackExpansionStagingUrl[] = { {"StarterPackGeminiUrlOverride", "https://gemini.google.com/staging/prompt"}}; const FeatureEntry::FeatureVariation kOmniboxStarterPackExpansionVariations[] = - {{"pre-prod url", kOmniboxStarterPackExpansionPreProdUrl, - std::size(kOmniboxStarterPackExpansionPreProdUrl), nullptr}, - {"staging url", kOmniboxStarterPackExpansionStagingUrl, - std::size(kOmniboxStarterPackExpansionStagingUrl), nullptr}}; + {{"pre-prod url", kOmniboxStarterPackExpansionPreProdUrl, nullptr}, + {"staging url", kOmniboxStarterPackExpansionStagingUrl, nullptr}}; const FeatureEntry::FeatureParam kOmniboxUrlSuggestionsOnFocusTwoDayWindow[] = { {"OnFocusMostVisitedRecencyWindow", "1"}, @@ -1368,13 +1268,13 @@ const FeatureEntry::FeatureParam kOmniboxUrlSuggestionsOnFocusTwoWeekWindow[] = const FeatureEntry::FeatureVariation kOmniboxUrlSuggestionsOnFocusVariations[] = { {"- Two day window", kOmniboxUrlSuggestionsOnFocusTwoDayWindow, - std::size(kOmniboxUrlSuggestionsOnFocusTwoDayWindow), nullptr}, + nullptr}, {"- Three day window", kOmniboxUrlSuggestionsOnFocusThreeDayWindow, - std::size(kOmniboxUrlSuggestionsOnFocusThreeDayWindow), nullptr}, + nullptr}, {"- One week window", kOmniboxUrlSuggestionsOnFocusOneWeekWindow, - std::size(kOmniboxUrlSuggestionsOnFocusOneWeekWindow), nullptr}, + nullptr}, {"- Two week window", kOmniboxUrlSuggestionsOnFocusTwoWeekWindow, - std::size(kOmniboxUrlSuggestionsOnFocusTwoWeekWindow), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kOmniboxZpsSuggestionLimitMax8[] = { @@ -1414,24 +1314,19 @@ const FeatureEntry::FeatureParam kOmniboxZpsSuggestionLimitMax5ThreeTwo[] = { }; const FeatureEntry::FeatureVariation kOmniboxZpsSuggestionLimitVariations[] = { {"- Max 8 Suggestions (4 search, 4 url)", kOmniboxZpsSuggestionLimitMax8, - std::size(kOmniboxZpsSuggestionLimitMax8), nullptr}, + nullptr}, {"- Max 4 Suggestions (2 search, 2 url)", kOmniboxZpsSuggestionLimitMax4, - std::size(kOmniboxZpsSuggestionLimitMax4), nullptr}, + nullptr}, {"- Max 2 Suggestions (2 search, 0 url)", - kOmniboxZpsSuggestionLimitMax2TwoZero, - std::size(kOmniboxZpsSuggestionLimitMax2TwoZero), nullptr}, + kOmniboxZpsSuggestionLimitMax2TwoZero, nullptr}, {"- Max 3 Suggestions (3 search, 0 url)", - kOmniboxZpsSuggestionLimitMax3ThreeZero, - std::size(kOmniboxZpsSuggestionLimitMax3ThreeZero), nullptr}, + kOmniboxZpsSuggestionLimitMax3ThreeZero, nullptr}, {"- Max 4 Suggestions (4 search, 0 url)", - kOmniboxZpsSuggestionLimitMax4FourZero, - std::size(kOmniboxZpsSuggestionLimitMax4FourZero), nullptr}, + kOmniboxZpsSuggestionLimitMax4FourZero, nullptr}, {"- Max 5 Suggestions (4 search, 1 url)", - kOmniboxZpsSuggestionLimitMax5FourOne, - std::size(kOmniboxZpsSuggestionLimitMax5FourOne), nullptr}, + kOmniboxZpsSuggestionLimitMax5FourOne, nullptr}, {"- Max 5 Suggestions (3 search, 2 url)", - kOmniboxZpsSuggestionLimitMax5ThreeTwo, - std::size(kOmniboxZpsSuggestionLimitMax5ThreeTwo), nullptr}, + kOmniboxZpsSuggestionLimitMax5ThreeTwo, nullptr}, }; const FeatureEntry::FeatureParam @@ -1457,15 +1352,15 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kOmniboxContextualSearchOnFocusSuggestionsVariations[] = { {"- Limit 0", kOmniboxContextualSearchOnFocusSuggestionsLimit0, - std::size(kOmniboxContextualSearchOnFocusSuggestionsLimit0), nullptr}, + nullptr}, {"- Limit 1", kOmniboxContextualSearchOnFocusSuggestionsLimit1, - std::size(kOmniboxContextualSearchOnFocusSuggestionsLimit1), nullptr}, + nullptr}, {"- Limit 2", kOmniboxContextualSearchOnFocusSuggestionsLimit2, - std::size(kOmniboxContextualSearchOnFocusSuggestionsLimit2), nullptr}, + nullptr}, {"- Limit 3", kOmniboxContextualSearchOnFocusSuggestionsLimit3, - std::size(kOmniboxContextualSearchOnFocusSuggestionsLimit3), nullptr}, + nullptr}, {"- Limit 4", kOmniboxContextualSearchOnFocusSuggestionsLimit4, - std::size(kOmniboxContextualSearchOnFocusSuggestionsLimit4), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kOmniboxAimEntryPointHintLimitsDaily1[] = { @@ -1487,11 +1382,11 @@ const FeatureEntry::FeatureParam kOmniboxAimEntryPointHintLimitsUnlimited[] = { const FeatureEntry::FeatureVariation kOmniboxAiModeEntryPointVariations[] = { {"Hint Limits Daily 1 Total 5", kOmniboxAimEntryPointHintLimitsDaily1, - std::size(kOmniboxAimEntryPointHintLimitsDaily1), nullptr}, + nullptr}, {"Hint Limits Daily 3 Total 10", kOmniboxAimEntryPointHintLimitsDaily3, - std::size(kOmniboxAimEntryPointHintLimitsDaily3), nullptr}, + nullptr}, {"Hint Limits Unlimited", kOmniboxAimEntryPointHintLimitsUnlimited, - std::size(kOmniboxAimEntryPointHintLimitsUnlimited), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam @@ -1512,17 +1407,12 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kContextualSuggestionsAblateOthersWhenPresentVariations[] = { {"- Ablate all", kContextualSuggestionsAblateOthersWhenPresentAblateAll, - std::size(kContextualSuggestionsAblateOthersWhenPresentAblateAll), nullptr}, {"- Ablate search only", kContextualSuggestionsAblateOthersWhenPresentAblateSearchOnly, - std::size( - kContextualSuggestionsAblateOthersWhenPresentAblateSearchOnly), nullptr}, {"- Ablate URL only", - kContextualSuggestionsAblateOthersWhenPresentAblateUrlOnly, - std::size(kContextualSuggestionsAblateOthersWhenPresentAblateUrlOnly), - nullptr}, + kContextualSuggestionsAblateOthersWhenPresentAblateUrlOnly, nullptr}, }; const FeatureEntry::Choice kContextualSuggestionsUiImprovementsChoices[] = { @@ -1640,27 +1530,21 @@ const FeatureEntry::FeatureParam kOmniboxToolbeltAllActionsZeroTypedInputs[] = { }; const FeatureEntry::FeatureVariation kOmniboxToolbeltVariations[] = { {"1 - Lens Action - Zero Inputs (Default)", - kOmniboxToolbeltLensActionsZeroInputs, - std::size(kOmniboxToolbeltLensActionsZeroInputs), nullptr}, + kOmniboxToolbeltLensActionsZeroInputs, nullptr}, {"2 - Lens Action - Zero + Typed Inputs", - kOmniboxToolbeltLensActionsZeroTypedInputs, - std::size(kOmniboxToolbeltLensActionsZeroTypedInputs), nullptr}, + kOmniboxToolbeltLensActionsZeroTypedInputs, nullptr}, {"3 - AI Action - Zero Inputs", kOmniboxToolbeltAiActionsZeroInputs, - std::size(kOmniboxToolbeltAiActionsZeroInputs), nullptr}, + nullptr}, {"4 - AI Action - Zero + Typed Inputs", - kOmniboxToolbeltAiActionsZeroTypedInputs, - std::size(kOmniboxToolbeltAiActionsZeroTypedInputs), nullptr}, + kOmniboxToolbeltAiActionsZeroTypedInputs, nullptr}, {"5 - Lens + AI Actions - Zero Inputs", - kOmniboxToolbeltLensAiActionsZeroInputs, - std::size(kOmniboxToolbeltLensAiActionsZeroInputs), nullptr}, + kOmniboxToolbeltLensAiActionsZeroInputs, nullptr}, {"6 - Lens + AI Actions - Zero + Typed Inputs", - kOmniboxToolbeltLensAiActionsZeroTypedInputs, - std::size(kOmniboxToolbeltLensAiActionsZeroTypedInputs), nullptr}, + kOmniboxToolbeltLensAiActionsZeroTypedInputs, nullptr}, {"7 - All Actions - Zero Inputs", kOmniboxToolbeltAllActionsZeroInputs, - std::size(kOmniboxToolbeltAllActionsZeroInputs), nullptr}, + nullptr}, {"8 - All Actions - Zero + Typed Inputs", - kOmniboxToolbeltAllActionsZeroTypedInputs, - std::size(kOmniboxToolbeltAllActionsZeroTypedInputs), nullptr}, + kOmniboxToolbeltAllActionsZeroTypedInputs, nullptr}, }; const FeatureEntry::FeatureParam kComposeboxNextSingleContext[] = { @@ -1677,13 +1561,11 @@ const FeatureEntry::FeatureParam kComposeboxNextForRealboxNext[] = { }; const FeatureEntry::FeatureVariation kNtpComposeboxVariations[] = { - {"- Next Experience Single Context", kComposeboxNextSingleContext, - std::size(kComposeboxNextSingleContext), nullptr}, + {"- Next Experience Single Context", kComposeboxNextSingleContext, nullptr}, {"- Next Experience for Realbox Next", kComposeboxNextForRealboxNext, - std::size(kComposeboxNextForRealboxNext), nullptr}, + nullptr}, {"- Next Experience Single Context for Realbox Next", - kComposeboxNextSingleContextForRealboxNext, - std::size(kComposeboxNextSingleContextForRealboxNext), nullptr}, + kComposeboxNextSingleContextForRealboxNext, nullptr}, }; const FeatureEntry::FeatureParam kShowNextRealboxTallTopContext[] = { @@ -1705,16 +1587,12 @@ const FeatureEntry::FeatureParam kShowNextRealboxCompactCyclingPlaceholders[] = const FeatureEntry::FeatureVariation kNtpRealboxNextVariations[] = { {"- Show Next Realbox with Top Context Button (TallTopContext)", - kShowNextRealboxTallTopContext, std::size(kShowNextRealboxTallTopContext), - nullptr}, - {"- Show Next Realbox (Compact)", kShowNextRealboxCompact, - std::size(kShowNextRealboxCompact), nullptr}, + kShowNextRealboxTallTopContext, nullptr}, + {"- Show Next Realbox (Compact)", kShowNextRealboxCompact, nullptr}, {"- Show Next Realbox: Top Context, Cycling placeholders", - kShowNextRealboxTallTopContextCyclingPlaceholders, - std::size(kShowNextRealboxTallTopContextCyclingPlaceholders), nullptr}, + kShowNextRealboxTallTopContextCyclingPlaceholders, nullptr}, {"- Show Next Realbox: Compact, Cycling placeholders", - kShowNextRealboxCompactCyclingPlaceholders, - std::size(kShowNextRealboxCompactCyclingPlaceholders), nullptr}, + kShowNextRealboxCompactCyclingPlaceholders, nullptr}, }; const FeatureEntry::FeatureParam kNtpNextShowDeepDiveSuggestions[] = { @@ -1764,30 +1642,22 @@ const FeatureEntry::FeatureParam kNtpNextShowSimplificationUIWithDismissal[] = { }; const FeatureEntry::FeatureVariation kNtpNextVariations[] = { - {"- Show Deep Dive Suggestions", kNtpNextShowDeepDiveSuggestions, - std::size(kNtpNextShowDeepDiveSuggestions), nullptr}, + {"- Show Deep Dive Suggestions", kNtpNextShowDeepDiveSuggestions, nullptr}, {"- Show Row UI With Deep Dive", kNtpNextShowSimplificationUIWithDeepDive, - std::size(kNtpNextShowSimplificationUIWithDeepDive), nullptr}, + nullptr}, {"- Show Chips UI with a New Suggestions Client", - kNtpNextShowChipsUIWithChromeNtpActionClient, - std::size(kNtpNextShowChipsUIWithChromeNtpActionClient), nullptr}, + kNtpNextShowChipsUIWithChromeNtpActionClient, nullptr}, {"- Show Row UI with a New Suggestions Client", - kNtpNextShowSimplificationUIWithChromeNtpActionClient, - std::size(kNtpNextShowSimplificationUIWithChromeNtpActionClient), nullptr}, + kNtpNextShowSimplificationUIWithChromeNtpActionClient, nullptr}, {"- Show Chips UI with a New Client and No Recent Tab Chip in the Steady " "State", kNtpNextShowChipsUIWithNtpActionClientWithNoRecentTabInSteadyState, - std::size( - kNtpNextShowChipsUIWithNtpActionClientWithNoRecentTabInSteadyState), nullptr}, {"- Show Row UI with a New Client and No Recent Tab Chip in the Steady " "State", kNtpNextShowSimplificationUIWithNtpActionClientWithNoRecentTabInSteadyState, - std::size( - kNtpNextShowSimplificationUIWithNtpActionClientWithNoRecentTabInSteadyState), nullptr}, - {"- Show Dismissal UI", kNtpNextShowSimplificationUIWithDismissal, - std::size(kNtpNextShowSimplificationUIWithDismissal), nullptr}, + {"- Show Dismissal UI", kNtpNextShowSimplificationUIWithDismissal, nullptr}, }; const FeatureEntry::FeatureParam kNtpFeatureOptimizationModuleRemovalDefault[] = @@ -1805,11 +1675,9 @@ const FeatureEntry::FeatureParam kNtpFeatureOptimizationModuleRemovalTesting[] = const FeatureEntry::FeatureVariation kNtpFeatureOptimizationModuleRemovalVariations[] = { {"- Default Auto-Removal Timing", - kNtpFeatureOptimizationModuleRemovalDefault, - std::size(kNtpFeatureOptimizationModuleRemovalDefault), nullptr}, + kNtpFeatureOptimizationModuleRemovalDefault, nullptr}, {"- Auto-Removal Timing for Testing", - kNtpFeatureOptimizationModuleRemovalTesting, - std::size(kNtpFeatureOptimizationModuleRemovalTesting), nullptr}, + kNtpFeatureOptimizationModuleRemovalTesting, nullptr}, }; const FeatureEntry::FeatureParam @@ -1827,11 +1695,9 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kNtpFeatureOptimizationShortcutsRemovalVariations[] = { {"- Default Auto-Removal Timing", - kNtpFeatureOptimizationShortcutsRemovalDefault, - std::size(kNtpFeatureOptimizationShortcutsRemovalDefault), nullptr}, + kNtpFeatureOptimizationShortcutsRemovalDefault, nullptr}, {"- Auto-Removal Timing for Testing", - kNtpFeatureOptimizationShortcutsRemovalTesting, - std::size(kNtpFeatureOptimizationShortcutsRemovalTesting), nullptr}, + kNtpFeatureOptimizationShortcutsRemovalTesting, nullptr}, }; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || @@ -1872,22 +1738,17 @@ const FeatureEntry::FeatureParam }; const FeatureEntry::FeatureVariation kOmniboxMlUrlScoringVariations[] = { - {"Enabled with fixes", kOmniboxMlUrlScoringEnabledWithFixes, - std::size(kOmniboxMlUrlScoringEnabledWithFixes), nullptr}, + {"Enabled with fixes", kOmniboxMlUrlScoringEnabledWithFixes, nullptr}, {"unlimited suggestion candidates", - kOmniboxMlUrlScoringUnlimitedNumCandidates, - std::size(kOmniboxMlUrlScoringUnlimitedNumCandidates), nullptr}, + kOmniboxMlUrlScoringUnlimitedNumCandidates, nullptr}, {"Increase provider max limit to 10", - kOmniboxMlUrlScoringMaxMatchesByProvider10, - std::size(kOmniboxMlUrlScoringMaxMatchesByProvider10), nullptr}, + kOmniboxMlUrlScoringMaxMatchesByProvider10, nullptr}, {"with scoring of Search suggestions", kOmniboxMlUrlScoringWithSearches, - std::size(kOmniboxMlUrlScoringWithSearches), nullptr}, + nullptr}, {"with scoring of verbatim URL suggestions", - kOmniboxMlUrlScoringWithVerbatimURLs, - std::size(kOmniboxMlUrlScoringWithVerbatimURLs), nullptr}, + kOmniboxMlUrlScoringWithVerbatimURLs, nullptr}, {"with scoring of Search & verbatim URL suggestions", - kOmniboxMlUrlScoringWithSearchesAndVerbatimURLs, - std::size(kOmniboxMlUrlScoringWithSearchesAndVerbatimURLs), nullptr}, + kOmniboxMlUrlScoringWithSearchesAndVerbatimURLs, nullptr}, }; const FeatureEntry::FeatureParam @@ -1929,15 +1790,15 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kMlUrlPiecewiseMappedSearchBlendingVariations[] = { {"adjusted by 0", kMlUrlPiecewiseMappedSearchBlendingAdjustedBy0, - std::size(kMlUrlPiecewiseMappedSearchBlendingAdjustedBy0), nullptr}, + nullptr}, {"demoted by 50", kMlUrlPiecewiseMappedSearchBlendingDemotedBy50, - std::size(kMlUrlPiecewiseMappedSearchBlendingDemotedBy50), nullptr}, + nullptr}, {"promoted by 50", kMlUrlPiecewiseMappedSearchBlendingPromotedBy50, - std::size(kMlUrlPiecewiseMappedSearchBlendingPromotedBy50), nullptr}, + nullptr}, {"promoted by 100", kMlUrlPiecewiseMappedSearchBlendingPromotedBy100, - std::size(kMlUrlPiecewiseMappedSearchBlendingPromotedBy100), nullptr}, + nullptr}, {"mobile mapping", kMlUrlPiecewiseMappedSearchBlendingMobileMapping, - std::size(kMlUrlPiecewiseMappedSearchBlendingMobileMapping), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kMlUrlSearchBlendingStable[] = { @@ -1965,14 +1826,12 @@ const FeatureEntry::FeatureParam kMlUrlSearchBlendingMappedAggressiveUrls[] = { }; const FeatureEntry::FeatureVariation kMlUrlSearchBlendingVariations[] = { - {"Stable", kMlUrlSearchBlendingStable, - std::size(kMlUrlSearchBlendingStable), nullptr}, + {"Stable", kMlUrlSearchBlendingStable, nullptr}, {"Mapped conservative urls", kMlUrlSearchBlendingMappedConservativeUrls, - std::size(kMlUrlSearchBlendingMappedConservativeUrls), nullptr}, - {"Mapped moderate urls", kMlUrlSearchBlendingMappedModerateUrls, - std::size(kMlUrlSearchBlendingMappedModerateUrls), nullptr}, + nullptr}, + {"Mapped moderate urls", kMlUrlSearchBlendingMappedModerateUrls, nullptr}, {"Mapped aggressive urls", kMlUrlSearchBlendingMappedAggressiveUrls, - std::size(kMlUrlSearchBlendingMappedAggressiveUrls), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kMostVitedTilesNewScoring_DecayStaircaseCap10[] = { @@ -1998,19 +1857,17 @@ const FeatureEntry::FeatureParam kMostVitedTilesNewScoring_DecayCap1[] = { constexpr FeatureEntry::FeatureVariation kMostVisitedTilesNewScoringVariations[] = { {"Decay Staircase, Cap 10", - kMostVitedTilesNewScoring_DecayStaircaseCap10, - std::size(kMostVitedTilesNewScoring_DecayStaircaseCap10), nullptr}, - {"Decay, Cap 1", kMostVitedTilesNewScoring_DecayCap1, - std::size(kMostVitedTilesNewScoring_DecayCap1), nullptr}, + kMostVitedTilesNewScoring_DecayStaircaseCap10, nullptr}, + {"Decay, Cap 1", kMostVitedTilesNewScoring_DecayCap1, nullptr}, }; const FeatureEntry::FeatureVariation kUrlScoringModelVariations[] = { - {"Small model (desktop)", nullptr, 0, nullptr}, - {"Full model (desktop)", nullptr, 0, "3380045"}, - {"Small model (ios)", nullptr, 0, "3379590"}, - {"Full model (ios)", nullptr, 0, "3380197"}, - {"Small model (android)", nullptr, 0, "3381543"}, - {"Full model (android)", nullptr, 0, "3381544"}, + {"Small model (desktop)", {}, nullptr}, + {"Full model (desktop)", {}, "3380045"}, + {"Small model (ios)", {}, "3379590"}, + {"Full model (ios)", {}, "3380197"}, + {"Small model (android)", {}, "3381543"}, + {"Full model (android)", {}, "3381544"}, }; const FeatureEntry::FeatureParam @@ -2047,30 +1904,17 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kOmniboxZeroSuggestPrefetchDebouncingVariations[] = { {"Minimal debouncing relative to last run", - kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRun, - std::size(kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRun), - nullptr}, + kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRun, nullptr}, {"Minimal debouncing relative to last request", - kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRequest, - std::size(kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRequest), - nullptr}, + kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRequest, nullptr}, {"Moderate debouncing relative to last run", - kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRun, - std::size(kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRun), - nullptr}, + kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRun, nullptr}, {"Moderate debouncing relative to last request", - kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRequest, - std::size( - kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRequest), - nullptr}, + kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRequest, nullptr}, {"Aggressive debouncing relative to last run", - kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRun, - std::size(kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRun), - nullptr}, + kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRun, nullptr}, {"Aggressive debouncing relative to last request", kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRequest, - std::size( - kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRequest), nullptr}, }; @@ -2080,19 +1924,7 @@ constexpr FeatureEntry::FeatureParam kOmniboxDiagInputConnection[]{ {OmniboxFieldTrial::kAndroidDiagInputConnection.name, "true"}}; constexpr FeatureEntry::FeatureVariation kOmniboxDiagnosticsAndroidVaiants[] = { - {"- InputConnection", kOmniboxDiagInputConnection, - std::size(kOmniboxDiagInputConnection), nullptr}}; - -// Omnibox Mobile Parity Update V2 --> - -const FeatureEntry::FeatureParam - kOmniboxMobileParityV2RetrieveBuiltinFavicon[] = { - {OmniboxFieldTrial::kMobileParityRetrieveBuiltinFavicon.name, "true"}}; - -const FeatureEntry::FeatureVariation kOmniboxMobileParityV2Variants[] = { - {"with Builtin Favicon", kOmniboxMobileParityV2RetrieveBuiltinFavicon, - std::size(kOmniboxMobileParityV2RetrieveBuiltinFavicon)}}; -// <-- Omnibox Mobile Parity Update V2 + {"- InputConnection", kOmniboxDiagInputConnection, nullptr}}; #if !IS_OFFICIAL_BUILD const FeatureEntry::FeatureParam @@ -2101,8 +1933,7 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kOmniboxRemoveSearchReadyOmniboxVariations[] = { - {"No Match", kOmniboxRemoveSearchReadyOmniboxNoMatchParam, - std::size(kOmniboxRemoveSearchReadyOmniboxNoMatchParam), nullptr}}; + {"No Match", kOmniboxRemoveSearchReadyOmniboxNoMatchParam, nullptr}}; #endif const FeatureEntry::FeatureParam kOmniboxAimDedicatedModeButton[] = { @@ -2124,30 +1955,28 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureParam kOmniboxAimMultiContextCompactFusebox[] = { {"multi_context", "true"}, {"compact_fusebox", "true"}}; +const FeatureEntry::FeatureParam kOmniboxAimModelPickerAndCanvas[] = { + {"multi_context", "true"}, + {"show_model_picker", "true"}}; const FeatureEntry::FeatureVariation kOmniboxMultimodalInputVariants[] = { - {"Dedicated Button", kOmniboxAimDedicatedModeButton, - std::size(kOmniboxAimDedicatedModeButton), "3395755"}, - {"Button with Hint", kOmniboxAimDedicatedModeButtonWithHint, - std::size(kOmniboxAimDedicatedModeButtonWithHint), "3395755"}, - {"Compact", kOmniboxAimCompactFusebox, std::size(kOmniboxAimCompactFusebox), - "3395755"}, - {"MC (Multi context)", kOmniboxAimMultiContext, - std::size(kOmniboxAimMultiContext), "3395755"}, + {"Dedicated Button", kOmniboxAimDedicatedModeButton, "3395755"}, + {"Button with Hint", kOmniboxAimDedicatedModeButtonWithHint, "3395755"}, + {"Compact", kOmniboxAimCompactFusebox, "3395755"}, + {"MC (Multi context)", kOmniboxAimMultiContext, "3395755"}, {"MC Dedicated Button", kOmniboxAimMultiContextDedicatedModeButton, - std::size(kOmniboxAimMultiContextDedicatedModeButton), "3395755"}, + "3395755"}, {"MC Button with Hint", kOmniboxAimMultiContextDedicatedModeButtonWithHint, - std::size(kOmniboxAimMultiContextDedicatedModeButtonWithHint), "3395755"}, - {"MC Compact", kOmniboxAimMultiContextCompactFusebox, - std::size(kOmniboxAimMultiContextCompactFusebox), "3395755"}, + "3395755"}, + {"MC Compact", kOmniboxAimMultiContextCompactFusebox, "3395755"}, + {"Model Picker & Canvas", kOmniboxAimModelPickerAndCanvas, "3395755"}, }; const FeatureEntry::FeatureParam kOmniboxMultilineEditFieldForAutocomplete[] = { {"wrap_autocomplete_text", "true"}}; const FeatureEntry::FeatureVariation kOmniboxMultilineEditFieldVariants[] = { - {"For Autocomplete", kOmniboxMultilineEditFieldForAutocomplete, - std::size(kOmniboxMultilineEditFieldForAutocomplete), nullptr}}; + {"For Autocomplete", kOmniboxMultilineEditFieldForAutocomplete, nullptr}}; const FeatureEntry::FeatureParam kOmniboxImprovementForLFFVariationsAll[] = { {OmniboxFieldTrial::kOmniboxImprovementForLFFSwitchToTabChip.name, "true"}, @@ -2173,18 +2002,13 @@ const FeatureEntry::FeatureParam "true"}}; const FeatureEntry::FeatureVariation kOmniboxImprovementForLFFVariations[] = { - {"All", kOmniboxImprovementForLFFVariationsAll, - std::size(kOmniboxImprovementForLFFVariationsAll), nullptr}, + {"All", kOmniboxImprovementForLFFVariationsAll, nullptr}, {"Switch to Tab Chip", kOmniboxImprovementForLFFVariationsSwitchToTabChip, - std::size(kOmniboxImprovementForLFFVariationsSwitchToTabChip), nullptr}, - {"Remove Suggestion", - kOmniboxImprovementForLFFVariationsRemoveSuggestionViaButton, - std::size(kOmniboxImprovementForLFFVariationsRemoveSuggestionViaButton), nullptr}, + {"Remove Suggestion", + kOmniboxImprovementForLFFVariationsRemoveSuggestionViaButton, nullptr}, {"Persist Editing State", - kOmniboxImprovementForLFFVariationsPersistEditingState, - std::size(kOmniboxImprovementForLFFVariationsPersistEditingState), - nullptr}}; + kOmniboxImprovementForLFFVariationsPersistEditingState, nullptr}}; #endif // BUILDFLAG(IS_ANDROID) @@ -2212,23 +2036,17 @@ const FeatureEntry::FeatureParam kMaxZeroSuggestMatches15[] = { {"MaxZeroSuggestMatches", "15"}}; const FeatureEntry::FeatureVariation kMaxZeroSuggestMatchesVariations[] = { - {"5", kMaxZeroSuggestMatches5, std::size(kMaxZeroSuggestMatches5), nullptr}, - {"6", kMaxZeroSuggestMatches6, std::size(kMaxZeroSuggestMatches6), nullptr}, - {"7", kMaxZeroSuggestMatches7, std::size(kMaxZeroSuggestMatches7), nullptr}, - {"8", kMaxZeroSuggestMatches8, std::size(kMaxZeroSuggestMatches8), nullptr}, - {"9", kMaxZeroSuggestMatches9, std::size(kMaxZeroSuggestMatches9), nullptr}, - {"10", kMaxZeroSuggestMatches10, std::size(kMaxZeroSuggestMatches10), - nullptr}, - {"11", kMaxZeroSuggestMatches11, std::size(kMaxZeroSuggestMatches11), - nullptr}, - {"12", kMaxZeroSuggestMatches12, std::size(kMaxZeroSuggestMatches12), - nullptr}, - {"13", kMaxZeroSuggestMatches13, std::size(kMaxZeroSuggestMatches13), - nullptr}, - {"14", kMaxZeroSuggestMatches14, std::size(kMaxZeroSuggestMatches14), - nullptr}, - {"15", kMaxZeroSuggestMatches15, std::size(kMaxZeroSuggestMatches15), - nullptr}}; + {"5", kMaxZeroSuggestMatches5, nullptr}, + {"6", kMaxZeroSuggestMatches6, nullptr}, + {"7", kMaxZeroSuggestMatches7, nullptr}, + {"8", kMaxZeroSuggestMatches8, nullptr}, + {"9", kMaxZeroSuggestMatches9, nullptr}, + {"10", kMaxZeroSuggestMatches10, nullptr}, + {"11", kMaxZeroSuggestMatches11, nullptr}, + {"12", kMaxZeroSuggestMatches12, nullptr}, + {"13", kMaxZeroSuggestMatches13, nullptr}, + {"14", kMaxZeroSuggestMatches14, nullptr}, + {"15", kMaxZeroSuggestMatches15, nullptr}}; const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches3[] = { {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "3"}}; @@ -2251,31 +2069,22 @@ const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches12[] = { const FeatureEntry::FeatureVariation kOmniboxUIMaxAutocompleteMatchesVariations[] = { - {"3 matches", kOmniboxUIMaxAutocompleteMatches3, - std::size(kOmniboxUIMaxAutocompleteMatches3), nullptr}, - {"4 matches", kOmniboxUIMaxAutocompleteMatches4, - std::size(kOmniboxUIMaxAutocompleteMatches4), nullptr}, - {"5 matches", kOmniboxUIMaxAutocompleteMatches5, - std::size(kOmniboxUIMaxAutocompleteMatches5), nullptr}, - {"6 matches", kOmniboxUIMaxAutocompleteMatches6, - std::size(kOmniboxUIMaxAutocompleteMatches6), nullptr}, - {"7 matches", kOmniboxUIMaxAutocompleteMatches7, - std::size(kOmniboxUIMaxAutocompleteMatches7), nullptr}, - {"8 matches", kOmniboxUIMaxAutocompleteMatches8, - std::size(kOmniboxUIMaxAutocompleteMatches8), nullptr}, - {"9 matches", kOmniboxUIMaxAutocompleteMatches9, - std::size(kOmniboxUIMaxAutocompleteMatches9), nullptr}, - {"10 matches", kOmniboxUIMaxAutocompleteMatches10, - std::size(kOmniboxUIMaxAutocompleteMatches10), nullptr}, - {"12 matches", kOmniboxUIMaxAutocompleteMatches12, - std::size(kOmniboxUIMaxAutocompleteMatches12), nullptr}}; + {"3 matches", kOmniboxUIMaxAutocompleteMatches3, nullptr}, + {"4 matches", kOmniboxUIMaxAutocompleteMatches4, nullptr}, + {"5 matches", kOmniboxUIMaxAutocompleteMatches5, nullptr}, + {"6 matches", kOmniboxUIMaxAutocompleteMatches6, nullptr}, + {"7 matches", kOmniboxUIMaxAutocompleteMatches7, nullptr}, + {"8 matches", kOmniboxUIMaxAutocompleteMatches8, nullptr}, + {"9 matches", kOmniboxUIMaxAutocompleteMatches9, nullptr}, + {"10 matches", kOmniboxUIMaxAutocompleteMatches10, nullptr}, + {"12 matches", kOmniboxUIMaxAutocompleteMatches12, nullptr}}; #if BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kOmniboxMiaZpsEnabledWithHistoryAblation[] = { {OmniboxFieldTrial::kSuppressPsuggestBackfillWithMIAParam, "true"}}; const FeatureEntry::FeatureVariation kOmniboxMiaZpsVariations[] = { {"with History Ablation", kOmniboxMiaZpsEnabledWithHistoryAblation, - std::size(kOmniboxMiaZpsEnabledWithHistoryAblation), nullptr}}; + nullptr}}; #endif const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete90[] = { @@ -2300,17 +2109,17 @@ const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete102[] = { const FeatureEntry::FeatureVariation kOmniboxDynamicMaxAutocompleteVariations[] = { {"9 suggestions if 0 or fewer URLs", kOmniboxDynamicMaxAutocomplete90, - std::size(kOmniboxDynamicMaxAutocomplete90), nullptr}, + nullptr}, {"9 suggestions if 1 or fewer URLs", kOmniboxDynamicMaxAutocomplete91, - std::size(kOmniboxDynamicMaxAutocomplete91), nullptr}, + nullptr}, {"9 suggestions if 2 or fewer URLs", kOmniboxDynamicMaxAutocomplete92, - std::size(kOmniboxDynamicMaxAutocomplete92), nullptr}, + nullptr}, {"10 suggestions if 0 or fewer URLs", kOmniboxDynamicMaxAutocomplete100, - std::size(kOmniboxDynamicMaxAutocomplete100), nullptr}, + nullptr}, {"10 suggestions if 1 or fewer URLs", kOmniboxDynamicMaxAutocomplete101, - std::size(kOmniboxDynamicMaxAutocomplete101), nullptr}, + nullptr}, {"10 suggestions if 2 or fewer URLs", kOmniboxDynamicMaxAutocomplete102, - std::size(kOmniboxDynamicMaxAutocomplete102), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kRepeatableQueries_6Searches_90Days[] = { {"RepeatableQueriesIgnoreDuplicateVisits", "true"}, @@ -2332,14 +2141,11 @@ const FeatureEntry::FeatureParam kRepeatableQueries_12Searches_7Days[] = { }; const FeatureEntry::FeatureVariation kOrganicRepeatableQueriesVariations[] = { - {"6+ uses, once in last 90d", kRepeatableQueries_6Searches_90Days, - std::size(kRepeatableQueries_6Searches_90Days), nullptr}, + {"6+ uses, once in last 90d", kRepeatableQueries_6Searches_90Days, nullptr}, {"12+ uses, once in last 90d", kRepeatableQueries_12Searches_90Days, - std::size(kRepeatableQueries_12Searches_90Days), nullptr}, - {"6+ uses, once in last 7d", kRepeatableQueries_6Searches_7Days, - std::size(kRepeatableQueries_6Searches_7Days), nullptr}, - {"12+ uses, once in last 7d", kRepeatableQueries_12Searches_7Days, - std::size(kRepeatableQueries_12Searches_7Days), nullptr}, + nullptr}, + {"6+ uses, once in last 7d", kRepeatableQueries_6Searches_7Days, nullptr}, + {"12+ uses, once in last 7d", kRepeatableQueries_12Searches_7Days, nullptr}, }; const FeatureEntry::FeatureParam kNtpZps0RecentSearches[] = { @@ -2351,19 +2157,18 @@ const FeatureEntry::FeatureParam kNtpZps10RecentSearches[] = { const FeatureEntry::FeatureParam kNtpZps15RecentSearches[] = { {OmniboxFieldTrial::kOmniboxNumNtpZpsRecentSearches.name, "15"}}; const FeatureEntry::FeatureVariation kNumNtpZpsRecentSearches[] = { - {"No recents", kNtpZps0RecentSearches, std::size(kNtpZps0RecentSearches)}, - {"5 recents", kNtpZps5RecentSearches, std::size(kNtpZps5RecentSearches)}, - {"10 recents", kNtpZps10RecentSearches, std::size(kNtpZps10RecentSearches)}, - {"15 recents", kNtpZps15RecentSearches, std::size(kNtpZps15RecentSearches)}, + {"No recents", kNtpZps0RecentSearches}, + {"5 recents", kNtpZps5RecentSearches}, + {"10 recents", kNtpZps10RecentSearches}, + {"15 recents", kNtpZps15RecentSearches}, }; const FeatureEntry::FeatureParam kNtpZps0TrendingSearches[] = { {OmniboxFieldTrial::kOmniboxNumNtpZpsTrendingSearches.name, "0"}}; const FeatureEntry::FeatureParam kNtpZps5TrendingSearches[] = { {OmniboxFieldTrial::kOmniboxNumNtpZpsTrendingSearches.name, "5"}}; const FeatureEntry::FeatureVariation kNumNtpZpsTrendingSearches[] = { - {"No trends", kNtpZps0TrendingSearches, - std::size(kNtpZps0TrendingSearches)}, - {"5 trends", kNtpZps5TrendingSearches, std::size(kNtpZps5TrendingSearches)}, + {"No trends", kNtpZps0TrendingSearches}, + {"5 trends", kNtpZps5TrendingSearches}, }; const FeatureEntry::FeatureParam kWebZps0RecentSearches[] = { {OmniboxFieldTrial::kOmniboxNumWebZpsRecentSearches.name, "0"}}; @@ -2374,10 +2179,10 @@ const FeatureEntry::FeatureParam kWebZps10RecentSearches[] = { const FeatureEntry::FeatureParam kWebZps15RecentSearches[] = { {OmniboxFieldTrial::kOmniboxNumWebZpsRecentSearches.name, "15"}}; const FeatureEntry::FeatureVariation kNumWebZpsRecentSearches[] = { - {"No recents", kWebZps0RecentSearches, std::size(kWebZps0RecentSearches)}, - {"5 recents", kWebZps5RecentSearches, std::size(kWebZps5RecentSearches)}, - {"10 recents", kWebZps10RecentSearches, std::size(kWebZps10RecentSearches)}, - {"15 recents", kWebZps15RecentSearches, std::size(kWebZps15RecentSearches)}, + {"No recents", kWebZps0RecentSearches}, + {"5 recents", kWebZps5RecentSearches}, + {"10 recents", kWebZps10RecentSearches}, + {"15 recents", kWebZps15RecentSearches}, }; const FeatureEntry::FeatureParam kWebZps0RelatedSearches[] = { {OmniboxFieldTrial::kOmniboxNumWebZpsRelatedSearches.name, "0"}}; @@ -2388,12 +2193,10 @@ const FeatureEntry::FeatureParam kWebZps10RelatedSearches[] = { const FeatureEntry::FeatureParam kWebZps15RelatedSearches[] = { {OmniboxFieldTrial::kOmniboxNumWebZpsRelatedSearches.name, "15"}}; const FeatureEntry::FeatureVariation kNumWebZpsRelatedSearches[] = { - {"No related", kWebZps0RelatedSearches, std::size(kWebZps0RelatedSearches)}, - {"5 related", kWebZps5RelatedSearches, std::size(kWebZps5RelatedSearches)}, - {"10 related", kWebZps10RelatedSearches, - std::size(kWebZps10RelatedSearches)}, - {"15 related", kWebZps15RelatedSearches, - std::size(kWebZps15RelatedSearches)}, + {"No related", kWebZps0RelatedSearches}, + {"5 related", kWebZps5RelatedSearches}, + {"10 related", kWebZps10RelatedSearches}, + {"15 related", kWebZps15RelatedSearches}, }; const FeatureEntry::FeatureParam kWebZps0MostVisitedUrls[] = { {OmniboxFieldTrial::kOmniboxNumWebZpsMostVisitedUrls.name, "0"}}; @@ -2404,12 +2207,10 @@ const FeatureEntry::FeatureParam kWebZps10MostVisitedUrls[] = { const FeatureEntry::FeatureParam kWebZps15MostVisitedUrls[] = { {OmniboxFieldTrial::kOmniboxNumWebZpsMostVisitedUrls.name, "15"}}; const FeatureEntry::FeatureVariation kNumWebZpsMostVisitedUrls[] = { - {"No related", kWebZps0MostVisitedUrls, std::size(kWebZps0MostVisitedUrls)}, - {"5 related", kWebZps5MostVisitedUrls, std::size(kWebZps5MostVisitedUrls)}, - {"10 related", kWebZps10MostVisitedUrls, - std::size(kWebZps10MostVisitedUrls)}, - {"15 related", kWebZps15MostVisitedUrls, - std::size(kWebZps15MostVisitedUrls)}, + {"No related", kWebZps0MostVisitedUrls}, + {"5 related", kWebZps5MostVisitedUrls}, + {"10 related", kWebZps10MostVisitedUrls}, + {"15 related", kWebZps15MostVisitedUrls}, }; const FeatureEntry::FeatureParam kSrpZps0RecentSearches[] = { {OmniboxFieldTrial::kOmniboxNumSrpZpsRecentSearches.name, "0"}}; @@ -2420,10 +2221,10 @@ const FeatureEntry::FeatureParam kSrpZps10RecentSearches[] = { const FeatureEntry::FeatureParam kSrpZps15RecentSearches[] = { {OmniboxFieldTrial::kOmniboxNumSrpZpsRecentSearches.name, "15"}}; const FeatureEntry::FeatureVariation kNumSrpZpsRecentSearches[] = { - {"No recents", kSrpZps0RecentSearches, std::size(kSrpZps0RecentSearches)}, - {"5 recents", kSrpZps5RecentSearches, std::size(kSrpZps5RecentSearches)}, - {"10 recents", kSrpZps10RecentSearches, std::size(kSrpZps10RecentSearches)}, - {"15 recents", kSrpZps15RecentSearches, std::size(kSrpZps15RecentSearches)}, + {"No recents", kSrpZps0RecentSearches}, + {"5 recents", kSrpZps5RecentSearches}, + {"10 recents", kSrpZps10RecentSearches}, + {"15 recents", kSrpZps15RecentSearches}, }; const FeatureEntry::FeatureParam kSrpZps0RelatedSearches[] = { {OmniboxFieldTrial::kOmniboxNumSrpZpsRelatedSearches.name, "0"}}; @@ -2434,35 +2235,18 @@ const FeatureEntry::FeatureParam kSrpZps10RelatedSearches[] = { const FeatureEntry::FeatureParam kSrpZps15RelatedSearches[] = { {OmniboxFieldTrial::kOmniboxNumSrpZpsRelatedSearches.name, "15"}}; const FeatureEntry::FeatureVariation kNumSrpZpsRelatedSearches[] = { - {"No related", kSrpZps0RelatedSearches, std::size(kSrpZps0RelatedSearches)}, - {"5 related", kSrpZps5RelatedSearches, std::size(kSrpZps5RelatedSearches)}, - {"10 related", kSrpZps10RelatedSearches, - std::size(kSrpZps10RelatedSearches)}, - {"15 related", kSrpZps15RelatedSearches, - std::size(kSrpZps15RelatedSearches)}, + {"No related", kSrpZps0RelatedSearches}, + {"5 related", kSrpZps5RelatedSearches}, + {"10 related", kSrpZps10RelatedSearches}, + {"15 related", kSrpZps15RelatedSearches}, }; #if !BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kTabSearchToolbarButton[] = { - {"tab_search_toolbar_button", "true"}}; +const FeatureEntry::FeatureParam kTabGroupsFocusingPinnedTabs[] = { + {"tab_groups_focusing_pinned_tabs", "true"}}; -const FeatureEntry::FeatureVariation kTabstripComboButtonVariations[] = { - {" - toolbar button", kTabSearchToolbarButton, - std::size(kTabSearchToolbarButton)}, -}; -#endif - -#if !BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kShowSidePanelsOnSameSide[] = { - {"side_panel_relative_alignment", "same"}}; -const FeatureEntry::FeatureParam kShowSidePanelsOnOppositeSide[] = { - {"side_panel_relative_alignment", "opposite"}}; - -const FeatureEntry::FeatureVariation kSidePanelRelativeAlignmentVariants[] = { - {" - show panels on the same side", kShowSidePanelsOnSameSide, - std::size(kShowSidePanelsOnSameSide)}, - {" - show panels on opposite side", kShowSidePanelsOnOppositeSide, - std::size(kShowSidePanelsOnOppositeSide)}, +const FeatureEntry::FeatureVariation kTabGroupsFocusingVariations[] = { + {" - show pinned tabs", kTabGroupsFocusingPinnedTabs}, }; #endif @@ -2470,8 +2254,7 @@ const FeatureEntry::FeatureVariation kSidePanelRelativeAlignmentVariants[] = { const FeatureEntry::FeatureParam kNtpCalendarModuleFakeData[] = { {ntp_features::kNtpCalendarModuleDataParam, "fake"}}; const FeatureEntry::FeatureVariation kNtpCalendarModuleVariations[] = { - {"- Fake Data", kNtpCalendarModuleFakeData, - std::size(kNtpCalendarModuleFakeData), nullptr}, + {"- Fake Data", kNtpCalendarModuleFakeData, nullptr}, }; const FeatureEntry::FeatureParam kNtpDriveModuleFakeData[] = { @@ -2479,10 +2262,8 @@ const FeatureEntry::FeatureParam kNtpDriveModuleFakeData[] = { const FeatureEntry::FeatureParam kNtpDriveModuleManagedUsersOnly[] = { {ntp_features::kNtpDriveModuleManagedUsersOnlyParam, "true"}}; const FeatureEntry::FeatureVariation kNtpDriveModuleVariations[] = { - {"- Fake Data", kNtpDriveModuleFakeData, std::size(kNtpDriveModuleFakeData), - nullptr}, - {"- Managed Users Only", kNtpDriveModuleManagedUsersOnly, - std::size(kNtpDriveModuleManagedUsersOnly), nullptr}, + {"- Fake Data", kNtpDriveModuleFakeData, nullptr}, + {"- Managed Users Only", kNtpDriveModuleManagedUsersOnly, nullptr}, }; const FeatureEntry::FeatureParam kNtpOutlookCalendarModuleFakeData[] = { @@ -2491,18 +2272,16 @@ const FeatureEntry::FeatureParam kNtpOutlookCalendarModuleFakeAttachmentsData[] = { {ntp_features::kNtpOutlookCalendarModuleDataParam, "fake-attachments"}}; const FeatureEntry::FeatureVariation kNtpOutlookCalendarModuleVariations[] = { - {"- Fake Data", kNtpOutlookCalendarModuleFakeData, - std::size(kNtpOutlookCalendarModuleFakeData), nullptr}, + {"- Fake Data", kNtpOutlookCalendarModuleFakeData, nullptr}, {"- Fake Attachments Data", kNtpOutlookCalendarModuleFakeAttachmentsData, - std::size(kNtpOutlookCalendarModuleFakeAttachmentsData), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kNtpMiddleSlotPromoDismissalFakeData[] = { {ntp_features::kNtpMiddleSlotPromoDismissalParam, "fake"}}; const FeatureEntry::FeatureVariation kNtpMiddleSlotPromoDismissalVariations[] = { - {"- Fake Data", kNtpMiddleSlotPromoDismissalFakeData, - std::size(kNtpMiddleSlotPromoDismissalFakeData), nullptr}, + {"- Fake Data", kNtpMiddleSlotPromoDismissalFakeData, nullptr}, }; const FeatureEntry::FeatureParam @@ -2520,26 +2299,20 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kNtpRealboxCr23ThemingVariations[] = { {" - Steady state shadow", - kNtpRealboxCr23ShadowExpandedStateBgMatchesOmnibox, - std::size(kNtpRealboxCr23ShadowExpandedStateBgMatchesOmnibox), nullptr}, + kNtpRealboxCr23ShadowExpandedStateBgMatchesOmnibox, nullptr}, {" - No steady state shadow + Dark mode background color matches steady" "state", - kNtpRealboxCr23NoShadowExpandedStateBgMatchesSteadyState, - std::size(kNtpRealboxCr23NoShadowExpandedStateBgMatchesSteadyState), - nullptr}, + kNtpRealboxCr23NoShadowExpandedStateBgMatchesSteadyState, nullptr}, {" - Steady state shadow + Dark mode background color matches steady " "state", - kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState, - std::size(kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState), - nullptr}, + kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState, nullptr}, }; const FeatureEntry::FeatureParam kNtpSafeBrowsingModuleFastCooldown[] = { {ntp_features::kNtpSafeBrowsingModuleCooldownPeriodDaysParam, "0.001"}, {ntp_features::kNtpSafeBrowsingModuleCountMaxParam, "1"}}; const FeatureEntry::FeatureVariation kNtpSafeBrowsingModuleVariations[] = { - {"(Fast Cooldown)", kNtpSafeBrowsingModuleFastCooldown, - std::size(kNtpSafeBrowsingModuleFastCooldown), nullptr}, + {"(Fast Cooldown)", kNtpSafeBrowsingModuleFastCooldown, nullptr}, }; const FeatureEntry::FeatureParam kNtpSharepointModuleTrendingInsights[] = { @@ -2554,16 +2327,13 @@ const FeatureEntry::FeatureParam kNtpSharepointModuleCombinedSuggestions[] = { {"NtpSharepointModuleDataParam", "combined"}}; const FeatureEntry::FeatureVariation kNtpSharepointModuleVariations[] = { - {"- Trending", kNtpSharepointModuleTrendingInsights, - std::size(kNtpSharepointModuleTrendingInsights), nullptr}, - {"- Recently Used and Shared", kNtpSharepointModuleNonInsights, - std::size(kNtpSharepointModuleNonInsights), nullptr}, - {"- Fake Trending Data", kNtpSharepointModuleTrendingFakeData, - std::size(kNtpSharepointModuleTrendingFakeData), nullptr}, + {"- Trending", kNtpSharepointModuleTrendingInsights, nullptr}, + {"- Recently Used and Shared", kNtpSharepointModuleNonInsights, nullptr}, + {"- Fake Trending Data", kNtpSharepointModuleTrendingFakeData, nullptr}, {"- Fake Recently Used and Shared", kNtpSharepointModuleNonInsightsFakeData, - std::size(kNtpSharepointModuleNonInsightsFakeData), nullptr}, + nullptr}, {"- Combined Suggestions", kNtpSharepointModuleCombinedSuggestions, - std::size(kNtpSharepointModuleCombinedSuggestions), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kNtpTabGroupsModuleFakeData[] = { {ntp_features::kNtpTabGroupsModuleDataParam, "Fake Data"}}; @@ -2571,71 +2341,8 @@ const FeatureEntry::FeatureParam kNtpTabGroupsModuleFakeZeroState[] = { {ntp_features::kNtpTabGroupsModuleDataParam, "Fake Zero State"}}; const FeatureEntry::FeatureVariation kNtpTabGroupsModuleVariations[] = { - {"- Fake Data", kNtpTabGroupsModuleFakeData, - std::size(kNtpTabGroupsModuleFakeData), nullptr}, - {"- Fake Zero State", kNtpTabGroupsModuleFakeZeroState, - std::size(kNtpTabGroupsModuleFakeData), nullptr}, -}; - -const FeatureEntry::FeatureParam kNtpMostRelevantTabResumptionModuleFakeData[] = - {{ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "Fake Data"}}; -const FeatureEntry::FeatureParam - kNtpMostRelevantTabResumptionModuleFakeDataMostRecent[] = { - {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, - "Fake Data - Most Recent Decorator"}}; -const FeatureEntry::FeatureParam - kNtpMostRelevantTabResumptionModuleFakeDataFrequentlyVisitedAtTime[] = { - {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, - "Fake Data - Frequently Visited At Time Decorator"}}; -const FeatureEntry::FeatureParam - kNtpMostRelevantTabResumptionModuleFakeDataJustVisited[] = { - {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, - "Fake Data - Just Visited Decorator"}}; -const FeatureEntry::FeatureParam kNtpMostRelevantTabResumptionModuleTabData[] = - {{ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "1,2"}}; -const FeatureEntry::FeatureParam - kNtpMostRelevantTabResumptionModuleRemoteTabData[] = { - {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "2"}}; -const FeatureEntry::FeatureParam - kNtpMostRelevantTabResumptionModuleRemoteVisitsData[] = { - {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "2,4"}}; -const FeatureEntry::FeatureParam - kNtpMostRelevantTabResumptionModuleAllHistoryRemoteTabData[] = { - {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "2,3,4"}}; -const FeatureEntry::FeatureParam - kNtpMostRelevantTabResumptionModuleVisitData[] = { - {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, - "1,2,3,4"}}; -// Most relevant tab resumption module data params may be expressed as a comma -// separated value consisting of the integer representations of the -// `FetchOptions::URLType` enumeration, to specify what URL types should be -// provided as options to the Visited URL Ranking Service's APIs. -const FeatureEntry::FeatureVariation - kNtpMostRelevantTabResumptionModuleVariations[] = { - {"- Fake Data", kNtpMostRelevantTabResumptionModuleFakeData, - std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, - {"- Fake Data - Most Recent Decorator", - kNtpMostRelevantTabResumptionModuleFakeDataMostRecent, - std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, - {"- Fake Data - Frequently Visited At Time Decorator", - kNtpMostRelevantTabResumptionModuleFakeDataFrequentlyVisitedAtTime, - std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, - {"- Fake Data - Just Visited Decorator", - kNtpMostRelevantTabResumptionModuleFakeDataJustVisited, - std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, - {"- Tabs Only", kNtpMostRelevantTabResumptionModuleTabData, - std::size(kNtpMostRelevantTabResumptionModuleTabData), nullptr}, - {"- Remote Tabs Only", kNtpMostRelevantTabResumptionModuleRemoteTabData, - std::size(kNtpMostRelevantTabResumptionModuleRemoteTabData), nullptr}, - {"- Remote Visits", kNtpMostRelevantTabResumptionModuleRemoteVisitsData, - std::size(kNtpMostRelevantTabResumptionModuleRemoteVisitsData), - nullptr}, - {"- All History, Remote Tabs", - kNtpMostRelevantTabResumptionModuleAllHistoryRemoteTabData, - std::size(kNtpMostRelevantTabResumptionModuleAllHistoryRemoteTabData), - nullptr}, - {"- All Visits", kNtpMostRelevantTabResumptionModuleVisitData, - std::size(kNtpMostRelevantTabResumptionModuleVisitData), nullptr}, + {"- Fake Data", kNtpTabGroupsModuleFakeData, nullptr}, + {"- Fake Zero State", kNtpTabGroupsModuleFakeZeroState, nullptr}, }; #endif // !BUILDFLAG(IS_ANDROID) @@ -2644,10 +2351,8 @@ const FeatureEntry::FeatureParam kDataSharingShowSendFeedbackDisabled[] = { const FeatureEntry::FeatureParam kDataSharingShowSendFeedbackEnabled[] = { {"show_send_feedback", "true"}}; const FeatureEntry::FeatureVariation kDatasharingVariations[] = { - {"with feedback", kDataSharingShowSendFeedbackEnabled, - std::size(kDataSharingShowSendFeedbackEnabled)}, - {"without feedback", kDataSharingShowSendFeedbackDisabled, - std::size(kDataSharingShowSendFeedbackEnabled)}}; + {"with feedback", kDataSharingShowSendFeedbackEnabled}, + {"without feedback", kDataSharingShowSendFeedbackDisabled}}; #if BUILDFLAG(IS_ANDROID) @@ -2661,14 +2366,10 @@ const FeatureEntry::FeatureParam kContextualSearchSuppressShortViewWith600Dp[] = {{"contextual_search_minimum_page_height_dp", "600"}}; const FeatureEntry::FeatureVariation kContextualSearchSuppressShortViewVariations[] = { - {"(300 dp)", kContextualSearchSuppressShortViewWith300Dp, - std::size(kContextualSearchSuppressShortViewWith300Dp), nullptr}, - {"(400 dp)", kContextualSearchSuppressShortViewWith400Dp, - std::size(kContextualSearchSuppressShortViewWith400Dp), nullptr}, - {"(500 dp)", kContextualSearchSuppressShortViewWith500Dp, - std::size(kContextualSearchSuppressShortViewWith500Dp), nullptr}, - {"(600 dp)", kContextualSearchSuppressShortViewWith600Dp, - std::size(kContextualSearchSuppressShortViewWith600Dp), nullptr}, + {"(300 dp)", kContextualSearchSuppressShortViewWith300Dp, nullptr}, + {"(400 dp)", kContextualSearchSuppressShortViewWith400Dp, nullptr}, + {"(500 dp)", kContextualSearchSuppressShortViewWith500Dp, nullptr}, + {"(600 dp)", kContextualSearchSuppressShortViewWith600Dp, nullptr}, }; const FeatureEntry::FeatureParam kUseRunningCompactDelay_default[] = { @@ -2677,10 +2378,8 @@ const FeatureEntry::FeatureParam kUseRunningCompactDelay_immediate[] = { {"running_compact_delay_after_tasks", "2"}}; const FeatureEntry::FeatureVariation kUseRunningCompactDelayOptions[] = { - {"default", kUseRunningCompactDelay_default, - std::size(kUseRunningCompactDelay_default), nullptr}, - {"immediate", kUseRunningCompactDelay_immediate, - std::size(kUseRunningCompactDelay_immediate), nullptr}}; + {"default", kUseRunningCompactDelay_default, nullptr}, + {"immediate", kUseRunningCompactDelay_immediate, nullptr}}; const FeatureEntry::FeatureParam kJumpStartOmnibox1Minute[] = { {"jump_start_min_away_time_minutes", "1"}, @@ -2696,14 +2395,10 @@ const FeatureEntry::FeatureParam kJumpStartOmnibox60Minutes[] = { {"jump_start_cover_recently_visited_page", "true"}}; const FeatureEntry::FeatureVariation kJumpStartOmniboxVariations[] = { - {"(after 1min)", kJumpStartOmnibox1Minute, - std::size(kJumpStartOmnibox1Minute)}, - {"(after 15min)", kJumpStartOmnibox15Minutes, - std::size(kJumpStartOmnibox15Minutes)}, - {"(after 30min)", kJumpStartOmnibox30Minutes, - std::size(kJumpStartOmnibox30Minutes)}, - {"(after 60min)", kJumpStartOmnibox60Minutes, - std::size(kJumpStartOmnibox60Minutes)}}; + {"(after 1min)", kJumpStartOmnibox1Minute}, + {"(after 15min)", kJumpStartOmnibox15Minutes}, + {"(after 30min)", kJumpStartOmnibox30Minutes}, + {"(after 60min)", kJumpStartOmnibox60Minutes}}; #endif // BUILDFLAG(IS_ANDROID) @@ -2713,8 +2408,7 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kReportNotificationContentDetectionDataVariations[] = { {"with reporting rate 100", - kReportNotificationContentDetectionDataRate100, - std::size(kReportNotificationContentDetectionDataRate100), nullptr}, + kReportNotificationContentDetectionDataRate100, nullptr}, }; const FeatureEntry::FeatureParam @@ -2732,13 +2426,10 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kResamplingScrollEventsExperimentalPredictionVariations[] = { {"frames 0.25", kResamplingScrollEventsPredictionFramesBasedEnabledV1, - std::size(kResamplingScrollEventsPredictionFramesBasedEnabledV1), nullptr}, {"frames 0.375", kResamplingScrollEventsPredictionFramesBasedEnabledV2, - std::size(kResamplingScrollEventsPredictionFramesBasedEnabledV2), nullptr}, {"frames 0.5", kResamplingScrollEventsPredictionFramesBasedEnabledV3, - std::size(kResamplingScrollEventsPredictionFramesBasedEnabledV3), nullptr}, }; @@ -2753,13 +2444,9 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kShowWarningsForSuspiciousNotificationsVariations[] = { {"with suspicious score 70", - kShowWarningsForSuspiciousNotificationsScoreThreshold70, - std::size(kShowWarningsForSuspiciousNotificationsScoreThreshold70), - nullptr}, + kShowWarningsForSuspiciousNotificationsScoreThreshold70, nullptr}, {"with suspicious score 70 and swapped buttons", kShowWarningsForSuspiciousNotificationsScoreThreshold70SwapButtons, - std::size( - kShowWarningsForSuspiciousNotificationsScoreThreshold70SwapButtons), nullptr}, }; @@ -2780,24 +2467,18 @@ const FeatureEntry::FeatureParam kStartSurfaceReturnTime_60Minute[] = { {"start_surface_return_time_seconds", "3600"}, {"start_surface_return_time_on_tablet_seconds", "3600"}}; const FeatureEntry::FeatureVariation kStartSurfaceReturnTimeVariations[] = { - {"Immediate", kStartSurfaceReturnTime_Immediate, - std::size(kStartSurfaceReturnTime_Immediate), nullptr}, - {"10 seconds", kStartSurfaceReturnTime_10Seconds, - std::size(kStartSurfaceReturnTime_10Seconds), nullptr}, - {"1 minute", kStartSurfaceReturnTime_1Minute, - std::size(kStartSurfaceReturnTime_1Minute), nullptr}, - {"5 minute", kStartSurfaceReturnTime_5Minute, - std::size(kStartSurfaceReturnTime_5Minute), nullptr}, - {"60 minute", kStartSurfaceReturnTime_60Minute, - std::size(kStartSurfaceReturnTime_60Minute), nullptr}, + {"Immediate", kStartSurfaceReturnTime_Immediate, nullptr}, + {"10 seconds", kStartSurfaceReturnTime_10Seconds, nullptr}, + {"1 minute", kStartSurfaceReturnTime_1Minute, nullptr}, + {"5 minute", kStartSurfaceReturnTime_5Minute, nullptr}, + {"60 minute", kStartSurfaceReturnTime_60Minute, nullptr}, }; const FeatureEntry::FeatureParam kMagicStackAndroid_show_all_modules[] = { {"show_all_modules", "true"}}; const FeatureEntry::FeatureVariation kMagicStackAndroidVariations[] = { - {"Show all modules", kMagicStackAndroid_show_all_modules, - std::size(kMagicStackAndroid_show_all_modules), nullptr}, + {"Show all modules", kMagicStackAndroid_show_all_modules, nullptr}, }; const FeatureEntry::FeatureParam kDefaultBrowserPromoShowArm[] = { @@ -2844,27 +2525,21 @@ const FeatureEntry::FeatureParam kTipsNotificationsPromoHideArm[] = { const FeatureEntry::FeatureVariation kEphemeralCardRankerCardOverrideOptions[] = { {"- Force show default browser promo", kDefaultBrowserPromoShowArm, - std::size(kDefaultBrowserPromoShowArm), nullptr}, + nullptr}, {"- Force hide default browser promo", kDefaultBrowserPromoHideArm, - std::size(kDefaultBrowserPromoHideArm), nullptr}, - {"- Force show tab group promo", kTabGroupPromoShowArm, - std::size(kTabGroupPromoShowArm), nullptr}, - {"- Force hide tab group promo", kTabGroupPromoHideArm, - std::size(kTabGroupPromoHideArm), nullptr}, + nullptr}, + {"- Force show tab group promo", kTabGroupPromoShowArm, nullptr}, + {"- Force hide tab group promo", kTabGroupPromoHideArm, nullptr}, {"- Force show tab group sync promo", kTabGroupSyncPromoShowArm, - std::size(kTabGroupSyncPromoShowArm), nullptr}, + nullptr}, {"- Force hide tab group sync promo", kTabGroupSyncPromoHideArm, - std::size(kTabGroupSyncPromoHideArm), nullptr}, - {"- Force show quick delete promo", kQuickDeletePromoShowArm, - std::size(kQuickDeletePromoShowArm), nullptr}, - {"- Force hide quick delete promo", kQuickDeletePromoHideArm, - std::size(kQuickDeletePromoHideArm), nullptr}, + nullptr}, + {"- Force show quick delete promo", kQuickDeletePromoShowArm, nullptr}, + {"- Force hide quick delete promo", kQuickDeletePromoHideArm, nullptr}, {"- Force show tips notifications promo", - kTipsNotificationsPromoShowArm, - std::size(kTipsNotificationsPromoShowArm), nullptr}, + kTipsNotificationsPromoShowArm, nullptr}, {"- Force hide tips notifications promo", - kTipsNotificationsPromoHideArm, - std::size(kTipsNotificationsPromoHideArm), nullptr}, + kTipsNotificationsPromoHideArm, nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -2872,8 +2547,7 @@ const FeatureEntry::FeatureParam kSearchResumption_use_new_service[] = { {"use_new_service", "true"}}; const FeatureEntry::FeatureVariation kSearchResumptionModuleAndroidVariations[] = { - {"Use New Service", kSearchResumption_use_new_service, - std::size(kSearchResumption_use_new_service), nullptr}, + {"Use New Service", kSearchResumption_use_new_service, nullptr}, }; const FeatureEntry::FeatureParam @@ -2899,11 +2573,11 @@ const FeatureEntry::FeatureParam }; const FeatureEntry::FeatureVariation kMostVisitedTilesReselectVariations[] = { {"Partial match Arm 1", kMostVitedTilesReselect_enable_partial_match_arm1, - std::size(kMostVitedTilesReselect_enable_partial_match_arm1), nullptr}, + nullptr}, {"Partial match Arm 2", kMostVitedTilesReselect_enable_partial_match_arm2, - std::size(kMostVitedTilesReselect_enable_partial_match_arm2), nullptr}, + nullptr}, {"Partial match Arm 3", kMostVitedTilesReselect_enable_partial_match_arm3, - std::size(kMostVitedTilesReselect_enable_partial_match_arm3), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam @@ -2915,9 +2589,7 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kNotificationPermissionRationaleVariations[] = { {"- Show rationale UI on next startup", - kNotificationPermissionRationale_show_dialog_next_start, - std::size(kNotificationPermissionRationale_show_dialog_next_start), - nullptr}, + kNotificationPermissionRationale_show_dialog_next_start, nullptr}, }; const FeatureEntry::FeatureParam kWebFeedAwareness_new_animation[] = { @@ -2929,12 +2601,10 @@ const FeatureEntry::FeatureParam kWebFeedAwareness_IPH[] = { {"awareness_style", "IPH"}}; const FeatureEntry::FeatureVariation kWebFeedAwarenessVariations[] = { - {"new animation", kWebFeedAwareness_new_animation, - std::size(kWebFeedAwareness_new_animation), nullptr}, + {"new animation", kWebFeedAwareness_new_animation, nullptr}, {"new animation rate limit off", kWebFeedAwareness_new_animation_no_limit, - std::size(kWebFeedAwareness_new_animation_no_limit), nullptr}, - {"IPH and dot", kWebFeedAwareness_IPH, std::size(kWebFeedAwareness_IPH), nullptr}, + {"IPH and dot", kWebFeedAwareness_IPH, nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -2963,18 +2633,13 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kPhotoPickerAdoptionStudyFeatureVariations[] = { {"(Android Picker w/ACTION_GET_CONTENT)", - kPhotoPickerAdoptionStudyActionGetContent, - std::size(kPhotoPickerAdoptionStudyActionGetContent), nullptr}, + kPhotoPickerAdoptionStudyActionGetContent, nullptr}, {"(Android Picker w/ACTION_PICK_IMAGES)", - kPhotoPickerAdoptionStudyActionPickImages, - std::size(kPhotoPickerAdoptionStudyActionPickImages), nullptr}, + kPhotoPickerAdoptionStudyActionPickImages, nullptr}, {"(Android Picker w/ACTION_PICK_IMAGES Plus)", - kPhotoPickerAdoptionStudyActionPickImagesPlus, - std::size(kPhotoPickerAdoptionStudyActionPickImagesPlus), nullptr}, + kPhotoPickerAdoptionStudyActionPickImagesPlus, nullptr}, {"(Chrome Picker without Browse)", - kPhotoPickerAdoptionStudyChromePickerWithoutBrowse, - std::size(kPhotoPickerAdoptionStudyChromePickerWithoutBrowse), - nullptr}}; + kPhotoPickerAdoptionStudyChromePickerWithoutBrowse, nullptr}}; const FeatureEntry::FeatureParam kAndroidAppIntegrationModule_ForceCardShown_Pixel[] = { @@ -2987,12 +2652,9 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kAndroidAppIntegrationModuleVariations[] = {{"Force to show Pixel's notice card", - kAndroidAppIntegrationModule_ForceCardShown_Pixel, - std::size(kAndroidAppIntegrationModule_ForceCardShown_Pixel), nullptr}, + kAndroidAppIntegrationModule_ForceCardShown_Pixel, nullptr}, {"Force to show opt in card", - kAndroidAppIntegrationModule_ForceCardShown_NonPixel, - std::size(kAndroidAppIntegrationModule_ForceCardShown_NonPixel), - nullptr}}; + kAndroidAppIntegrationModule_ForceCardShown_NonPixel, nullptr}}; const FeatureEntry::FeatureParam kNewTabPageCustomizationV2_ShowColorPicker[] = {{"show_color_picker", "true"}}; @@ -3006,14 +2668,11 @@ const FeatureEntry::FeatureParam {"show_logo_and_search_box", "true"}}; const FeatureEntry::FeatureVariation kNewTabPageCustomizationV2Variations[] = { - {"Show color picker", kNewTabPageCustomizationV2_ShowColorPicker, - std::size(kNewTabPageCustomizationV2_ShowColorPicker), nullptr}, + {"Show color picker", kNewTabPageCustomizationV2_ShowColorPicker, nullptr}, {"Daily refresh after 20s", - kNewTabPageCustomizationV2_DailyRefreshThresholdMs, - std::size(kNewTabPageCustomizationV2_DailyRefreshThresholdMs), nullptr}, + kNewTabPageCustomizationV2_DailyRefreshThresholdMs, nullptr}, {"Show logo and search box in the preview dialog", - kNewTabPageCustomizationV2_ShowLogoAndSearchBox, - std::size(kNewTabPageCustomizationV2_ShowLogoAndSearchBox), nullptr}}; + kNewTabPageCustomizationV2_ShowLogoAndSearchBox, nullptr}}; const FeatureEntry::FeatureParam kAndroidComposeplate_V2Enabled[] = { {"v2_enabled", "true"}}; @@ -3023,12 +2682,10 @@ const FeatureEntry::FeatureParam kAndroidComposeplate_SkipLocaleCheck[] = { {"skip_locale_check", "true"}}; const FeatureEntry::FeatureVariation kAndroidComposeplateVariations[] = { - {"V2 enabled", kAndroidComposeplate_V2Enabled, - std::size(kAndroidComposeplate_V2Enabled), nullptr}, + {"V2 enabled", kAndroidComposeplate_V2Enabled, nullptr}, {"Hide incognito button", kAndroidComposeplate_HideIncognitoButton, - std::size(kAndroidComposeplate_HideIncognitoButton), nullptr}, - {"Skip locale check", kAndroidComposeplate_SkipLocaleCheck, - std::size(kAndroidComposeplate_SkipLocaleCheck), nullptr}}; + nullptr}, + {"Skip locale check", kAndroidComposeplate_SkipLocaleCheck, nullptr}}; const FeatureEntry::FeatureParam kAndroidAppIntegrationMultiDataSource_SkipDeviceCheck[] = { @@ -3044,17 +2701,11 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kAndroidAppIntegrationMultiDataSourceVariations[] = { {"Skip device check", - kAndroidAppIntegrationMultiDataSource_SkipDeviceCheck, - std::size(kAndroidAppIntegrationMultiDataSource_SkipDeviceCheck), - nullptr}, + kAndroidAppIntegrationMultiDataSource_SkipDeviceCheck, nullptr}, {"Skip schema check", - kAndroidAppIntegrationMultiDataSource_SkipSchemaCheck, - std::size(kAndroidAppIntegrationMultiDataSource_SkipSchemaCheck), - nullptr}, + kAndroidAppIntegrationMultiDataSource_SkipSchemaCheck, nullptr}, {"Skip both device and schema check", kAndroidAppIntegrationMultiDataSource_SkipBothDeviceAndSchemaCheck, - std::size( - kAndroidAppIntegrationMultiDataSource_SkipBothDeviceAndSchemaCheck), nullptr}}; const FeatureEntry::FeatureParam kAuxiliarySearchDonation_MaxDonation_20[] = { @@ -3070,14 +2721,10 @@ const FeatureEntry::FeatureParam kAuxiliarySearchDonation_MaxDonation_500[] = { {chrome::android::kAuxiliarySearchMaxBookmarksCountParam.name, "500"}, {chrome::android::kAuxiliarySearchMaxTabsCountParam.name, "500"}}; const FeatureEntry::FeatureVariation kAuxiliarySearchDonationVariations[] = { - {"50 counts", kAuxiliarySearchDonation_MaxDonation_20, - std::size(kAuxiliarySearchDonation_MaxDonation_20), nullptr}, - {"100 counts", kAuxiliarySearchDonation_MaxDonation_100, - std::size(kAuxiliarySearchDonation_MaxDonation_100), nullptr}, - {"200 counts", kAuxiliarySearchDonation_MaxDonation_200, - std::size(kAuxiliarySearchDonation_MaxDonation_200), nullptr}, - {"500 counts", kAuxiliarySearchDonation_MaxDonation_500, - std::size(kAuxiliarySearchDonation_MaxDonation_500), nullptr}, + {"50 counts", kAuxiliarySearchDonation_MaxDonation_20, nullptr}, + {"100 counts", kAuxiliarySearchDonation_MaxDonation_100, nullptr}, + {"200 counts", kAuxiliarySearchDonation_MaxDonation_200, nullptr}, + {"500 counts", kAuxiliarySearchDonation_MaxDonation_500, nullptr}, }; const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_AA[] = { @@ -3089,12 +2736,9 @@ const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_All[] = { const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_Test[] = { {features::kBoardingPassDetectorUrlParamName, "http"}}; const FeatureEntry::FeatureVariation kBoardingPassDetectorVariations[] = { - {"AA", kBoardingPassDetectorUrl_AA, std::size(kBoardingPassDetectorUrl_AA), - nullptr}, - {"All", kBoardingPassDetectorUrl_All, - std::size(kBoardingPassDetectorUrl_All), nullptr}, - {"Test", kBoardingPassDetectorUrl_Test, - std::size(kBoardingPassDetectorUrl_Test), nullptr}, + {"AA", kBoardingPassDetectorUrl_AA, nullptr}, + {"All", kBoardingPassDetectorUrl_All, nullptr}, + {"Test", kBoardingPassDetectorUrl_Test, nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -3103,16 +2747,19 @@ const FeatureEntry::FeatureVariation kBoardingPassDetectorVariations[] = { const FeatureEntry::FeatureParam kShowNewTabAnimationsLogs[] = { {"logs", "true"}}; const FeatureEntry::FeatureVariation kShowNewTabAnimationsVariations[] = { - {"- Add logs", kShowNewTabAnimationsLogs, - std::size(kShowNewTabAnimationsLogs), nullptr}}; + {"- Add logs", kShowNewTabAnimationsLogs, nullptr}}; const FeatureEntry::FeatureParam kTabStorageSqlitePrototypeAuthoritativeReads[] = { {"authoritative_read_source", "true"}}; +const FeatureEntry::FeatureParam kTabStorageSqlitePrototypeFullMigration[] = { + {"authoritative_read_source", "true"}, + {"allow_full_migration", "true"}}; + const FeatureEntry::FeatureVariation kTabStorageSqlitePrototypeVariations[] = { {"- Authoritative Read Source", - kTabStorageSqlitePrototypeAuthoritativeReads, - std::size(kTabStorageSqlitePrototypeAuthoritativeReads), nullptr}}; + kTabStorageSqlitePrototypeAuthoritativeReads, nullptr}, + {"- Full Migration", kTabStorageSqlitePrototypeFullMigration, nullptr}}; #endif // BUILDFLAG(IS_ANDROID) @@ -3124,10 +2771,10 @@ const FeatureEntry::FeatureParam kRenderDocument_AllFrames[] = { const FeatureEntry::FeatureVariation kRenderDocumentVariations[] = { {"Swap RenderFrameHosts on same-site navigations from subframes and " "crashed frames (experimental)", - kRenderDocument_Subframe, std::size(kRenderDocument_Subframe), nullptr}, + kRenderDocument_Subframe, nullptr}, {"Swap RenderFrameHosts on same-site navigations from any frame " "(experimental)", - kRenderDocument_AllFrames, std::size(kRenderDocument_AllFrames), nullptr}, + kRenderDocument_AllFrames, nullptr}, }; #if BUILDFLAG(IS_ANDROID) @@ -3192,12 +2839,9 @@ const FeatureEntry::FeatureParam kSCTAuditingSamplingRateAlternativeTwo[] = { {"sampling_rate", "0.001"}}; const FeatureEntry::FeatureVariation kSCTAuditingVariations[] = { - {"Sampling rate 0%", kSCTAuditingSamplingRateNone, - std::size(kSCTAuditingSamplingRateNone), nullptr}, - {"Sampling rate 0.01%", kSCTAuditingSamplingRateAlternativeOne, - std::size(kSCTAuditingSamplingRateAlternativeOne), nullptr}, - {"Sampling rate 0.1%", kSCTAuditingSamplingRateAlternativeTwo, - std::size(kSCTAuditingSamplingRateAlternativeTwo), nullptr}, + {"Sampling rate 0%", kSCTAuditingSamplingRateNone, nullptr}, + {"Sampling rate 0.01%", kSCTAuditingSamplingRateAlternativeOne, nullptr}, + {"Sampling rate 0.1%", kSCTAuditingSamplingRateAlternativeTwo, nullptr}, }; #endif // !BUILDFLAG(IS_ANDROID) @@ -3219,19 +2863,14 @@ const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay72Hours[] = { const FeatureEntry::FeatureVariation kLauncherItemSuggestVariations[] = { {"with 10 minute long delay", kLauncherItemSuggest_LongDelay10Mins, - std::size(kLauncherItemSuggest_LongDelay10Mins), nullptr}, - {"with 12 hour long delay", kLauncherItemSuggest_LongDelay12Hours, - std::size(kLauncherItemSuggest_LongDelay12Hours), nullptr}, - {"with 24 hour long delay", kLauncherItemSuggest_LongDelay24Hours, - std::size(kLauncherItemSuggest_LongDelay24Hours), nullptr}, - {"with 36 hour long delay", kLauncherItemSuggest_LongDelay36Hours, - std::size(kLauncherItemSuggest_LongDelay36Hours), nullptr}, - {"with 48 hour long delay", kLauncherItemSuggest_LongDelay48Hours, - std::size(kLauncherItemSuggest_LongDelay48Hours), nullptr}, - {"with 60 hour long delay", kLauncherItemSuggest_LongDelay60Hours, - std::size(kLauncherItemSuggest_LongDelay60Hours), nullptr}, + nullptr}, + {"with 12 hour long delay", kLauncherItemSuggest_LongDelay12Hours, nullptr}, + {"with 24 hour long delay", kLauncherItemSuggest_LongDelay24Hours, nullptr}, + {"with 36 hour long delay", kLauncherItemSuggest_LongDelay36Hours, nullptr}, + {"with 48 hour long delay", kLauncherItemSuggest_LongDelay48Hours, nullptr}, + {"with 60 hour long delay", kLauncherItemSuggest_LongDelay60Hours, nullptr}, {"with 72 hour long delay", kLauncherItemSuggest_LongDelay72Hours, - std::size(kLauncherItemSuggest_LongDelay72Hours), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_10[] = { {"confidence_threshold", "10"}}; @@ -3260,30 +2899,18 @@ const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_120[] = { const FeatureEntry::FeatureVariation kLauncherLocalImageSearchConfidenceVariations[] = { - {"threshold 10", kLauncherLocalImageSearchConfidence_10, - std::size(kLauncherLocalImageSearchConfidence_10), nullptr}, - {"threshold 20", kLauncherLocalImageSearchConfidence_20, - std::size(kLauncherLocalImageSearchConfidence_20), nullptr}, - {"threshold 30", kLauncherLocalImageSearchConfidence_30, - std::size(kLauncherLocalImageSearchConfidence_30), nullptr}, - {"threshold 40", kLauncherLocalImageSearchConfidence_40, - std::size(kLauncherLocalImageSearchConfidence_40), nullptr}, - {"threshold 50", kLauncherLocalImageSearchConfidence_50, - std::size(kLauncherLocalImageSearchConfidence_50), nullptr}, - {"threshold 60", kLauncherLocalImageSearchConfidence_60, - std::size(kLauncherLocalImageSearchConfidence_60), nullptr}, - {"threshold 70", kLauncherLocalImageSearchConfidence_70, - std::size(kLauncherLocalImageSearchConfidence_70), nullptr}, - {"threshold 80", kLauncherLocalImageSearchConfidence_80, - std::size(kLauncherLocalImageSearchConfidence_80), nullptr}, - {"threshold 90", kLauncherLocalImageSearchConfidence_90, - std::size(kLauncherLocalImageSearchConfidence_90), nullptr}, - {"threshold 100", kLauncherLocalImageSearchConfidence_100, - std::size(kLauncherLocalImageSearchConfidence_100), nullptr}, - {"threshold 110", kLauncherLocalImageSearchConfidence_110, - std::size(kLauncherLocalImageSearchConfidence_110), nullptr}, - {"threshold 120", kLauncherLocalImageSearchConfidence_120, - std::size(kLauncherLocalImageSearchConfidence_120), nullptr}}; + {"threshold 10", kLauncherLocalImageSearchConfidence_10, nullptr}, + {"threshold 20", kLauncherLocalImageSearchConfidence_20, nullptr}, + {"threshold 30", kLauncherLocalImageSearchConfidence_30, nullptr}, + {"threshold 40", kLauncherLocalImageSearchConfidence_40, nullptr}, + {"threshold 50", kLauncherLocalImageSearchConfidence_50, nullptr}, + {"threshold 60", kLauncherLocalImageSearchConfidence_60, nullptr}, + {"threshold 70", kLauncherLocalImageSearchConfidence_70, nullptr}, + {"threshold 80", kLauncherLocalImageSearchConfidence_80, nullptr}, + {"threshold 90", kLauncherLocalImageSearchConfidence_90, nullptr}, + {"threshold 100", kLauncherLocalImageSearchConfidence_100, nullptr}, + {"threshold 110", kLauncherLocalImageSearchConfidence_110, nullptr}, + {"threshold 120", kLauncherLocalImageSearchConfidence_120, nullptr}}; const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_10[] = { {"relevance_threshold", "0.1"}}; @@ -3306,24 +2933,15 @@ const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_90[] = { const FeatureEntry::FeatureVariation kLauncherLocalImageSearchRelevanceVariations[] = { - {"threshold 0.1", kLauncherLocalImageSearchRelevance_10, - std::size(kLauncherLocalImageSearchRelevance_10), nullptr}, - {"threshold 0.2", kLauncherLocalImageSearchRelevance_20, - std::size(kLauncherLocalImageSearchRelevance_20), nullptr}, - {"threshold 0.3", kLauncherLocalImageSearchRelevance_30, - std::size(kLauncherLocalImageSearchRelevance_30), nullptr}, - {"threshold 0.4", kLauncherLocalImageSearchRelevance_40, - std::size(kLauncherLocalImageSearchRelevance_40), nullptr}, - {"threshold 0.5", kLauncherLocalImageSearchRelevance_50, - std::size(kLauncherLocalImageSearchRelevance_50), nullptr}, - {"threshold 0.6", kLauncherLocalImageSearchRelevance_60, - std::size(kLauncherLocalImageSearchRelevance_60), nullptr}, - {"threshold 0.7", kLauncherLocalImageSearchRelevance_70, - std::size(kLauncherLocalImageSearchRelevance_70), nullptr}, - {"threshold 0.8", kLauncherLocalImageSearchRelevance_80, - std::size(kLauncherLocalImageSearchRelevance_80), nullptr}, - {"threshold 0.9", kLauncherLocalImageSearchRelevance_90, - std::size(kLauncherLocalImageSearchRelevance_90), nullptr}}; + {"threshold 0.1", kLauncherLocalImageSearchRelevance_10, nullptr}, + {"threshold 0.2", kLauncherLocalImageSearchRelevance_20, nullptr}, + {"threshold 0.3", kLauncherLocalImageSearchRelevance_30, nullptr}, + {"threshold 0.4", kLauncherLocalImageSearchRelevance_40, nullptr}, + {"threshold 0.5", kLauncherLocalImageSearchRelevance_50, nullptr}, + {"threshold 0.6", kLauncherLocalImageSearchRelevance_60, nullptr}, + {"threshold 0.7", kLauncherLocalImageSearchRelevance_70, nullptr}, + {"threshold 0.8", kLauncherLocalImageSearchRelevance_80, nullptr}, + {"threshold 0.9", kLauncherLocalImageSearchRelevance_90, nullptr}}; const FeatureEntry::FeatureParam kCampbell9dot[] = {{"icon", "9dot"}}; const FeatureEntry::FeatureParam kCampbellHero[] = {{"icon", "hero"}}; @@ -3331,10 +2949,10 @@ const FeatureEntry::FeatureParam kCampbellAction[] = {{"icon", "action"}}; const FeatureEntry::FeatureParam kCampbellText[] = {{"icon", "text"}}; const FeatureEntry::FeatureVariation kCampbellGlyphVariations[] = { - {"9dot", kCampbell9dot, std::size(kCampbell9dot), nullptr}, - {"hero", kCampbellHero, std::size(kCampbellHero), nullptr}, - {"action", kCampbellAction, std::size(kCampbellAction), nullptr}, - {"text", kCampbellText, std::size(kCampbellText), nullptr}}; + {"9dot", kCampbell9dot, nullptr}, + {"hero", kCampbellHero, nullptr}, + {"action", kCampbellAction, nullptr}, + {"text", kCampbellText, nullptr}}; const FeatureEntry::FeatureParam kCaptureModeEducationShortcutNudge[] = { {"CaptureModeEducationParam", "ShortcutNudge"}}; @@ -3344,12 +2962,9 @@ const FeatureEntry::FeatureParam kCaptureModeEducationQuickSettingsNudge[] = { {"CaptureModeEducationParam", "QuickSettingsNudge"}}; const FeatureEntry::FeatureVariation kCaptureModeEducationVariations[] = { - {"Shortcut Nudge", kCaptureModeEducationShortcutNudge, - std::size(kCaptureModeEducationShortcutNudge), nullptr}, - {"Shortcut Tutorial", kCaptureModeEducationShortcutTutorial, - std::size(kCaptureModeEducationShortcutTutorial), nullptr}, - {"Quick Settings Nudge", kCaptureModeEducationQuickSettingsNudge, - std::size(kCaptureModeEducationQuickSettingsNudge), nullptr}}; + {"Shortcut Nudge", kCaptureModeEducationShortcutNudge, nullptr}, + {"Shortcut Tutorial", kCaptureModeEducationShortcutTutorial, nullptr}, + {"Quick Settings Nudge", kCaptureModeEducationQuickSettingsNudge, nullptr}}; const FeatureEntry::FeatureParam kSystemShortcutBehaviorIgnoreCommonVdiShortcuts[] = { @@ -3366,20 +2981,13 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kSystemShortcutBehaviorVariations[] = { {"Ignore Common VDI Shortcuts", - kSystemShortcutBehaviorIgnoreCommonVdiShortcuts, - std::size(kSystemShortcutBehaviorIgnoreCommonVdiShortcuts), nullptr}, + kSystemShortcutBehaviorIgnoreCommonVdiShortcuts, nullptr}, {"Ignore Common VDI Shortcuts while Fullscreen", - kSystemShortcutBehaviorIgnoreCommonVdiShortcutsFullscreenOnly, - std::size(kSystemShortcutBehaviorIgnoreCommonVdiShortcutsFullscreenOnly), - nullptr}, + kSystemShortcutBehaviorIgnoreCommonVdiShortcutsFullscreenOnly, nullptr}, {"Allow Search Based Passthrough", - kSystemShortcutBehaviorAllowSearchBasedPassthrough, - std::size(kSystemShortcutBehaviorAllowSearchBasedPassthrough), nullptr}, + kSystemShortcutBehaviorAllowSearchBasedPassthrough, nullptr}, {"Allow Search Based Passthrough while Fullscreen", - kSystemShortcutBehaviorAllowSearchBasedPassthroughFullscreenOnly, - std::size( - kSystemShortcutBehaviorAllowSearchBasedPassthroughFullscreenOnly), - nullptr}, + kSystemShortcutBehaviorAllowSearchBasedPassthroughFullscreenOnly, nullptr}, }; #endif // BUILDFLAG(IS_CHROMEOS) @@ -3432,14 +3040,11 @@ const FeatureEntry::FeatureParam kLensOverlayPersistentOmniboxEntryPoint[] = { }; const FeatureEntry::FeatureVariation kLensOverlayVariations[] = { - {"with no omnibox entry point", kLensOverlayNoOmniboxEntryPoint, - std::size(kLensOverlayNoOmniboxEntryPoint), nullptr}, + {"with no omnibox entry point", kLensOverlayNoOmniboxEntryPoint, nullptr}, {"with responsive chip omnibox entry point", - kLensOverlayResponsiveOmniboxEntryPoint, - std::size(kLensOverlayResponsiveOmniboxEntryPoint), nullptr}, + kLensOverlayResponsiveOmniboxEntryPoint, nullptr}, {"with persistent icon omnibox entry point", - kLensOverlayPersistentOmniboxEntryPoint, - std::size(kLensOverlayPersistentOmniboxEntryPoint), nullptr}, + kLensOverlayPersistentOmniboxEntryPoint, nullptr}, }; #endif // !BUILDFLAG(IS_ANDROID) @@ -3462,28 +3067,24 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kLensOverlayImageContextMenuActionsVariations[] = { - {"copy as image", kLensOverlayImageContextMenuActionsCopy, - std::size(kLensOverlayImageContextMenuActionsCopy), nullptr}, - {"save as image", kLensOverlayImageContextMenuActionsSave, - std::size(kLensOverlayImageContextMenuActionsSave), nullptr}, + {"copy as image", kLensOverlayImageContextMenuActionsCopy, nullptr}, + {"save as image", kLensOverlayImageContextMenuActionsSave, nullptr}, {"copy and save as image", - kLensOverlayImageContextMenuActionsCopyAndSave, - std::size(kLensOverlayImageContextMenuActionsCopyAndSave), nullptr}, + kLensOverlayImageContextMenuActionsCopyAndSave, nullptr}, }; const FeatureEntry::FeatureParam - kLensOverlayTextSelectionContextMenuEntrypointContextualized{ - "contextualize", "true"}; + kLensOverlayTextSelectionContextMenuEntrypointContextualized[] = { + {"contextualize", "true"}}; const FeatureEntry::FeatureParam - kLensOverlayTextSelectionContextMenuEntrypointNonContextualized{ - "contextualize", "false"}; + kLensOverlayTextSelectionContextMenuEntrypointNonContextualized[] = { + {"contextualize", "false"}}; const FeatureEntry::FeatureVariation kLensOverlayTextSelectionContextMenuEntrypointVariations[] = { {"contextualized", - &kLensOverlayTextSelectionContextMenuEntrypointContextualized, 1, - nullptr}, + kLensOverlayTextSelectionContextMenuEntrypointContextualized, nullptr}, {"non-contextualized", - &kLensOverlayTextSelectionContextMenuEntrypointNonContextualized, 1, + kLensOverlayTextSelectionContextMenuEntrypointNonContextualized, nullptr}, }; #endif // !BUILDFLAG(IS_ANDROID) @@ -3513,20 +3114,20 @@ const FeatureEntry::Choice kPrintingPpdChannelChoices[] = { #endif // BUILDFLAG(IS_CHROMEOS) // Feature variations for kIsolateSandboxedIframes. -const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerSite{ - "grouping", "per-site"}; -const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerOrigin{ - "grouping", "per-origin"}; -const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerDocument{ - "grouping", "per-document"}; +const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerSite[] = { + {"grouping", "per-site"}}; +const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerOrigin[] = { + {"grouping", "per-origin"}}; +const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerDocument[] = + {{"grouping", "per-document"}}; const FeatureEntry::FeatureVariation kIsolateSandboxedIframesGroupingVariations[] = { - {"with grouping by URL's site", - &kIsolateSandboxedIframesGroupingPerSite, 1, nullptr}, + {"with grouping by URL's site", kIsolateSandboxedIframesGroupingPerSite, + nullptr}, {"with grouping by URL's origin", - &kIsolateSandboxedIframesGroupingPerOrigin, 1, nullptr}, + kIsolateSandboxedIframesGroupingPerOrigin, nullptr}, {"with each sandboxed frame document in its own process", - &kIsolateSandboxedIframesGroupingPerDocument, 1, nullptr}, + kIsolateSandboxedIframesGroupingPerDocument, nullptr}, }; // Feature variation for kPdfInk2. @@ -3545,13 +3146,10 @@ const FeatureEntry::FeatureParam kPdfInk2TextHighlightingAndAnnotations[] = { }; const FeatureEntry::FeatureVariation kPdfInk2Variations[] = { - {"with text highlighting", kPdfInk2TextHighlighting, - std::size(kPdfInk2TextHighlighting), nullptr}, - {"with text annotations", kPdfInk2TextAnnotations, - std::size(kPdfInk2TextAnnotations), nullptr}, + {"with text highlighting", kPdfInk2TextHighlighting, nullptr}, + {"with text annotations", kPdfInk2TextAnnotations, nullptr}, {"with text highlighting and annotations", - kPdfInk2TextHighlightingAndAnnotations, - std::size(kPdfInk2TextHighlightingAndAnnotations), nullptr}, + kPdfInk2TextHighlightingAndAnnotations, nullptr}, }; #endif // BUILDFLAG(ENABLE_PDF_INK2) @@ -3561,9 +3159,8 @@ const FeatureEntry::FeatureParam kWebRtcApmDownmixMethodFirstChannel[] = { {"method", "first"}}; const FeatureEntry::FeatureVariation kWebRtcApmDownmixMethodVariations[] = { {"- Average all the input channels", kWebRtcApmDownmixMethodAverage, - std::size(kWebRtcApmDownmixMethodAverage), nullptr}, - {"- Use first channel", kWebRtcApmDownmixMethodFirstChannel, - std::size(kWebRtcApmDownmixMethodFirstChannel), nullptr}}; + nullptr}, + {"- Use first channel", kWebRtcApmDownmixMethodFirstChannel, nullptr}}; const FeatureEntry::FeatureParam kSafetyCheckUnusedSitePermissionsNoDelayParam[] = { @@ -3576,10 +3173,9 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kSafetyCheckUnusedSitePermissionsVariations[] = { {"for testing no delay", kSafetyCheckUnusedSitePermissionsNoDelayParam, - std::size(kSafetyCheckUnusedSitePermissionsNoDelayParam), nullptr}, + nullptr}, {"for testing with delay", - kSafetyCheckUnusedSitePermissionsWithDelayParam, - std::size(kSafetyCheckUnusedSitePermissionsWithDelayParam), nullptr}, + kSafetyCheckUnusedSitePermissionsWithDelayParam, nullptr}, }; const FeatureEntry::FeatureParam @@ -3652,23 +3248,15 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kTpcdHeuristicsGrantsVariations[] = { {"CurrentInteraction_ShortRedirect_MainFrameInitiator", kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_MainFrameInitiator, - std::size( - kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_MainFrameInitiator), nullptr}, {"CurrentInteraction_LongRedirect_MainFrameInitiator", kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_MainFrameInitiator, - std::size( - kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_MainFrameInitiator), nullptr}, {"CurrentInteraction_ShortRedirect_AllFrameInitiator", kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_AllFrameInitiator, - std::size( - kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_AllFrameInitiator), nullptr}, {"CurrentInteraction_LongRedirect_AllFrameInitiator", kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_AllFrameInitiator, - std::size( - kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_AllFrameInitiator), nullptr}}; #if BUILDFLAG(IS_CHROMEOS) @@ -3685,28 +3273,20 @@ const FeatureEntry::FeatureParam kVcInferenceBackendNpu[] = { }; const FeatureEntry::FeatureVariation kVcRelightingInferenceBackendVariations[] = - {{"AUTO", kVcInferenceBackendAuto, std::size(kVcInferenceBackendAuto), - nullptr}, - {"GPU", kVcInferenceBackendGpu, std::size(kVcInferenceBackendGpu), - nullptr}, - {"NPU", kVcInferenceBackendNpu, std::size(kVcInferenceBackendNpu), - nullptr}}; + {{"AUTO", kVcInferenceBackendAuto, nullptr}, + {"GPU", kVcInferenceBackendGpu, nullptr}, + {"NPU", kVcInferenceBackendNpu, nullptr}}; const FeatureEntry::FeatureVariation kVcRetouchInferenceBackendVariations[] = { - {"AUTO", kVcInferenceBackendAuto, std::size(kVcInferenceBackendAuto), - nullptr}, - {"GPU", kVcInferenceBackendGpu, std::size(kVcInferenceBackendGpu), nullptr}, - {"NPU", kVcInferenceBackendNpu, std::size(kVcInferenceBackendNpu), - nullptr}}; + {"AUTO", kVcInferenceBackendAuto, nullptr}, + {"GPU", kVcInferenceBackendGpu, nullptr}, + {"NPU", kVcInferenceBackendNpu, nullptr}}; const FeatureEntry::FeatureVariation kVcSegmentationInferenceBackendVariations[] = { - {"AUTO", kVcInferenceBackendAuto, std::size(kVcInferenceBackendAuto), - nullptr}, - {"GPU", kVcInferenceBackendGpu, std::size(kVcInferenceBackendGpu), - nullptr}, - {"NPU", kVcInferenceBackendNpu, std::size(kVcInferenceBackendNpu), - nullptr}}; + {"AUTO", kVcInferenceBackendAuto, nullptr}, + {"GPU", kVcInferenceBackendGpu, nullptr}, + {"NPU", kVcInferenceBackendNpu, nullptr}}; const FeatureEntry::FeatureParam kVcSegmentationModelHighResolution[] = { {"segmentation_model", "high_resolution"}, @@ -3717,10 +3297,8 @@ const FeatureEntry::FeatureParam kVcSegmentationModelLowerResolution[] = { }; const FeatureEntry::FeatureVariation kVcSegmentationModelVariations[] = { - {"High resolution model", kVcSegmentationModelHighResolution, - std::size(kVcSegmentationModelHighResolution), nullptr}, - {"Lower resolution model", kVcSegmentationModelLowerResolution, - std::size(kVcSegmentationModelLowerResolution), nullptr}, + {"High resolution model", kVcSegmentationModelHighResolution, nullptr}, + {"Lower resolution model", kVcSegmentationModelLowerResolution, nullptr}, }; const FeatureEntry::FeatureParam kVcLightIntensity10[] = { @@ -3748,12 +3326,12 @@ const FeatureEntry::FeatureParam kVcLightIntensity20[] = { }; const FeatureEntry::FeatureVariation kVcLightIntensityVariations[] = { - {"1.0", kVcLightIntensity10, std::size(kVcLightIntensity10), nullptr}, - {"1.3", kVcLightIntensity13, std::size(kVcLightIntensity13), nullptr}, - {"1.5", kVcLightIntensity15, std::size(kVcLightIntensity15), nullptr}, - {"1.7", kVcLightIntensity17, std::size(kVcLightIntensity17), nullptr}, - {"1.8", kVcLightIntensity18, std::size(kVcLightIntensity18), nullptr}, - {"2.0", kVcLightIntensity20, std::size(kVcLightIntensity20), nullptr}, + {"1.0", kVcLightIntensity10, nullptr}, + {"1.3", kVcLightIntensity13, nullptr}, + {"1.5", kVcLightIntensity15, nullptr}, + {"1.7", kVcLightIntensity17, nullptr}, + {"1.8", kVcLightIntensity18, nullptr}, + {"2.0", kVcLightIntensity20, nullptr}, }; const FeatureEntry::FeatureParam @@ -3784,21 +3362,17 @@ const FeatureEntry::FeatureParam kCrOSLateBootMissiveSecurityLegacyStorage[] = { const FeatureEntry::FeatureVariation kCrOSLateBootMissiveStorageDefaultVariations[] = { {"Enable storage degradation", - kCrOSLateBootMissiveEnableStorageDegradation, - std::size(kCrOSLateBootMissiveEnableStorageDegradation), nullptr}, + kCrOSLateBootMissiveEnableStorageDegradation, nullptr}, {"Disable storage degradation", - kCrOSLateBootMissiveDisableStorageDegradation, - std::size(kCrOSLateBootMissiveDisableStorageDegradation), nullptr}, + kCrOSLateBootMissiveDisableStorageDegradation, nullptr}, {"Enable all queues legacy", kCrOSLateBootMissiveEnableLegacyStorage, - std::size(kCrOSLateBootMissiveEnableLegacyStorage), nullptr}, + nullptr}, {"Disable all queues legacy", kCrOSLateBootMissiveDisableLegacyStorage, - std::size(kCrOSLateBootMissiveDisableLegacyStorage), nullptr}, + nullptr}, {"Enable SECURITY and IMMEDIATE queues legacy only", - kCrOSLateBootMissivePartialLegacyStorage, - std::size(kCrOSLateBootMissivePartialLegacyStorage), nullptr}, + kCrOSLateBootMissivePartialLegacyStorage, nullptr}, {"Enable SECURITY queues legacy only", - kCrOSLateBootMissiveSecurityLegacyStorage, - std::size(kCrOSLateBootMissiveSecurityLegacyStorage), nullptr}, + kCrOSLateBootMissiveSecurityLegacyStorage, nullptr}, }; #endif // BUILDFLAG(IS_CHROMEOS) @@ -3821,26 +3395,17 @@ const FeatureEntry::Choice kCastMirroringTargetPlayoutDelayChoices[] = { #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kEdgeToEdgeTabletFeatureParams[] = { - {"e2e_tablet_invisible_bottom_chin_min_width", "768"}}; -const FeatureEntry::FeatureVariation kEdgeToEdgeTabletVariations[] = { - {"chin on smaller screens", kEdgeToEdgeTabletFeatureParams, - std::size(kEdgeToEdgeTabletFeatureParams), nullptr}, -}; - const FeatureEntry::FeatureParam sAndroidThemeModuleParams[] = { {"force_theme_module_dependencies", "true"}}; const FeatureEntry::FeatureVariation kAndroidThemeModuleVariations[] = { - {"force dependencies", sAndroidThemeModuleParams, - std::size(sAndroidThemeModuleParams), nullptr}, + {"force dependencies", sAndroidThemeModuleParams, nullptr}, }; const FeatureEntry::FeatureParam sAndroidThemeResourceProviderParams[] = { {"force_light_theme", "true"}}; const FeatureEntry::FeatureVariation kAndroidThemeResourceProviderVariations[] = { - {"force light theme", sAndroidThemeResourceProviderParams, - std::size(sAndroidThemeResourceProviderParams), nullptr}, + {"force light theme", sAndroidThemeResourceProviderParams, nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -3862,17 +3427,13 @@ const flags_ui::FeatureEntry::FeatureParam {"link_capturing_state", "reimpl_on_via_client_mode"}}; const flags_ui::FeatureEntry::FeatureVariation kPwaNavigationCapturingVariations[] = { - {"V1, On by default", kPwaNavigationCapturingDefaultOn, - std::size(kPwaNavigationCapturingDefaultOn), nullptr}, - {"V1, Off by default", kPwaNavigationCapturingDefaultOff, - std::size(kPwaNavigationCapturingDefaultOff), nullptr}, - {"V2, On by default", kPwaNavigationCapturingReimplDefaultOn, - std::size(kPwaNavigationCapturingReimplDefaultOn), nullptr}, + {"V1, On by default", kPwaNavigationCapturingDefaultOn, nullptr}, + {"V1, Off by default", kPwaNavigationCapturingDefaultOff, nullptr}, + {"V2, On by default", kPwaNavigationCapturingReimplDefaultOn, nullptr}, {"V2, Off by default", kPwaNavigationCapturingReimplDefaultOff, - std::size(kPwaNavigationCapturingReimplDefaultOff), nullptr}, + nullptr}, {"V2, On by app client_mode", - kPwaNavigationCapturingReimplOnViaClientMode, - std::size(kPwaNavigationCapturingReimplOnViaClientMode), nullptr}}; + kPwaNavigationCapturingReimplOnViaClientMode, nullptr}}; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || // BUILDFLAG(IS_CHROMEOS) @@ -3881,9 +3442,17 @@ const FeatureEntry::Choice kReplaceSyncPromosWithSignInPromosChoices[] = { {"Default", "", ""}, {"Disabled", switches::kDisableFeatures, "ReplaceSyncPromosWithSignInPromos"}, - {"Enabled", switches::kEnableFeatures, "ReplaceSyncPromosWithSignInPromos"}, + {"Enabled", switches::kEnableFeatures, + "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/false"}, {"Enabled with follow-ups", switches::kEnableFeatures, - "ReplaceSyncPromosWithSignInPromos,UnoPhase2FollowUp"}, + "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/" + "false,UnoPhase2FollowUp"}, + {"Enabled with explicit signin for extensions", switches::kEnableFeatures, + "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/true"}, + {"Enabled with explicit signin for extensions and follow-ups", + switches::kEnableFeatures, + "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/true," + "UnoPhase2FollowUp"}, }; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) @@ -3896,12 +3465,9 @@ const FeatureEntry::FeatureParam kLinkPreviewTriggerTypeLongPress[] = { {"trigger_type", "long_press"}}; const FeatureEntry::FeatureVariation kLinkPreviewTriggerTypeVariations[] = { - {"Alt + Click", kLinkPreviewTriggerTypeAltClick, - std::size(kLinkPreviewTriggerTypeAltClick), nullptr}, - {"Alt + Hover", kLinkPreviewTriggerTypeAltHover, - std::size(kLinkPreviewTriggerTypeAltHover), nullptr}, - {"Long Press", kLinkPreviewTriggerTypeLongPress, - std::size(kLinkPreviewTriggerTypeLongPress), nullptr}}; + {"Alt + Click", kLinkPreviewTriggerTypeAltClick, nullptr}, + {"Alt + Hover", kLinkPreviewTriggerTypeAltHover, nullptr}, + {"Long Press", kLinkPreviewTriggerTypeLongPress, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -3938,16 +3504,11 @@ const FeatureEntry::FeatureParam kGroupSuggestionEnableTabSwitcherOnly[] = { {"group_suggestion_enable_tab_switcher_only", "true"}, }; const FeatureEntry::FeatureVariation kGroupSuggestionVariations[] = { - {"Recently Opened Only", kGroupSuggestionEnableRecentlyOpenedOnly, - std::size(kGroupSuggestionEnableRecentlyOpenedOnly), nullptr}, - {"Switch Between Only", kGroupSuggestionEnableSwitchBetweenOnly, - std::size(kGroupSuggestionEnableSwitchBetweenOnly), nullptr}, - {"Similar Source Only", kGroupSuggestionEnableSimilarSourceOnly, - std::size(kGroupSuggestionEnableSimilarSourceOnly), nullptr}, - {"Same Origin Only", kGroupSuggestionEnableSameOriginOnly, - std::size(kGroupSuggestionEnableSameOriginOnly), nullptr}, - {"Tab Switcher Only", kGroupSuggestionEnableTabSwitcherOnly, - std::size(kGroupSuggestionEnableTabSwitcherOnly), nullptr}, + {"Recently Opened Only", kGroupSuggestionEnableRecentlyOpenedOnly, nullptr}, + {"Switch Between Only", kGroupSuggestionEnableSwitchBetweenOnly, nullptr}, + {"Similar Source Only", kGroupSuggestionEnableSimilarSourceOnly, nullptr}, + {"Same Origin Only", kGroupSuggestionEnableSameOriginOnly, nullptr}, + {"Tab Switcher Only", kGroupSuggestionEnableTabSwitcherOnly, nullptr}, }; #if BUILDFLAG(ENABLE_COMPOSE) @@ -3976,20 +3537,13 @@ const FeatureEntry::FeatureParam kComposeSelectionNudge_100[] = { {"selection_nudge_length", "100"}}; const FeatureEntry::FeatureVariation kComposeSelectionNudgeVariations[] = { - {"1 Char", kComposeSelectionNudge_1, std::size(kComposeSelectionNudge_1), - nullptr}, - {"15 Char", kComposeSelectionNudge_15, std::size(kComposeSelectionNudge_15), - nullptr}, - {"30 Char", kComposeSelectionNudge_30, std::size(kComposeSelectionNudge_30), - nullptr}, - {"50 Char", kComposeSelectionNudge_50, std::size(kComposeSelectionNudge_50), - nullptr}, - {"100 Char", kComposeSelectionNudge_100, - std::size(kComposeSelectionNudge_100), nullptr}, - {"30 Char - 1sec", kComposeSelectionNudge_30_1s, - std::size(kComposeSelectionNudge_30_1s), nullptr}, - {"30 char - 2sec", kComposeSelectionNudge_30_2s, - std::size(kComposeSelectionNudge_30_2s), nullptr}}; + {"1 Char", kComposeSelectionNudge_1, nullptr}, + {"15 Char", kComposeSelectionNudge_15, nullptr}, + {"30 Char", kComposeSelectionNudge_30, nullptr}, + {"50 Char", kComposeSelectionNudge_50, nullptr}, + {"100 Char", kComposeSelectionNudge_100, nullptr}, + {"30 Char - 1sec", kComposeSelectionNudge_30_1s, nullptr}, + {"30 char - 2sec", kComposeSelectionNudge_30_2s, nullptr}}; #endif // ENABLE_COMPOSE #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) @@ -4003,14 +3557,11 @@ const FeatureEntry::FeatureParam kLocationProviderManagerModeHybridPlatform2[] = {{"LocationProviderManagerMode", "HybridPlatform2"}}; const FeatureEntry::FeatureVariation kLocationProviderManagerVariations[] = { - {"Network only", kLocationProviderManagerModeNetworkOnly, - std::size(kLocationProviderManagerModeNetworkOnly), nullptr}, - {"Platform only", kLocationProviderManagerModePlatformOnly, - std::size(kLocationProviderManagerModePlatformOnly), nullptr}, - {"Wi-Fi fallback", kLocationProviderManagerModeHybridPlatform, - std::size(kLocationProviderManagerModeHybridPlatform), nullptr}, + {"Network only", kLocationProviderManagerModeNetworkOnly, nullptr}, + {"Platform only", kLocationProviderManagerModePlatformOnly, nullptr}, + {"Wi-Fi fallback", kLocationProviderManagerModeHybridPlatform, nullptr}, {"Fallback on error", kLocationProviderManagerModeHybridPlatform2, - std::size(kLocationProviderManagerModeHybridPlatform2), nullptr}}; + nullptr}}; #endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) const FeatureEntry::FeatureParam kVisitedURLRankingDomainDeduplicationParam[] = @@ -4030,36 +3581,11 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kVisitedURLRankingDomainDeduplicationVariations[] = { {"- Domain Deduplication", kVisitedURLRankingDomainDeduplicationParam, - std::size(kVisitedURLRankingDomainDeduplicationParam), nullptr}, - {"- Domain Deduplication - Include Query", - kVisitedURLRankingDomainDeduplicationIncludeQueryParam, - std::size(kVisitedURLRankingDomainDeduplicationIncludeQueryParam), nullptr}, + {"- Domain Deduplication - Include Query", + kVisitedURLRankingDomainDeduplicationIncludeQueryParam, nullptr}, {"- Domain Deduplication - Include Path and Query", - kVisitedURLRankingDomainDeduplicationIncludePathQueryParam, - std::size(kVisitedURLRankingDomainDeduplicationIncludePathQueryParam), - nullptr}}; - -const FeatureEntry::FeatureParam - kAutofillImprovedLabelsWithoutMainTextChanges[] = { - {"autofill_improved_labels_without_main_text_changes", "true"}, - {"autofill_improved_labels_with_differentiating_labels_in_front", - "false"}}; - -const FeatureEntry::FeatureParam - kAutofillImprovedLabelsWithDifferentiatingLabelsInFront[] = { - {"autofill_improved_labels_without_main_text_changes", "false"}, - {"autofill_improved_labels_with_differentiating_labels_in_front", - "true"}}; - -const FeatureEntry::FeatureVariation kAutofillImprovedLabelsVariations[] = { - {"without main text changes", kAutofillImprovedLabelsWithoutMainTextChanges, - std::size(kAutofillImprovedLabelsWithoutMainTextChanges), nullptr}, - {"with differentiating labels in front", - kAutofillImprovedLabelsWithDifferentiatingLabelsInFront, - std::size(kAutofillImprovedLabelsWithDifferentiatingLabelsInFront), - nullptr}, -}; + kVisitedURLRankingDomainDeduplicationIncludePathQueryParam, nullptr}}; #if BUILDFLAG(ENABLE_EXTENSIONS) constexpr char kExtensionAiDataInternalName[] = @@ -4071,8 +3597,7 @@ const FeatureEntry::FeatureParam kDiscountOnShoppyPage[] = { #if !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureVariation kDiscountsVariations[] = { - {"Discount on Shoppy page", kDiscountOnShoppyPage, - std::size(kDiscountOnShoppyPage), nullptr}}; + {"Discount on Shoppy page", kDiscountOnShoppyPage, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -4080,10 +3605,9 @@ const FeatureEntry::FeatureParam kDiscountIconOnAndroidUseAlternateColor[] = { {commerce::kDiscountOnShoppyPageParam, "true"}, {"action_chip_with_different_color", "true"}}; const FeatureEntry::FeatureVariation kDiscountsVariationsOnAndroid[] = { - {"Discount on Shoppy page", kDiscountOnShoppyPage, - std::size(kDiscountOnShoppyPage), nullptr}, + {"Discount on Shoppy page", kDiscountOnShoppyPage, nullptr}, {"action chip different color", kDiscountIconOnAndroidUseAlternateColor, - std::size(kDiscountIconOnAndroidUseAlternateColor), nullptr}}; + nullptr}}; #endif // BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kSkiaGraphite_ValidationEnabled[] = { @@ -4095,11 +3619,10 @@ const FeatureEntry::FeatureParam kSkiaGraphite_DebugLabelsEnabled[] = { const FeatureEntry::FeatureVariation kSkiaGraphiteVariations[] = { {"dawn frontend validation enabled", kSkiaGraphite_ValidationEnabled, - std::size(kSkiaGraphite_ValidationEnabled), nullptr}, + nullptr}, {"dawn frontend validation disabled", kSkiaGraphite_ValidationDisabled, - std::size(kSkiaGraphite_ValidationDisabled), nullptr}, - {"dawn debug labels enabled", kSkiaGraphite_DebugLabelsEnabled, - std::size(kSkiaGraphite_DebugLabelsEnabled), nullptr}, + nullptr}, + {"dawn debug labels enabled", kSkiaGraphite_DebugLabelsEnabled, nullptr}, }; #if BUILDFLAG(IS_ANDROID) @@ -4108,7 +3631,7 @@ const FeatureEntry::FeatureParam kSensitiveContentUsePwmHeuristics[] = { const FeatureEntry::FeatureVariation kSensitiveContentVariations[] = { {"with password manager heuristics", kSensitiveContentUsePwmHeuristics, - std::size(kSensitiveContentUsePwmHeuristics), nullptr}, + nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -4122,8 +3645,7 @@ const FeatureEntry::FeatureParam kContextualCueingEnabledNoEngagementCap[] = { {"MinPageCountBetweenNudges", "0"}, {"MinTimeBetweenNudges", "0h"}}; const FeatureEntry::FeatureVariation kContextualCueingEnabledOptions[] = { - {"no engagement caps", kContextualCueingEnabledNoEngagementCap, - std::size(kContextualCueingEnabledNoEngagementCap), nullptr}, + {"no engagement caps", kContextualCueingEnabledNoEngagementCap, nullptr}, }; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) @@ -4145,23 +3667,15 @@ const FeatureEntry::FeatureVariation kPartitionAllocWithAdvancedChecksEnabledProcessesOptions[] = { {"on browser process only", kPartitionAllocWithAdvancedChecksEnabledProcesses_BrowserOnly, - std::size( - kPartitionAllocWithAdvancedChecksEnabledProcesses_BrowserOnly), nullptr}, {"on browser and renderer processes", kPartitionAllocWithAdvancedChecksEnabledProcesses_BrowserAndRenderer, - std::size( - kPartitionAllocWithAdvancedChecksEnabledProcesses_BrowserAndRenderer), nullptr}, {"on non renderer processes", kPartitionAllocWithAdvancedChecksEnabledProcesses_NonRenderer, - std::size( - kPartitionAllocWithAdvancedChecksEnabledProcesses_NonRenderer), nullptr}, {"on all processes", kPartitionAllocWithAdvancedChecksEnabledProcesses_AllProcesses, - std::size( - kPartitionAllocWithAdvancedChecksEnabledProcesses_AllProcesses), nullptr}}; #endif // PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) @@ -4169,8 +3683,7 @@ const FeatureEntry::FeatureParam kSendTabIOSPushNotificationsWithURLImage[] = { {send_tab_to_self::kSendTabIOSPushNotificationsURLImageParam, "true"}}; const FeatureEntry::FeatureVariation kSendTabIOSPushNotificationsVariations[] = { - {"With URL Image", kSendTabIOSPushNotificationsWithURLImage, - std::size(kSendTabIOSPushNotificationsWithURLImage), nullptr}, + {"With URL Image", kSendTabIOSPushNotificationsWithURLImage, nullptr}, }; #if BUILDFLAG(IS_ANDROID) && PA_BUILDFLAG(HAS_MEMORY_TAGGING) && \ @@ -4203,29 +3716,17 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kPartitionAllocMemoryTaggingEnabledProcessesOptions[] = { {"ASYNC mode on browser process only", - kPartitionAllocMemoryTaggingParams_AsyncBrowserOnly, - std::size(kPartitionAllocMemoryTaggingParams_AsyncBrowserOnly), - nullptr}, + kPartitionAllocMemoryTaggingParams_AsyncBrowserOnly, nullptr}, {"ASYNC mode on non renderer processes", - kPartitionAllocMemoryTaggingParams_AsyncNonRenderer, - std::size(kPartitionAllocMemoryTaggingParams_AsyncNonRenderer), - nullptr}, + kPartitionAllocMemoryTaggingParams_AsyncNonRenderer, nullptr}, {"ASYNC mode on all processes", - kPartitionAllocMemoryTaggingParams_AsyncAllProcesses, - std::size(kPartitionAllocMemoryTaggingParams_AsyncAllProcesses), - nullptr}, + kPartitionAllocMemoryTaggingParams_AsyncAllProcesses, nullptr}, {"SYNC mode on browser process only", - kPartitionAllocMemoryTaggingParams_SyncBrowserOnly, - std::size(kPartitionAllocMemoryTaggingParams_SyncBrowserOnly), - nullptr}, + kPartitionAllocMemoryTaggingParams_SyncBrowserOnly, nullptr}, {"SYNC mode on non renderer processes", - kPartitionAllocMemoryTaggingParams_SyncNonRenderer, - std::size(kPartitionAllocMemoryTaggingParams_SyncNonRenderer), - nullptr}, + kPartitionAllocMemoryTaggingParams_SyncNonRenderer, nullptr}, {"SYNC mode on all processes", - kPartitionAllocMemoryTaggingParams_SyncAllProcesses, - std::size(kPartitionAllocMemoryTaggingParams_SyncAllProcesses), - nullptr}}; + kPartitionAllocMemoryTaggingParams_SyncAllProcesses, nullptr}}; #endif // BUILDFLAG(IS_ANDROID) && PA_BUILDFLAG(HAS_MEMORY_TAGGING) && // PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) @@ -4242,16 +3743,11 @@ const FeatureEntry::FeatureParam kAudioDuckingAttenuation_100[] = { {"attenuation", "100"}}; const FeatureEntry::FeatureVariation kAudioDuckingAttenuationVariations[] = { - {"attenuation 60", kAudioDuckingAttenuation_60, - std::size(kAudioDuckingAttenuation_60), nullptr}, - {"attenuation 70", kAudioDuckingAttenuation_70, - std::size(kAudioDuckingAttenuation_70), nullptr}, - {"attenuation 80", kAudioDuckingAttenuation_80, - std::size(kAudioDuckingAttenuation_80), nullptr}, - {"attenuation 90", kAudioDuckingAttenuation_90, - std::size(kAudioDuckingAttenuation_90), nullptr}, - {"attenuation 100", kAudioDuckingAttenuation_100, - std::size(kAudioDuckingAttenuation_100), nullptr}}; + {"attenuation 60", kAudioDuckingAttenuation_60, nullptr}, + {"attenuation 70", kAudioDuckingAttenuation_70, nullptr}, + {"attenuation 80", kAudioDuckingAttenuation_80, nullptr}, + {"attenuation 90", kAudioDuckingAttenuation_90, nullptr}, + {"attenuation 100", kAudioDuckingAttenuation_100, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) @@ -4278,8 +3774,7 @@ const FeatureEntry::FeatureParam kMaliciousApkDownloadCheckTelemetryOnlyParams[] = { {"telemetry_only", "true"}}; const FeatureEntry::FeatureVariation kMaliciousApkDownloadCheckChoices[] = { - {"Telemetry only", kMaliciousApkDownloadCheckTelemetryOnlyParams, - std::size(kMaliciousApkDownloadCheckTelemetryOnlyParams), nullptr}}; + {"Telemetry only", kMaliciousApkDownloadCheckTelemetryOnlyParams, nullptr}}; #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -4298,7 +3793,7 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kStandardBoundSessionCredentialsVariations[] = { {"- For developers", kStandardBoundSessionCredentialsForDevelopers, - std::size(kStandardBoundSessionCredentialsForDevelopers), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kStandardBoundSessionCredentialsFederatedSessionsForDevelopers[] = { @@ -4308,8 +3803,6 @@ const FeatureEntry::FeatureVariation kStandardBoundSessionCredentialsFederatedSessionsVariations[] = { {"- For developers", kStandardBoundSessionCredentialsFederatedSessionsForDevelopers, - std::size( - kStandardBoundSessionCredentialsFederatedSessionsForDevelopers), nullptr}}; // LINT.IfChange(AutofillVcnEnrollStrikeExpiryTime) @@ -4324,12 +3817,9 @@ const FeatureEntry::FeatureParam kAutofillVcnEnrollStrikeExpiryTime_30Days[] = { const FeatureEntry::FeatureVariation kAutofillVcnEnrollStrikeExpiryTimeOptions[] = { - {"120 days", kAutofillVcnEnrollStrikeExpiryTime_120Days, - std::size(kAutofillVcnEnrollStrikeExpiryTime_120Days), nullptr}, - {"60 days", kAutofillVcnEnrollStrikeExpiryTime_60Days, - std::size(kAutofillVcnEnrollStrikeExpiryTime_60Days), nullptr}, - {"30 days", kAutofillVcnEnrollStrikeExpiryTime_30Days, - std::size(kAutofillVcnEnrollStrikeExpiryTime_30Days), nullptr}}; + {"120 days", kAutofillVcnEnrollStrikeExpiryTime_120Days, nullptr}, + {"60 days", kAutofillVcnEnrollStrikeExpiryTime_60Days, nullptr}, + {"30 days", kAutofillVcnEnrollStrikeExpiryTime_30Days, nullptr}}; // LINT.ThenChange(//ios/chrome/browser/flags/about_flags.mm:AutofillVcnEnrollStrikeExpiryTime) #if BUILDFLAG(ENABLE_GLIC) @@ -4348,15 +3838,15 @@ const FeatureEntry::FeatureParam kGlicPanelResetTopChromeButtonOnOpen_10s[] = { const FeatureEntry::FeatureVariation kGlicPanelResetTopChromeButtonVariations[] = { {"Reset on open - 1s", kGlicPanelResetTopChromeButtonOnOpen_1s, - std::size(kGlicPanelResetTopChromeButtonOnOpen_1s), nullptr}, + nullptr}, {"Reset on open - 2s", kGlicPanelResetTopChromeButtonOnOpen_2s, - std::size(kGlicPanelResetTopChromeButtonOnOpen_2s), nullptr}, + nullptr}, {"Reset on open - 3s", kGlicPanelResetTopChromeButtonOnOpen_3s, - std::size(kGlicPanelResetTopChromeButtonOnOpen_3s), nullptr}, + nullptr}, {"Reset on open - 5s", kGlicPanelResetTopChromeButtonOnOpen_5s, - std::size(kGlicPanelResetTopChromeButtonOnOpen_5s), nullptr}, + nullptr}, {"Reset on open - 10s", kGlicPanelResetTopChromeButtonOnOpen_10s, - std::size(kGlicPanelResetTopChromeButtonOnOpen_10s), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kGlicPanelResetOnSessionTimeout_0h[] = { {"glic-panel-reset-session-timeout-delay-h", "0"}, @@ -4391,24 +3881,15 @@ const FeatureEntry::FeatureParam kGlicPanelResetOnSessionTimeout_48h[] = { const FeatureEntry::FeatureVariation kGlicPanelResetOnSessionTimeoutVariations[] = { - {"Always Restart (0min)", kGlicPanelResetOnSessionTimeout_0h, - std::size(kGlicPanelResetOnSessionTimeout_0h), nullptr}, - {"Reset after 5min", kGlicPanelResetOnSessionTimeout_5min, - std::size(kGlicPanelResetOnSessionTimeout_5min), nullptr}, - {"Reset after 30min", kGlicPanelResetOnSessionTimeout_30min, - std::size(kGlicPanelResetOnSessionTimeout_30min), nullptr}, - {"Reset after 1h", kGlicPanelResetOnSessionTimeout_1h, - std::size(kGlicPanelResetOnSessionTimeout_1h), nullptr}, - {"Reset after 2h", kGlicPanelResetOnSessionTimeout_2h, - std::size(kGlicPanelResetOnSessionTimeout_2h), nullptr}, - {"Reset after 4h", kGlicPanelResetOnSessionTimeout_4h, - std::size(kGlicPanelResetOnSessionTimeout_4h), nullptr}, - {"Reset after 12h", kGlicPanelResetOnSessionTimeout_12h, - std::size(kGlicPanelResetOnSessionTimeout_12h), nullptr}, - {"Reset after 24h", kGlicPanelResetOnSessionTimeout_24h, - std::size(kGlicPanelResetOnSessionTimeout_24h), nullptr}, - {"Reset after 48h", kGlicPanelResetOnSessionTimeout_48h, - std::size(kGlicPanelResetOnSessionTimeout_48h), nullptr}}; + {"Always Restart (0min)", kGlicPanelResetOnSessionTimeout_0h, nullptr}, + {"Reset after 5min", kGlicPanelResetOnSessionTimeout_5min, nullptr}, + {"Reset after 30min", kGlicPanelResetOnSessionTimeout_30min, nullptr}, + {"Reset after 1h", kGlicPanelResetOnSessionTimeout_1h, nullptr}, + {"Reset after 2h", kGlicPanelResetOnSessionTimeout_2h, nullptr}, + {"Reset after 4h", kGlicPanelResetOnSessionTimeout_4h, nullptr}, + {"Reset after 12h", kGlicPanelResetOnSessionTimeout_12h, nullptr}, + {"Reset after 24h", kGlicPanelResetOnSessionTimeout_24h, nullptr}, + {"Reset after 48h", kGlicPanelResetOnSessionTimeout_48h, nullptr}}; // Variations on pre-warming delays. const FeatureEntry::FeatureParam kGlicWarmingShorterDelays[] = { @@ -4416,8 +3897,7 @@ const FeatureEntry::FeatureParam kGlicWarmingShorterDelays[] = { {"glic-panel-reset-delay-ms", "2000"}}; const FeatureEntry::FeatureVariation kGlicWarmingVariations[] = { - {"with shorter delays", kGlicWarmingShorterDelays, - std::size(kGlicWarmingShorterDelays), nullptr}}; + {"with shorter delays", kGlicWarmingShorterDelays, nullptr}}; const char kGlicEntrypointVariationsShowLabel[] = "glic-entrypoint-variations-show-label"; @@ -4454,17 +3934,13 @@ const FeatureEntry::FeatureParam }; const FeatureEntry::FeatureVariation kGlicEntrypointVariations[] = { - {"highlight nudge only", kGlicEntrypointVariationsHighlightOnly, - std::size(kGlicEntrypointVariationsHighlightOnly), nullptr}, - {"label only", kGlicEntrypointVariationsLabelOnly, - std::size(kGlicEntrypointVariationsLabelOnly), nullptr}, + {"highlight nudge only", kGlicEntrypointVariationsHighlightOnly, nullptr}, + {"label only", kGlicEntrypointVariationsLabelOnly, nullptr}, {"label, highlight nudge", kGlicEntrypointVariationsLabelAndHighlight, - std::size(kGlicEntrypointVariationsLabelAndHighlight), nullptr}, - {"label, alt icon", kGlicEntrypointVariationsLabelAndIcon, - std::size(kGlicEntrypointVariationsLabelAndIcon), nullptr}, + nullptr}, + {"label, alt icon", kGlicEntrypointVariationsLabelAndIcon, nullptr}, {"label, icon, highlight nudge", - kGlicEntrypointVariationsLabelAndIconAndHighlight, - std::size(kGlicEntrypointVariationsLabelAndIconAndHighlight), nullptr}, + kGlicEntrypointVariationsLabelAndIconAndHighlight, nullptr}, }; const FeatureEntry::FeatureParam kGlicButtonPressedStateForceSolidIcon[] = { @@ -4472,8 +3948,7 @@ const FeatureEntry::FeatureParam kGlicButtonPressedStateForceSolidIcon[] = { const FeatureEntry::FeatureVariation kGlicButtonPressedStateVariations[] = { {"force solid color icon when pressed", - kGlicButtonPressedStateForceSolidIcon, - std::size(kGlicButtonPressedStateForceSolidIcon), nullptr}}; + kGlicButtonPressedStateForceSolidIcon, nullptr}}; const FeatureEntry::FeatureParam kGlicButtonAltLabelVariant0[] = { {"glic-button-alt-label-variant", "0"}}; @@ -4483,12 +3958,9 @@ const FeatureEntry::FeatureParam kGlicButtonAltLabelVariant2[] = { {"glic-button-alt-label-variant", "2"}}; const FeatureEntry::FeatureVariation kGlicButtonAltLabelVariations[] = { - {"A", kGlicButtonAltLabelVariant0, std::size(kGlicButtonAltLabelVariant0), - nullptr}, - {"B", kGlicButtonAltLabelVariant1, std::size(kGlicButtonAltLabelVariant1), - nullptr}, - {"C", kGlicButtonAltLabelVariant2, std::size(kGlicButtonAltLabelVariant2), - nullptr}}; + {"A", kGlicButtonAltLabelVariant0, nullptr}, + {"B", kGlicButtonAltLabelVariant1, nullptr}, + {"C", kGlicButtonAltLabelVariant2, nullptr}}; const FeatureEntry::FeatureParam kGlicTrustFirstOnboardingArm1Params[] = { {"arm", "1"}}; @@ -4498,20 +3970,36 @@ const FeatureEntry::FeatureParam kGlicTrustFirstOnboardingArm3Params[] = { {"arm", "3"}}; const FeatureEntry::FeatureVariation kGlicTrustFirstOnboardingVariations[] = { - {"- Arm 1: Start Chat", kGlicTrustFirstOnboardingArm1Params, - std::size(kGlicTrustFirstOnboardingArm1Params), nullptr}, - {"- Arm 2: Welcome Screen", kGlicTrustFirstOnboardingArm2Params, - std::size(kGlicTrustFirstOnboardingArm2Params), nullptr}, - {"- Arm 3: In-Flow opt-in", kGlicTrustFirstOnboardingArm3Params, - std::size(kGlicTrustFirstOnboardingArm3Params), nullptr}, + {"- Arm 1: Start Chat", kGlicTrustFirstOnboardingArm1Params, nullptr}, + {"- Arm 2: Welcome Screen", kGlicTrustFirstOnboardingArm2Params, nullptr}, + {"- Arm 3: In-Flow opt-in", kGlicTrustFirstOnboardingArm3Params, nullptr}, }; + +const FeatureEntry::Choice kGlicSetG1ForMultiInstance[] = { + {flags_ui::kGenericExperimentChoiceDefault, "", ""}, + {"Force G1 status", switches::kGlicForceG1StatusForMultiInstance, "true"}, + {"Force non-G1 status", switches::kGlicForceG1StatusForMultiInstance, + "false"}, +}; + +const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypeAutopush[] = { + {"glic-guest-url-preset-type", "0"}}; +const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypePreprod[] = { + {"glic-guest-url-preset-type", "1"}}; +const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypeProd[] = { + {"glic-guest-url-preset-type", "2"}}; + +const FeatureEntry::FeatureVariation kGlicGuestUrlPresetTypes[] = { + {"Auto-push", kGlicGuestUrlPresetTypeAutopush, nullptr}, + {"Pre-prod", kGlicGuestUrlPresetTypePreprod, nullptr}, + {"Prod", kGlicGuestUrlPresetTypeProd, nullptr}}; #endif // BUILDFLAG(ENABLE_GLIC) const FeatureEntry::FeatureParam kAutofillShowTypePredictionsAsTitle[] = { {"as-title", "true"}}; const FeatureEntry::FeatureVariation kAutofillShowTypePredictionsVariations[] = {{"- show predictions as title", kAutofillShowTypePredictionsAsTitle, - std::size(kAutofillShowTypePredictionsAsTitle), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kInvalidateChoiceOnRestoreIsRetroactiveOption[] = { @@ -4519,12 +4007,12 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kInvalidateSearchEngineChoiceOnRestoreVariations[] = { {"(retroactive)", kInvalidateChoiceOnRestoreIsRetroactiveOption, - std::size(kInvalidateChoiceOnRestoreIsRetroactiveOption), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kAILangsParam[] = {{"langs", "*"}}; const FeatureEntry::FeatureVariation kAILangsVariation[] = { - {"Multilingual", kAILangsParam, std::size(kAILangsParam), nullptr}, + {"Multilingual", kAILangsParam, nullptr}, }; #if BUILDFLAG(IS_WIN) @@ -4534,8 +4022,7 @@ const FeatureEntry::FeatureParam kAvatarButtonSyncPromoMinimumCookeAge[] = { const FeatureEntry::FeatureVariation kAvatarButtonSyncPromoVariations[] = { {"with short minimum cookie age (for testing)", - kAvatarButtonSyncPromoMinimumCookeAge, - std::size(kAvatarButtonSyncPromoMinimumCookeAge), nullptr}}; + kAvatarButtonSyncPromoMinimumCookeAge, nullptr}}; #endif #if BUILDFLAG(IS_ANDROID) @@ -4548,11 +4035,10 @@ const FeatureEntry::FeatureParam {"snippet_as_subtitle", "true"}, }; const FeatureEntry::FeatureVariation kTouchToSearchCalloutVariations[] = { - {"Default", nullptr, 0, nullptr}, - {"IPH", kTouchToSearchCalloutIphParams, - std::size(kTouchToSearchCalloutIphParams), nullptr}, + {"Default", {}, nullptr}, + {"IPH", kTouchToSearchCalloutIphParams, nullptr}, {"Snippet As Subtitle", kTouchToSearchCalloutSnippetAsSubtitleParams, - std::size(kTouchToSearchCalloutSnippetAsSubtitleParams), nullptr}, + nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -4571,10 +4057,8 @@ const FeatureEntry::FeatureParam kLensOverlayEduActionChipHomework[] = { }; const FeatureEntry::FeatureVariation kLensOverlayEduActionChipVariations[] = { - {"trigger on \"homework\"", kLensOverlayEduActionChipHomework, - std::size(kLensOverlayEduActionChipAllPages), nullptr}, - {"force trigger all pages", kLensOverlayEduActionChipAllPages, - std::size(kLensOverlayEduActionChipAllPages), nullptr}, + {"trigger on \"homework\"", kLensOverlayEduActionChipHomework, nullptr}, + {"force trigger all pages", kLensOverlayEduActionChipAllPages, nullptr}, }; const FeatureEntry::FeatureParam kLensOverlayEntrypointLabelAlt1[] = { @@ -4592,11 +4076,11 @@ const FeatureEntry::FeatureParam kLensOverlayEntrypointLabelAlt3[] = { const FeatureEntry::FeatureVariation kLensOverlayEntrypointLabelAltVariations[] = { {"Ask Google about this page", kLensOverlayEntrypointLabelAlt1, - std::size(kLensOverlayEntrypointLabelAlt1), nullptr}, + nullptr}, {"Ask Google Lens about this page", kLensOverlayEntrypointLabelAlt2, - std::size(kLensOverlayEntrypointLabelAlt2), nullptr}, + nullptr}, {"Search this page with Google Lens", kLensOverlayEntrypointLabelAlt3, - std::size(kLensOverlayEntrypointLabelAlt3), nullptr}, + nullptr}, }; const FeatureEntry::FeatureParam kEnableNtpBrowserPromosVariationSimple[] = { @@ -4606,10 +4090,8 @@ const FeatureEntry::FeatureParam kEnableNtpBrowserPromosVariationSetupList[] = { {"promo-type", "setuplist"}}; const FeatureEntry::FeatureVariation kEnableNtpBrowserPromosVariations[] = { - {"Single-promo", kEnableNtpBrowserPromosVariationSimple, - std::size(kEnableNtpBrowserPromosVariationSimple)}, - {"Setup List", kEnableNtpBrowserPromosVariationSetupList, - std::size(kEnableNtpBrowserPromosVariationSetupList)}, + {"Single-promo", kEnableNtpBrowserPromosVariationSimple}, + {"Setup List", kEnableNtpBrowserPromosVariationSetupList}, }; #endif // !BUILDFLAG(IS_ANDROID) @@ -4640,16 +4122,14 @@ const FeatureEntry::FeatureParam kDiskCacheBackendExperimentVariations_Sql[] = { {"backend", "sql"}}; const FeatureEntry::FeatureVariation kDiskCacheBackendExperimentVariations[] = { - {"default backend", kDiskCacheBackendExperimentVariations_Default, - std::size(kDiskCacheBackendExperimentVariations_Default), nullptr}, - {"simple backend", kDiskCacheBackendExperimentVariations_Simple, - std::size(kDiskCacheBackendExperimentVariations_Simple), nullptr}, + {"default backend", kDiskCacheBackendExperimentVariations_Default, nullptr}, + {"simple backend", kDiskCacheBackendExperimentVariations_Simple, nullptr}, #if !BUILDFLAG(IS_ANDROID) {"blockfile backend", kDiskCacheBackendExperimentVariations_Blockfile, - std::size(kDiskCacheBackendExperimentVariations_Blockfile), nullptr}, + nullptr}, #endif // !BUILDFLAG(IS_ANDROID) {"experimental sql backend", kDiskCacheBackendExperimentVariations_Sql, - std::size(kDiskCacheBackendExperimentVariations_Sql), nullptr}}; + nullptr}}; const FeatureEntry::FeatureParam kSafetyHubDisruptiveNotificationRevocationVariations_RevokeAll[] = { @@ -4669,13 +4149,9 @@ const FeatureEntry::FeatureVariation kSafetyHubDisruptiveNotificationRevocationVariations[] = { {"- Revoke all for testing", kSafetyHubDisruptiveNotificationRevocationVariations_RevokeAll, - std::size( - kSafetyHubDisruptiveNotificationRevocationVariations_RevokeAll), nullptr}, {"- Moderate", kSafetyHubDisruptiveNotificationRevocationVariations_Moderate, - std::size( - kSafetyHubDisruptiveNotificationRevocationVariations_Moderate), nullptr}, }; @@ -4696,22 +4172,17 @@ const FeatureEntry::FeatureParam kApproximateGeolocationPermissionArm6Params[] = const FeatureEntry::FeatureVariation kApproximateGeolocationPermissionVariations[] = { {"- Prompt arm: Horizontal Minimal", - kApproximateGeolocationPermissionArm1Params, - std::size(kApproximateGeolocationPermissionArm1Params), nullptr}, + kApproximateGeolocationPermissionArm1Params, nullptr}, {"- Prompt arm: Horizontal with Icon", - kApproximateGeolocationPermissionArm2Params, - std::size(kApproximateGeolocationPermissionArm2Params), nullptr}, + kApproximateGeolocationPermissionArm2Params, nullptr}, {"- Prompt arm: Horizontal with Icon + Description", - kApproximateGeolocationPermissionArm3Params, - std::size(kApproximateGeolocationPermissionArm3Params), nullptr}, + kApproximateGeolocationPermissionArm3Params, nullptr}, {"- Prompt arm: Vertical", kApproximateGeolocationPermissionArm4Params, - std::size(kApproximateGeolocationPermissionArm4Params), nullptr}, + nullptr}, {"- Prompt arm: Vertical with Description", - kApproximateGeolocationPermissionArm5Params, - std::size(kApproximateGeolocationPermissionArm5Params), nullptr}, + kApproximateGeolocationPermissionArm5Params, nullptr}, {"- Prompt arm: Horizontal with Icon + Long Description", - kApproximateGeolocationPermissionArm6Params, - std::size(kApproximateGeolocationPermissionArm6Params), nullptr}, + kApproximateGeolocationPermissionArm6Params, nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -4726,12 +4197,9 @@ const FeatureEntry::FeatureParam kCCTResetTimeoutParams_30min[] = { {"minimum_reset_timeout_mins", "30"}, }; const FeatureEntry::FeatureVariation kCCTResetTimeoutVariations[] = { - {"- Minimum timeout 1 minute", kCCTResetTimeoutParams_1min, - std::size(kCCTResetTimeoutParams_1min), nullptr}, - {"- Minimum timeout 15 minutes", kCCTResetTimeoutParams_15min, - std::size(kCCTResetTimeoutParams_15min), nullptr}, - {"- Minimum timeout 30 minutes", kCCTResetTimeoutParams_30min, - std::size(kCCTResetTimeoutParams_30min), nullptr}, + {"- Minimum timeout 1 minute", kCCTResetTimeoutParams_1min, nullptr}, + {"- Minimum timeout 15 minutes", kCCTResetTimeoutParams_15min, nullptr}, + {"- Minimum timeout 30 minutes", kCCTResetTimeoutParams_30min, nullptr}, }; #endif @@ -4741,10 +4209,8 @@ const FeatureEntry::FeatureParam kAndroidHubSearchTabGroupsPane[] = { const FeatureEntry::FeatureParam kAndroidHubSearchTabGroupStrings[] = { {"enable_hub_search_tab_group_strings", "true"}}; const FeatureEntry::FeatureVariation kAndroidHubSearchTabGroupsVariations[] = { - {"on Tab Groups Pane", kAndroidHubSearchTabGroupsPane, - std::size(kAndroidHubSearchTabGroupsPane), nullptr}, - {"with Tab Group Strings", kAndroidHubSearchTabGroupStrings, - std::size(kAndroidHubSearchTabGroupStrings), nullptr}, + {"on Tab Groups Pane", kAndroidHubSearchTabGroupsPane, nullptr}, + {"with Tab Group Strings", kAndroidHubSearchTabGroupStrings, nullptr}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -4754,10 +4220,13 @@ const FeatureEntry::FeatureParam kAndroidTabHighlightingForceCtrlClick[] = { const FeatureEntry::FeatureParam kAndroidTabHighlightingForceShiftClick[] = { {"force_shift_click", "true"}}; const FeatureEntry::FeatureVariation kAndroidTabHighlightingVariations[] = { - {"Force Ctrl Click", kAndroidTabHighlightingForceCtrlClick, - std::size(kAndroidTabHighlightingForceCtrlClick), nullptr}, - {"Force Shift Click", kAndroidTabHighlightingForceShiftClick, - std::size(kAndroidTabHighlightingForceShiftClick), nullptr}}; + {"Force Ctrl Click", kAndroidTabHighlightingForceCtrlClick, nullptr}, + {"Force Shift Click", kAndroidTabHighlightingForceShiftClick, nullptr}}; + +const FeatureEntry::FeatureParam kTabBottomSheetDontShowFusebox[] = { + {"dont_show_fusebox", "true"}}; +const FeatureEntry::FeatureVariation kTabBottomSheetVariations[] = { + {"Dont Show Fusebox", kTabBottomSheetDontShowFusebox, nullptr}}; const FeatureEntry::FeatureParam kAndroidPinnedTabsSearchBoxMovement[] = { {"search_box_movement", "true"}}; @@ -4769,14 +4238,11 @@ const FeatureEntry::FeatureParam {"search_box_squish_animation", "true"}}; const FeatureEntry::FeatureVariation kAndroidPinnedTabsVariations[] = { {"Enable search box movement", kAndroidPinnedTabsSearchBoxMovement, - std::size(kAndroidPinnedTabsSearchBoxMovement), nullptr}, - {"Enable search box squish animation", - kAndroidPinnedTabsSearchBoxSquishAnimation, - std::size(kAndroidPinnedTabsSearchBoxSquishAnimation), nullptr}, - {"Enable search box movement with squish animation", - kAndroidPinnedTabsSearchBoxMovementWithSquishAnimation, - std::size(kAndroidPinnedTabsSearchBoxMovementWithSquishAnimation), nullptr}, + {"Enable search box squish animation", + kAndroidPinnedTabsSearchBoxSquishAnimation, nullptr}, + {"Enable search box movement with squish animation", + kAndroidPinnedTabsSearchBoxMovementWithSquishAnimation, nullptr}, }; const FeatureEntry::FeatureParam kAndroidTipsNotificationsTrustAndSafety[] = { @@ -4804,30 +4270,31 @@ const FeatureEntry::FeatureParam {"reset_feature_tip_shown", "true"}}; const FeatureEntry::FeatureVariation kAndroidTipsNotificationsVariations[] = { - {" - Trust and Safety", kAndroidTipsNotificationsTrustAndSafety, - std::size(kAndroidTipsNotificationsTrustAndSafety), nullptr}, - {" - Essential", kAndroidTipsNotificationsEssential, - std::size(kAndroidTipsNotificationsEssential), nullptr}, - {" - New Features", kAndroidTipsNotificationsNewFeatures, - std::size(kAndroidTipsNotificationsNewFeatures), nullptr}, + {" - Trust and Safety", kAndroidTipsNotificationsTrustAndSafety, nullptr}, + {" - Essential", kAndroidTipsNotificationsEssential, nullptr}, + {" - New Features", kAndroidTipsNotificationsNewFeatures, nullptr}, {" - Always Show Opt In", kAndroidTipsNotificationsAlwaysShowOptInPromo, - std::size(kAndroidTipsNotificationsAlwaysShowOptInPromo), nullptr}, + nullptr}, {" - Schedule Instant Notification", - kAndroidTipsNotificationsScheduleInstantNotification, - std::size(kAndroidTipsNotificationsScheduleInstantNotification), nullptr}, + kAndroidTipsNotificationsScheduleInstantNotification, nullptr}, {" - Schedule Delayed Notification", - kAndroidTipsNotificationsScheduleDelayedNotification, - std::size(kAndroidTipsNotificationsScheduleDelayedNotification), nullptr}, + kAndroidTipsNotificationsScheduleDelayedNotification, nullptr}, {" - Reset Feature Tip Shown", - kAndroidTipsNotificationsResetFeatureTipShown, - std::size(kAndroidTipsNotificationsResetFeatureTipShown), nullptr}, + kAndroidTipsNotificationsResetFeatureTipShown, nullptr}, }; const FeatureEntry::FeatureParam kRobustWindowManagementBulkCloseEnabled[] = { {"bulk_close", "true"}}; const FeatureEntry::FeatureVariation kRobustWindowManagementVariations[] = { - {"Bulk Close", kRobustWindowManagementBulkCloseEnabled, - std::size(kRobustWindowManagementBulkCloseEnabled), nullptr}}; + {"Bulk Close", kRobustWindowManagementBulkCloseEnabled, nullptr}}; + +const FeatureEntry::FeatureParam + kRobustWindowManagementExperimentalOpenAdjacently[] = { + {"open_adjacently", "false"}}; +const FeatureEntry::FeatureVariation + kRobustWindowManagementExperimentalVariations[] = { + {"Open Fullscreen", kRobustWindowManagementExperimentalOpenAdjacently, + nullptr}}; #endif // BUILDFLAG(IS_ANDROID) @@ -4844,10 +4311,8 @@ const FeatureEntry::FeatureParam kMobilePromoOnDesktopForcePromoTypeReminder[] = const FeatureEntry::FeatureVariation kMobilePromoOnDesktopForcePromoTypeVariations[] = { - {"QRCode", kMobilePromoOnDesktopForcePromoTypeQRCode, - std::size(kMobilePromoOnDesktopForcePromoTypeQRCode), nullptr}, - {"Reminder", kMobilePromoOnDesktopForcePromoTypeReminder, - std::size(kMobilePromoOnDesktopForcePromoTypeReminder), nullptr}, + {"QRCode", kMobilePromoOnDesktopForcePromoTypeQRCode, nullptr}, + {"Reminder", kMobilePromoOnDesktopForcePromoTypeReminder, nullptr}, }; const FeatureEntry::FeatureParam kMobilePromoOnDesktopLens[] = { @@ -4868,32 +4333,45 @@ const FeatureEntry::FeatureParam kMobilePromoOnDesktopAutofill[] = { const FeatureEntry::FeatureParam kMobilePromoOnDesktopAutofillNotification[] = { {kMobilePromoOnDesktopPromoTypeParam, "3"}, {kMobilePromoOnDesktopNotificationParam, "true"}}; +const FeatureEntry::FeatureParam kMobilePromoOnDesktopTabGroups[] = { + {kMobilePromoOnDesktopPromoTypeParam, "4"}, + {kMobilePromoOnDesktopNotificationParam, "false"}}; +const FeatureEntry::FeatureParam kMobilePromoOnDesktopTabGroupsNotification[] = + {{kMobilePromoOnDesktopPromoTypeParam, "4"}, + {kMobilePromoOnDesktopNotificationParam, "true"}}; +const FeatureEntry::FeatureParam kMobilePromoOnDesktopPriceTracking[] = { + {kMobilePromoOnDesktopPromoTypeParam, "5"}, + {kMobilePromoOnDesktopNotificationParam, "false"}}; +const FeatureEntry::FeatureParam + kMobilePromoOnDesktopPriceTrackingNotification[] = { + {kMobilePromoOnDesktopPromoTypeParam, "5"}, + {kMobilePromoOnDesktopNotificationParam, "true"}}; const FeatureEntry::FeatureVariation kMobilePromoOnDesktopVariations[] = { - {" - Lens Promo", kMobilePromoOnDesktopLens, - std::size(kMobilePromoOnDesktopLens), nullptr}, + {" - Lens Promo", kMobilePromoOnDesktopLens, nullptr}, {" - Lens Promo with push notification", - kMobilePromoOnDesktopLensNotification, - std::size(kMobilePromoOnDesktopLensNotification), nullptr}, - {" - ESB", kMobilePromoOnDesktopESB, std::size(kMobilePromoOnDesktopESB), - nullptr}, + kMobilePromoOnDesktopLensNotification, nullptr}, + {" - ESB", kMobilePromoOnDesktopESB, nullptr}, {" - ESB with push notification", kMobilePromoOnDesktopESBNotification, - std::size(kMobilePromoOnDesktopESBNotification), nullptr}, - {" - PW Autofill", kMobilePromoOnDesktopAutofill, - std::size(kMobilePromoOnDesktopAutofill), nullptr}, + nullptr}, + {" - PW Autofill", kMobilePromoOnDesktopAutofill, nullptr}, {" - PW Autofill with push notification", - kMobilePromoOnDesktopAutofillNotification, - std::size(kMobilePromoOnDesktopAutofillNotification), nullptr}, + kMobilePromoOnDesktopAutofillNotification, nullptr}, + {" - Tab Groups", kMobilePromoOnDesktopTabGroups, nullptr}, + {" - Tab Groups with push notification", + kMobilePromoOnDesktopTabGroupsNotification, nullptr}, + {" - Price Tracking", kMobilePromoOnDesktopPriceTracking, nullptr}, + {" - Price Tracking with push notification", + kMobilePromoOnDesktopPriceTrackingNotification, nullptr}, }; const FeatureEntry::FeatureVariation kMobilePromoOnDesktopWithQRCodeVariations[] = { - {" - Lens Promo", kMobilePromoOnDesktopLens, - std::size(kMobilePromoOnDesktopLens), nullptr}, - {" - ESB", kMobilePromoOnDesktopESB, - std::size(kMobilePromoOnDesktopESB), nullptr}, - {" - PW Autofill", kMobilePromoOnDesktopAutofill, - std::size(kMobilePromoOnDesktopAutofill), nullptr}, + {" - Lens Promo", kMobilePromoOnDesktopLens, nullptr}, + {" - ESB", kMobilePromoOnDesktopESB, nullptr}, + {" - PW Autofill", kMobilePromoOnDesktopAutofill, nullptr}, + {" - Tab Groups", kMobilePromoOnDesktopTabGroups, nullptr}, + {" - Price Tracking", kMobilePromoOnDesktopPriceTracking, nullptr}, }; #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ @@ -4908,12 +4386,9 @@ const FeatureEntry::FeatureParam kNtpCustomizeChromeAutoOpenIPHOnly[] = { {"max_customize_chrome_auto_shown_count", "0"}, {"max_customize_chrome_auto_shown_session_count", "0"}}; const FeatureEntry::FeatureVariation kNtpCustomizeChromeAutoOpenVariations[] = { - {"- On every NTP", kNtpCustomizeChromeAutoOpenOnEveryNTP, - std::size(kNtpCustomizeChromeAutoOpenOnEveryNTP), nullptr}, - {"- First NTP only", kNtpCustomizeChromeAutoOpenOnFirstNTPOnly, - std::size(kNtpCustomizeChromeAutoOpenOnFirstNTPOnly), nullptr}, - {"- IPH only", kNtpCustomizeChromeAutoOpenIPHOnly, - std::size(kNtpCustomizeChromeAutoOpenIPHOnly), nullptr}, + {"- On every NTP", kNtpCustomizeChromeAutoOpenOnEveryNTP, nullptr}, + {"- First NTP only", kNtpCustomizeChromeAutoOpenOnFirstNTPOnly, nullptr}, + {"- IPH only", kNtpCustomizeChromeAutoOpenIPHOnly, nullptr}, }; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ // BUILDFLAG(IS_CHROMEOS) @@ -4930,16 +4405,11 @@ const FeatureEntry::FeatureParam kPolicyRegistrationDelay24h[] = { {"PolicyRegistrationDelay", "24h"}}; const FeatureEntry::FeatureVariation kPolicyRegistrationDelayVariations[] = { - {"2 minutes", kPolicyRegistrationDelay2m, - std::size(kPolicyRegistrationDelay2m), nullptr}, - {"1 hour", kPolicyRegistrationDelay1h, - std::size(kPolicyRegistrationDelay1h), nullptr}, - {"6 hours", kPolicyRegistrationDelay6h, - std::size(kPolicyRegistrationDelay6h), nullptr}, - {"12 hours", kPolicyRegistrationDelay12h, - std::size(kPolicyRegistrationDelay12h), nullptr}, - {"24 hours", kPolicyRegistrationDelay24h, - std::size(kPolicyRegistrationDelay24h), nullptr}, + {"2 minutes", kPolicyRegistrationDelay2m, nullptr}, + {"1 hour", kPolicyRegistrationDelay1h, nullptr}, + {"6 hours", kPolicyRegistrationDelay6h, nullptr}, + {"12 hours", kPolicyRegistrationDelay12h, nullptr}, + {"24 hours", kPolicyRegistrationDelay24h, nullptr}, }; #if BUILDFLAG(ENABLE_DICE_SUPPORT) @@ -4957,20 +4427,15 @@ const FeatureEntry::FeatureParam kPolicyDisclaimerRegistrationRetryDelay24h[] = const FeatureEntry::FeatureVariation kPolicyDisclaimerRegistrationRetryDelayVariations[] = { {"Enabled - Retry every 2 minutes", - kPolicyDisclaimerRegistrationRetryDelay2m, - std::size(kPolicyDisclaimerRegistrationRetryDelay2m), nullptr}, + kPolicyDisclaimerRegistrationRetryDelay2m, nullptr}, {"Enabled - Retry every 1 hour", - kPolicyDisclaimerRegistrationRetryDelay1h, - std::size(kPolicyDisclaimerRegistrationRetryDelay1h), nullptr}, + kPolicyDisclaimerRegistrationRetryDelay1h, nullptr}, {"Enabled - Retry every 6 hours", - kPolicyDisclaimerRegistrationRetryDelay6h, - std::size(kPolicyDisclaimerRegistrationRetryDelay6h), nullptr}, + kPolicyDisclaimerRegistrationRetryDelay6h, nullptr}, {"Enabled - Retry every 12 hours", - kPolicyDisclaimerRegistrationRetryDelay12h, - std::size(kPolicyDisclaimerRegistrationRetryDelay12h), nullptr}, + kPolicyDisclaimerRegistrationRetryDelay12h, nullptr}, {"Enabled - Retry every 24 hours", - kPolicyDisclaimerRegistrationRetryDelay24h, - std::size(kPolicyDisclaimerRegistrationRetryDelay24h), nullptr}, + kPolicyDisclaimerRegistrationRetryDelay24h, nullptr}, }; const FeatureEntry::FeatureParam @@ -4981,9 +4446,9 @@ const FeatureEntry::FeatureParam const FeatureEntry::FeatureVariation kOAuthMultiloginCookieBindingEnforcementVariations[] = { {"without enforcement", kOAuthMultiloginCookieBindingWithoutEnforcement, - std::size(kOAuthMultiloginCookieBindingWithoutEnforcement), nullptr}, + nullptr}, {"with enforcement", kOAuthMultiloginCookieBindingWithEnforcement, - std::size(kOAuthMultiloginCookieBindingWithEnforcement), nullptr}, + nullptr}, }; #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) @@ -5002,17 +4467,13 @@ const FeatureEntry::FeatureParam kSeamlessSigninCompactSignin[] = { {"seamless-signin-string-type", "signinButton"}}; const FeatureEntry::FeatureVariation kSeamlessSigninVariations[] = { {"with two buttons layout and \"Continue as\" button (group 1)", - kSeamlessSigninTwoButtonsContinue, - std::size(kSeamlessSigninTwoButtonsContinue), nullptr}, + kSeamlessSigninTwoButtonsContinue, nullptr}, {"with compact layout and \"Continue as\" button (group 2)", - kSeamlessSigninCompactContinue, std::size(kSeamlessSigninCompactContinue), - nullptr}, + kSeamlessSigninCompactContinue, nullptr}, {"with two buttons layout and \"Sign in as\" button (group 3)", - kSeamlessSigninTwoButtonsSignin, - std::size(kSeamlessSigninTwoButtonsSignin), nullptr}, + kSeamlessSigninTwoButtonsSignin, nullptr}, {"with compact layout and \"Sign in as\" button (group 4)", - kSeamlessSigninCompactSignin, std::size(kSeamlessSigninCompactSignin), - nullptr}}; + kSeamlessSigninCompactSignin, nullptr}}; #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) @@ -5028,17 +4489,12 @@ const FeatureEntry::FeatureParam kProfilePickerTextVariation5[] = { {"profile-picker-variation", "keep-everything-in-chrome"}}; const FeatureEntry::FeatureVariation kProfilePickerTextVariations[] = { - {"V1: Keep work and life separate", kProfilePickerTextVariation1, - std::size(kProfilePickerTextVariation1), nullptr}, - {"V2: Got another Google Account?", kProfilePickerTextVariation2, - std::size(kProfilePickerTextVariation2), nullptr}, + {"V1: Keep work and life separate", kProfilePickerTextVariation1, nullptr}, + {"V2: Got another Google Account?", kProfilePickerTextVariation2, nullptr}, {"V3: Keep school, side projects, and other tasks separate", - kProfilePickerTextVariation3, std::size(kProfilePickerTextVariation3), - nullptr}, - {"V4: Sharing a computer?", kProfilePickerTextVariation4, - std::size(kProfilePickerTextVariation4), nullptr}, - {"V5: Keep everything in Chrome", kProfilePickerTextVariation5, - std::size(kProfilePickerTextVariation5), nullptr}, + kProfilePickerTextVariation3, nullptr}, + {"V4: Sharing a computer?", kProfilePickerTextVariation4, nullptr}, + {"V5: Keep everything in Chrome", kProfilePickerTextVariation5, nullptr}, }; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) @@ -5047,8 +4503,13 @@ const FeatureEntry::FeatureParam kAndroidBookmarkBarFastFollowStandard[] = { {"dynamic_width_enabled", "false"}}; const FeatureEntry::FeatureVariation kAndroidBookmarkBarFastFollowVariations[] = {{"(Standard Width - with animations)", - kAndroidBookmarkBarFastFollowStandard, - std::size(kAndroidBookmarkBarFastFollowStandard), nullptr}}; + kAndroidBookmarkBarFastFollowStandard, nullptr}}; +const FeatureEntry::FeatureParam kDefaultBrowserPromoEntryPointSettingsOnly[] = + {{"show_app_menu_item", "false"}}; +const FeatureEntry::FeatureVariation + kDefaultBrowserPromoEntryPointVariations[] = { + {"(Settings Only - No App Menu)", + kDefaultBrowserPromoEntryPointSettingsOnly, nullptr}}; const FeatureEntry::FeatureParam kAndroidDesktopZoomScalingFactorSmall[] = { {"desktop-zoom-scaling-factor", "109"}, {"monitor-zoom-scaling-factor", "120"}}; @@ -5060,11 +4521,11 @@ const FeatureEntry::FeatureParam kAndroidDesktopZoomScalingFactorLarge[] = { {"monitor-zoom-scaling-factor", "130"}}; const FeatureEntry::FeatureVariation kAndroidDesktopZoomScalingVariations[] = { {"with 109 scaling, 120 monitor", kAndroidDesktopZoomScalingFactorSmall, - std::size(kAndroidDesktopZoomScalingFactorSmall), nullptr}, + nullptr}, {"with 115 scaling, 125 monitor", kAndroidDesktopZoomScalingFactorMedium, - std::size(kAndroidDesktopZoomScalingFactorMedium), nullptr}, + nullptr}, {"with 120 scaling, 130 monitor", kAndroidDesktopZoomScalingFactorLarge, - std::size(kAndroidDesktopZoomScalingFactorLarge), nullptr}}; + nullptr}}; #endif // BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kContextualTaskPermanentButton[] = { @@ -5082,17 +4543,13 @@ const FeatureEntry::FeatureParam kContextualTaskDisableLens[] = { const FeatureEntry::FeatureVariation kContextualTaskEntryPointVariations[] = { {"Arm 1: Full bundle with ephemeral toolbar button", - kContextualTaskEphemeralButton, std::size(kContextualTaskEphemeralButton), - nullptr}, + kContextualTaskEphemeralButton, nullptr}, {"Arm 2: Full bundle, without AIM link clicks opening side panel", - kContextualTaskDisableSidePanel, - std::size(kContextualTaskDisableSidePanel), nullptr}, + kContextualTaskDisableSidePanel, nullptr}, {"Arm 3: Full bundle, without Lens migration", kContextualTaskDisableLens, - std::size(kContextualTaskDisableLens), nullptr}, - {"permanent toolbar button", kContextualTaskPermanentButton, - std::size(kContextualTaskPermanentButton), nullptr}, - {"page action chip", kContextualTaskPageAction, - std::size(kContextualTaskPageAction), nullptr}}; + nullptr}, + {"permanent toolbar button", kContextualTaskPermanentButton, nullptr}, + {"page action chip", kContextualTaskPageAction, nullptr}}; const FeatureEntry::FeatureParam kTaskScopedSidePanel[] = { {"ContextualTasksTaskScopedSidePanel", "true"}}; @@ -5100,10 +4557,8 @@ const FeatureEntry::FeatureParam kTabScopedSidePanel[] = { {"ContextualTasksTaskScopedSidePanel", "false"}}; const FeatureEntry::FeatureVariation kContextualTaskContextVariations[] = { - {" - Task scoped side panel", kTaskScopedSidePanel, - std::size(kTaskScopedSidePanel), nullptr}, - {" - Tab scoped side panel", kTabScopedSidePanel, - std::size(kTabScopedSidePanel), nullptr}}; + {" - Task scoped side panel", kTaskScopedSidePanel, nullptr}, + {" - Tab scoped side panel", kTabScopedSidePanel, nullptr}}; #if BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kAnimatedProgressBar30FpsCap[] = { @@ -5113,10 +4568,8 @@ const FeatureEntry::FeatureParam kAnimatedProgressBar60FpsCap[] = { const FeatureEntry::FeatureVariation kAndroidAnimatedProgressBarInBrowserVariations[] = { - {"with 30fps cap", kAnimatedProgressBar30FpsCap, - std::size(kAnimatedProgressBar30FpsCap), nullptr}, - {"with 60fsp cap", kAnimatedProgressBar60FpsCap, - std::size(kAnimatedProgressBar60FpsCap), nullptr}}; + {"with 30fps cap", kAnimatedProgressBar30FpsCap, nullptr}, + {"with 60fsp cap", kAnimatedProgressBar60FpsCap, nullptr}}; #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -5135,6 +4588,41 @@ const FeatureEntry::Choice kOmniboxAutofocusOnIncognitoNtpChoices[] = { }; #endif // !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(IS_ANDROID) +const FeatureEntry::FeatureParam kMediaIndicatorsAndroidSharingEnabled[] = { + {"sharing", "true"}}; +const FeatureEntry::FeatureVariation kMediaIndicatorsAndroidVariations[] = { + {"- With tab sharing indicator", kMediaIndicatorsAndroidSharingEnabled, + nullptr}}; +#endif // BUILDFLAG(IS_ANDROID) + +const FeatureEntry::FeatureParam + kDeviceBoundSessionsForRestrictedSitesExperimentIdFromFlags[] = { + {"Value", "set_from_flags"}}; +const FeatureEntry::FeatureVariation + kDeviceBoundSessionsForRestrictedSitesExperimentIdVariations[] = { + {"- set_from_flags", + kDeviceBoundSessionsForRestrictedSitesExperimentIdFromFlags, nullptr}}; + +const FeatureEntry::FeatureParam + kPermissionsGestureGatedPromptsMuteNotifications[] = { + {"mute_notifications", "true"}}; +const FeatureEntry::FeatureParam + kPermissionsGestureGatedPromptsMuteGeolocation[] = { + {"mute_geolocation", "true"}}; +const FeatureEntry::FeatureParam kPermissionsGestureGatedPromptsMuteBoth[] = { + {"mute_notifications", "true"}, + {"mute_geolocation", "true"}}; + +const FeatureEntry::FeatureVariation + kPermissionsGestureGatedPromptsVariations[] = { + {"Mute Notifications", kPermissionsGestureGatedPromptsMuteNotifications, + nullptr}, + {"Mute Geolocation", kPermissionsGestureGatedPromptsMuteGeolocation, + nullptr}, + {"Mute Both", kPermissionsGestureGatedPromptsMuteBoth, nullptr}, +}; + // RECORDING USER METRICS FOR FLAGS: // ----------------------------------------------------------------------------- // The first line of the entry is the internal name. @@ -5187,13 +4675,6 @@ const FeatureEntry kFeatureEntries[] = { {"show-overdraw-feedback", flag_descriptions::kShowOverdrawFeedbackName, flag_descriptions::kShowOverdrawFeedbackDescription, kOsAll, SINGLE_VALUE_TYPE(switches::kShowOverdrawFeedback)}, -#if !BUILDFLAG(IS_CHROMEOS) - {"feedback-include-variations", - flag_descriptions::kFeedbackIncludeVariationsName, - flag_descriptions::kFeedbackIncludeVariationsDescription, - kOsWin | kOsLinux | kOsMac | kOsAndroid, - FEATURE_VALUE_TYPE(variations::kFeedbackIncludeVariations)}, -#endif {"ui-disable-partial-swap", flag_descriptions::kUiPartialSwapName, flag_descriptions::kUiPartialSwapDescription, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)}, @@ -5270,10 +4751,6 @@ const FeatureEntry kFeatureEntries[] = { {"related-searches-switch", flag_descriptions::kRelatedSearchesSwitchName, flag_descriptions::kRelatedSearchesSwitchDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kRelatedSearchesSwitch)}, - {"omnibox-shortcuts-android", - flag_descriptions::kOmniboxShortcutsAndroidName, - flag_descriptions::kOmniboxShortcutsAndroidDescription, kOsAndroid, - FEATURE_VALUE_TYPE(omnibox::kOmniboxShortcutsAndroid)}, {"safe-browsing-scam-detection-keyboard-lock-trigger-android", flag_descriptions:: kSafeBrowsingScamDetectionKeyboardLockTriggerAndroidName, @@ -5389,6 +4866,10 @@ const FeatureEntry kFeatureEntries[] = { kOsAll, FEATURE_VALUE_TYPE( features::kEnableExperimentalWebAssemblySharedEverything)}, + {"enable-experimental-webassembly-stack-switching", + flag_descriptions::kEnableWasmStackSwitchingName, + flag_descriptions::kEnableWasmStackSwitchingDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kWebAssemblyStackSwitching)}, {"enable-webassembly-baseline", flag_descriptions::kEnableWasmBaselineName, flag_descriptions::kEnableWasmBaselineDescription, kOsAll, FEATURE_VALUE_TYPE(features::kWebAssemblyBaseline)}, @@ -5460,10 +4941,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(ash::features::kCaptureModeEducation, kCaptureModeEducationVariations, "CaptureModeEducation")}, - {"ash-capture-mode-education-bypass-limits", - flag_descriptions::kCaptureModeEducationBypassLimitsName, - flag_descriptions::kCaptureModeEducationBypassLimitsDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kCaptureModeEducationBypassLimits)}, {"ash-limit-shelf-items-to-active-desk", flag_descriptions::kLimitShelfItemsToActiveDeskName, flag_descriptions::kLimitShelfItemsToActiveDeskDescription, kOsCrOS, @@ -5472,9 +4949,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAshEnableUnifiedDesktopName, flag_descriptions::kAshEnableUnifiedDesktopDescription, kOsCrOS, SINGLE_VALUE_TYPE(switches::kEnableUnifiedDesktop)}, - {"disable-system-blur", flag_descriptions::kDisableSystemBlur, - flag_descriptions::kDisableSystemBlurDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kDisableSystemBlur)}, {"bluetooth-audio-le-audio-only", flag_descriptions::kBluetoothAudioLEAudioOnlyName, flag_descriptions::kBluetoothAudioLEAudioOnlyDescription, kOsCrOS, @@ -5556,9 +5030,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kInstantHotspotOnNearbyName, flag_descriptions::kInstantHotspotOnNearbyDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kInstantHotspotOnNearby)}, - {"instant-hotspot-rebrand", flag_descriptions::kInstantHotspotRebrandName, - flag_descriptions::kInstantHotspotRebrandDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kInstantHotspotRebrand)}, + {"instant-tethering", flag_descriptions::kTetherName, flag_descriptions::kTetherDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kInstantTethering)}, @@ -5612,9 +5084,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDisconnectWiFiOnEthernetConnectedName, flag_descriptions::kDisconnectWiFiOnEthernetConnectedDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kDisconnectWiFiOnEthernetConnected)}, - {"one-group-per-renderer", flag_descriptions::kOneGroupPerRendererName, - flag_descriptions::kOneGroupPerRendererDescription, kOsCrOS, - FEATURE_VALUE_TYPE(base::kOneGroupPerRenderer)}, {"use-dhcpcd10", flag_descriptions::kUseDHCPCD10Name, flag_descriptions::kUseDHCPCD10Description, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kUseDHCPCD10)}, @@ -5676,15 +5145,6 @@ const FeatureEntry kFeatureEntries[] = { }, #endif // BUILDFLAG(IS_WIN) -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) - { - "fluent-overlay-scrollbars", - flag_descriptions::kFluentOverlayScrollbarsName, - flag_descriptions::kFluentOverlayScrollbarsDescription, - kOsWin | kOsLinux, - FEATURE_VALUE_TYPE(features::kFluentOverlayScrollbar), - }, -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) #if BUILDFLAG(IS_CHROMEOS) { "zero-copy-video-capture", @@ -5790,6 +5250,9 @@ const FeatureEntry kFeatureEntries[] = { {"enable-vulkan", flag_descriptions::kEnableVulkanName, flag_descriptions::kEnableVulkanDescription, kOsLinux | kOsAndroid, FEATURE_VALUE_TYPE(features::kVulkan)}, + {"force-enable-webgpu-interop", flag_descriptions::kWebGpuInteropName, + flag_descriptions::kkWebGpuInteropDescription, kOsLinux, + FEATURE_VALUE_TYPE(features::kForceEnableWebGpuInterop)}, {"default-angle-vulkan", flag_descriptions::kDefaultAngleVulkanName, flag_descriptions::kDefaultAngleVulkanDescription, kOsLinux | kOsAndroid, FEATURE_VALUE_TYPE(features::kDefaultANGLEVulkan)}, @@ -5797,27 +5260,21 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kVulkanFromAngleDescription, kOsLinux | kOsAndroid, FEATURE_VALUE_TYPE(features::kVulkanFromANGLE)}, -#if !BUILDFLAG(IS_CHROMEOS) - {"enable-system-notifications", - flag_descriptions::kNotificationsSystemFlagName, - flag_descriptions::kNotificationsSystemFlagDescription, - kOsMac | kOsLinux | kOsWin, - FEATURE_VALUE_TYPE(features::kSystemNotifications)}, -#endif // !BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_CHROMEOS) {"enable-ongoing-processes", flag_descriptions::kEnableOngoingProcessesName, flag_descriptions::kEnableOngoingProcessesDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kOngoingProcesses)}, #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_ANDROID) - {"adaptive-button-in-top-toolbar-page-summary", - flag_descriptions::kAdaptiveButtonInTopToolbarPageSummaryName, - flag_descriptions::kAdaptiveButtonInTopToolbarPageSummaryDescription, + {"reader-mode-blur-transition-animation", + flag_descriptions::kReaderModeBlurTransitionAnimationName, + flag_descriptions::kReaderModeBlurTransitionAnimationDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE( - chrome::android::kAdaptiveButtonInTopToolbarPageSummary, - kAdaptiveButtonInTopToolbarPageSummaryVariations, - "AdaptiveButtonInTopToolbarPageSummary")}, + FEATURE_VALUE_TYPE(dom_distiller::kReaderModeBlurTransitionAnimation)}, + {"reader-mode-delay-bottomsheet-peek", + flag_descriptions::kReaderModeDelayBottomSheetPeekName, + flag_descriptions::kReaderModeDelayBottomSheetPeekDescription, kOsAndroid, + FEATURE_VALUE_TYPE(dom_distiller::kReaderModeDelayBottomSheetPeek)}, {"reader-mode-distill-in-app", flag_descriptions::kReaderModeDistillInAppName, flag_descriptions::kReaderModeDistillInAppDescription, kOsAndroid, @@ -5834,6 +5291,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kReaderModeSupportNewFontsName, flag_descriptions::kReaderModeSupportNewFontsDescription, kOsAndroid, FEATURE_VALUE_TYPE(dom_distiller::kReaderModeSupportNewFonts)}, + {"reader-mode-toggle-links", flag_descriptions::kReaderModeToggleLinksName, + flag_descriptions::kReaderModeToggleLinksDescription, kOsAndroid, + FEATURE_VALUE_TYPE(dom_distiller::kReaderModeToggleLinks)}, {"reader-mode-use-readability", flag_descriptions::kReaderModeUseReadabilityName, flag_descriptions::kReaderModeUseReadabilityDescription, kOsAndroid, @@ -5892,9 +5352,6 @@ const FeatureEntry kFeatureEntries[] = { {"crostini-containerless", flag_descriptions::kCrostiniContainerlessName, flag_descriptions::kCrostiniContainerlessDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kCrostiniContainerless)}, - {"crostini-multi-container", flag_descriptions::kCrostiniMultiContainerName, - flag_descriptions::kCrostiniMultiContainerDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kCrostiniMultiContainer)}, {"crostini-qt-ime-support", flag_descriptions::kCrostiniQtImeSupportName, flag_descriptions::kCrostiniQtImeSupportDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kCrostiniQtImeSupport)}, @@ -6028,9 +5485,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDesktopPWAsTabStripCustomizationsDescription, kOsDesktop, FEATURE_VALUE_TYPE(blink::features::kDesktopPWAsTabStripCustomizations)}, - {"enable-desktop-pwas-sub-apps", flag_descriptions::kDesktopPWAsSubAppsName, - flag_descriptions::kDesktopPWAsSubAppsDescription, kOsDesktop, - FEATURE_VALUE_TYPE(blink::features::kDesktopPWAsSubApps)}, + {"enable-desktop-pwas-sub-apps", flag_descriptions::kSubAppsName, + flag_descriptions::kSubAppsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(blink::features::kSubApps)}, // TODO(crbug.com/466441366): Remove "borderless". {"enable-desktop-pwas-borderless", flag_descriptions::kDesktopPWAsBorderlessName, @@ -6171,11 +5628,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kPulseaudioLoopbackForScreenShareDescription, kOsLinux, FEATURE_VALUE_TYPE(media::kPulseaudioLoopbackForScreenShare)}, - {"wayland-per-window-scaling", - flag_descriptions::kWaylandPerWindowScalingName, - flag_descriptions::kWaylandPerWindowScalingDescription, kOsLinux, - FEATURE_VALUE_TYPE(features::kWaylandPerSurfaceScale)}, - {"wayland-session-management", flag_descriptions::kWaylandSessionManagementName, flag_descriptions::kWaylandSessionManagementDescription, kOsLinux, @@ -6205,6 +5657,9 @@ const FeatureEntry kFeatureEntries[] = { {"webxr-internals", flag_descriptions::kWebXrInternalsName, flag_descriptions::kWebXrInternalsDescription, kOsDesktop | kOsAndroid, FEATURE_VALUE_TYPE(device::features::kWebXrInternals)}, + {"webxr-plane-detection", flag_descriptions::kWebXrPlaneDetectionName, + flag_descriptions::kWebXrPlaneDetectionDescription, kOsWin | kOsAndroid, + FEATURE_VALUE_TYPE(device::features::kWebXRPlaneDetection)}, {"webxr-runtime", flag_descriptions::kWebXrForceRuntimeName, flag_descriptions::kWebXrForceRuntimeDescription, kOsDesktop | kOsAndroid, MULTI_VALUE_TYPE(kWebXrForceRuntimeChoices)}, @@ -6265,24 +5720,10 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(chrome::android::kRightEdgeGoesForwardGestureNav)}, // Android Edge to edge - {"draw-cutout-edge-to-edge", flag_descriptions::kDrawCutoutEdgeToEdgeName, - flag_descriptions::kDrawCutoutEdgeToEdgeDescription, kOsAndroid, - FEATURE_VALUE_TYPE(features::kDrawCutoutEdgeToEdge)}, {"draw-chrome-pages-edge-to-edge", flag_descriptions::kDrawChromePagesEdgeToEdgeName, flag_descriptions::kDrawChromePagesEdgeToEdgeDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kDrawChromePagesEdgeToEdge)}, - {"edge-to-edge-bottom-chin", flag_descriptions::kEdgeToEdgeBottomChinName, - flag_descriptions::kEdgeToEdgeBottomChinDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kEdgeToEdgeBottomChin)}, - {"edge-to-edge-everywhere", flag_descriptions::kEdgeToEdgeEverywhereName, - flag_descriptions::kEdgeToEdgeEverywhereDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kEdgeToEdgeEverywhere)}, - {"edge-to-edge-tablet", flag_descriptions::kEdgeToEdgeTabletName, - flag_descriptions::kEdgeToEdgeTabletDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kEdgeToEdgeTablet, - kEdgeToEdgeTabletVariations, - "EdgeToEdgeTablet")}, // Android nav bar color animation {"nav-bar-color-animation", flag_descriptions::kNavBarColorAnimationName, @@ -6319,10 +5760,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kHomeModulePrefRefactorDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kHomeModulePrefRefactor)}, - {"hub-back-button", flag_descriptions::kHubBackButtonName, - flag_descriptions::kHubBackButtonDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kHubBackButton)}, - {"tab-freezing-uses-discard", flag_descriptions::kTabFreezingUsesDiscardName, flag_descriptions::kTabFreezingUsesDiscardDescription, kOsAndroid, @@ -6497,6 +5934,13 @@ const FeatureEntry kFeatureEntries[] = { kOsAndroid, FEATURE_VALUE_TYPE( features::kAccessibilityPopulateSupplementalDescriptionApi)}, + {"enable-accessibility-request-scoped-content-changed-events", + flag_descriptions::kAccessibilityRequestScopedContentChangedEventsName, + flag_descriptions:: + kAccessibilityRequestScopedContentChangedEventsDescription, + kOsAndroid, + FEATURE_VALUE_TYPE( + features::kAccessibilityRequestScopedContentChangedEvents)}, {"enable-accessibility-sequential-focus", flag_descriptions::kAccessibilitySequentialFocusName, flag_descriptions::kAccessibilitySequentialFocusDescription, kOsAndroid, @@ -6527,6 +5971,11 @@ const FeatureEntry kFeatureEntries[] = { kOsAndroid, FEATURE_VALUE_TYPE( features::kAccessibilityManageBroadcastReceiverOnBackground)}, + {"enable-accessibility-handle-occluding-views", + flag_descriptions::kAccessibilityHandleOccludingViewsName, + flag_descriptions::kAccessibilityHandleOccludingViewsDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(features::kAccessibilityHandleOccludingViews)}, {"enable-smart-zoom", flag_descriptions::kSmartZoomName, flag_descriptions::kSmartZoomDescription, kOsAndroid, FEATURE_VALUE_TYPE(features::kSmartZoom)}, @@ -6677,6 +6126,15 @@ const FeatureEntry kFeatureEntries[] = { {"fill-on-account-select", flag_descriptions::kFillOnAccountSelectName, flag_descriptions::kFillOnAccountSelectDescription, kOsAll, FEATURE_VALUE_TYPE(password_manager::features::kFillOnAccountSelect)}, + +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + {"first-run-desktop-refresh", + flag_descriptions::kFirstRunDesktopRefreshName, + flag_descriptions::kFirstRunDesktopRefreshDescription, + kOsMac | kOsWin | kOsLinux, + FEATURE_VALUE_TYPE(features::kFirstRunDesktopRefresh)}, +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + #if BUILDFLAG(IS_CHROMEOS) {"arc-aaudio-mmap-low-latency", flag_descriptions::kArcAAudioMMAPLowLatencyName, @@ -6720,10 +6178,6 @@ const FeatureEntry kFeatureEntries[] = { {"arc-rt-vcpu-quad-core", flag_descriptions::kArcRtVcpuQuadCoreName, flag_descriptions::kArcRtVcpuQuadCoreDesc, kOsCrOS, FEATURE_VALUE_TYPE(arc::kRtVcpuQuadCore)}, - {"arc-switch-to-keymint-daemon", - flag_descriptions::kArcSwitchToKeyMintDaemonName, - flag_descriptions::kArcSwitchToKeyMintDaemonDesc, kOsCrOS, - PLATFORM_FEATURE_NAME_TYPE("CrOSLateBootArcSwitchToKeyMintDaemon")}, {"arc-sync-install-priority", flag_descriptions::kArcSyncInstallPriorityName, flag_descriptions::kArcSyncInstallPriorityDescription, kOsCrOS, @@ -6933,13 +6387,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDisableInstanceLimitDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kDisableInstanceLimit)}, - {"clear-instance-info-when-closed-intentionally", - flag_descriptions::kClearInstanceInfoWhenClosedIntentionallyName, - flag_descriptions::kClearInstanceInfoWhenClosedIntentionallyDescription, - kOsAndroid, - FEATURE_VALUE_TYPE( - chrome::android::kClearInstanceInfoWhenClosedIntentionally)}, - {"change-unfocused-priority", flag_descriptions::kChangeUnfocusedPriorityName, flag_descriptions::kChangeUnfocusedPriorityDescription, kOsAndroid, @@ -6962,12 +6409,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOmniboxLocalHistoryZeroSuggestBeyondNTPDescription, kOsAll, FEATURE_VALUE_TYPE(omnibox::kLocalHistoryZeroSuggestBeyondNTP)}, - {"omnibox-suggestion-answer-migration", - flag_descriptions::kOmniboxSuggestionAnswerMigrationName, - flag_descriptions::kOmniboxSuggestionAnswerMigrationDescription, kOsAll, - FEATURE_VALUE_TYPE(omnibox_feature_configs::SuggestionAnswerMigration:: - kOmniboxSuggestionAnswerMigration)}, - {"omnibox-zero-suggest-prefetch-debouncing", flag_descriptions::kOmniboxZeroSuggestPrefetchDebouncingName, flag_descriptions::kOmniboxZeroSuggestPrefetchDebouncingDescription, @@ -7049,6 +6490,12 @@ const FeatureEntry kFeatureEntries[] = { kContextualSuggestionsAblateOthersWhenPresentVariations, "ContextualSuggestionsAblateOthersWhenPresent")}, + {"enable-force-download-to-onedrive", + flag_descriptions::kEnableForceDownloadToOneDriveName, + flag_descriptions::kEnableForceDownloadToOneDriveDescription, kOsDesktop, + FEATURE_VALUE_TYPE( + enterprise_data_protection::kEnableForceDownloadToOneDrive)}, + {"omnibox-contextual-search-on-focus-suggestions", flag_descriptions::kOmniboxContextualSearchOnFocusSuggestionsName, flag_descriptions::kOmniboxContextualSearchOnFocusSuggestionsDescription, @@ -7195,12 +6642,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(omnibox::kAimUsePecApi)}, #if BUILDFLAG(IS_ANDROID) - {"animate-suggestions-list-appearance", - flag_descriptions::kAnimateSuggestionsListAppearanceName, - flag_descriptions::kAnimateSuggestionsListAppearanceDescription, - kOsAndroid, - FEATURE_VALUE_TYPE(omnibox::kAnimateSuggestionsListAppearance)}, - {"omnibox-asynchronous-view-inflation", flag_descriptions::kOmniboxAsyncViewInflationName, flag_descriptions::kOmniboxAsyncViewInflationDescription, kOsAndroid, @@ -7240,13 +6681,6 @@ const FeatureEntry kFeatureEntries[] = { kOmniboxDiagnosticsAndroidVaiants, "Diagnostics")}, - {"omnibox-mobile-parity-update-v2", - flag_descriptions::kOmniboxMobileParityUpdateV2Name, - flag_descriptions::kOmniboxMobileParityUpdateV2Description, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kOmniboxMobileParityUpdateV2, - kOmniboxMobileParityV2Variants, - "OmniboxMobileParityUpdateV2")}, - {"omnibox-improvement-for-lff", flag_descriptions::kOmniboxImprovementForLFFName, flag_descriptions::kOmniboxImprovementForLFFDescription, kOsAndroid, @@ -7510,30 +6944,17 @@ const FeatureEntry kFeatureEntries[] = { "MBIMode")}, #if !BUILDFLAG(IS_ANDROID) - {"tabsearch-toolbar-button", - flag_descriptions::kLaunchedTabSearchToolbarName, - flag_descriptions::kLaunchedTabSearchToolbarDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kLaunchedTabSearchToolbarButton)}, - - {flag_descriptions::kTabstripComboButtonFlagId, - flag_descriptions::kTabstripComboButtonName, - flag_descriptions::kTabstripComboButtonDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(features::kTabstripComboButton, - kTabstripComboButtonVariations, - "TabstripComboButton")}, {"tab-groups-focusing", flag_descriptions::kTabGroupsFocusingName, flag_descriptions::kTabGroupsFocusingDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kTabGroupsFocusing)}, -#endif + FEATURE_WITH_PARAMS_VALUE_TYPE(features::kTabGroupsFocusing, + kTabGroupsFocusingVariations, + "TabGroupsFocusing")}, + + {"vertical-tabs", flag_descriptions::kVerticalTabsName, + flag_descriptions::kVerticalTabsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(tabs::kVerticalTabs)}, -#if !BUILDFLAG(IS_ANDROID) - {"side-panel-relative-alignment", - flag_descriptions::kSidePanelRelativeAlignmentName, - flag_descriptions::kSidePanelRelativeAlignmentDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(features::kToolbarHeightSidePanel, - kSidePanelRelativeAlignmentVariants, - "SidePanelRelativeAlignment")}, #endif #if BUILDFLAG(IS_ANDROID) @@ -7552,6 +6973,13 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kByDateHistoryInSidePanel)}, #endif // !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(IS_MAC) + {"ca-display-link-in-browser", + flag_descriptions::kCADisplayLinkInBrowserName, + flag_descriptions::kCADisplayLinkInBrowserDescription, kOsMac, + FEATURE_VALUE_TYPE(display::features::kCADisplayLinkInBrowser)}, +#endif + #if BUILDFLAG(IS_ANDROID) {"enable-share-custom-actions-in-cct", flag_descriptions::kShareCustomActionsInCCTName, @@ -7648,11 +7076,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kNtpDriveModuleSegmentationDescription, kOsDesktop, FEATURE_VALUE_TYPE(ntp_features::kNtpDriveModuleSegmentation)}, - {"ntp-drive-module-show-six-files", - flag_descriptions::kNtpDriveModuleShowSixFilesName, - flag_descriptions::kNtpDriveModuleShowSixFilesDescription, kOsDesktop, - FEATURE_VALUE_TYPE(ntp_features::kNtpDriveModuleShowSixFiles)}, - #if !defined(OFFICIAL_BUILD) {"ntp-dummy-modules", flag_descriptions::kNtpDummyModulesName, flag_descriptions::kNtpDummyModulesDescription, kOsDesktop, @@ -7695,14 +7118,6 @@ const FeatureEntry kFeatureEntries[] = { kNtpMiddleSlotPromoDismissalVariations, "DesktopNtpModules")}, - {"ntp-mobile-promo", flag_descriptions::kNtpMobilePromoName, - flag_descriptions::kNtpMobilePromoDescription, kOsDesktop, - FEATURE_VALUE_TYPE(ntp_features::kNtpMobilePromo)}, - - {"force-ntp-mobile-promo", flag_descriptions::kForceNtpMobilePromoName, - flag_descriptions::kForceNtpMobilePromoDescription, kOsDesktop, - SINGLE_VALUE_TYPE(switches::kForceNtpMobilePromo)}, - {"ntp-module-sign-in-requirement", flag_descriptions::kNtpModuleSignInRequirementName, flag_descriptions::kNtpModuleSignInRequirementDescription, kOsDesktop, @@ -7718,23 +7133,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kNtpModulesDragAndDropDescription, kOsDesktop, FEATURE_VALUE_TYPE(ntp_features::kNtpModulesDragAndDrop)}, - {"ntp-most-relevant-tab-resumption-module", - flag_descriptions::kNtpMostRelevantTabResumptionModuleName, - flag_descriptions::kNtpMostRelevantTabResumptionModuleDescription, - kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE( - ntp_features::kNtpMostRelevantTabResumptionModule, - kNtpMostRelevantTabResumptionModuleVariations, - "NtpMostRelevantTabResumptionModules")}, - - {"ntp-most-relevant-tab-resumption-module-fallback-to-host", - flag_descriptions::kNtpMostRelevantTabResumptionModuleFallbackToHostName, - flag_descriptions:: - kNtpMostRelevantTabResumptionModuleFallbackToHostDescription, - kOsDesktop, - FEATURE_VALUE_TYPE( - ntp_features::kNtpMostRelevantTabResumptionModuleFallbackToHost)}, - {"ntp-ogb-async-bar-parts", flag_descriptions::kNtpOneGoogleBarAsyncBarPartsName, flag_descriptions::kNtpOneGoogleBarAsyncBarPartsDescription, kOsDesktop, @@ -7859,14 +7257,6 @@ const FeatureEntry kFeatureEntries[] = { "")}, #endif - { - "zero-copy-tab-capture", - flag_descriptions::kEnableZeroCopyTabCaptureName, - flag_descriptions::kEnableZeroCopyTabCaptureDescription, - kOsMac | kOsWin | kOsCrOS, - FEATURE_VALUE_TYPE(blink::features::kZeroCopyTabCapture), - }, - {"exclude-pip-from-screen-capture", flag_descriptions::kExcludePipFromScreenCaptureName, flag_descriptions::kExcludePipFromScreenCaptureDescription, kOsAll, @@ -7899,12 +7289,18 @@ const FeatureEntry kFeatureEntries[] = { #if BUILDFLAG(ENABLE_PDF_SAVE_TO_DRIVE) {"pdf-save-to-drive", flag_descriptions::kPdfSaveToDriveName, - flag_descriptions::kPdfSaveToDriveDescription, kOsMac | kOsWin | kOsLinux, + flag_descriptions::kPdfSaveToDriveDescription, kOsDesktop, FEATURE_VALUE_TYPE(chrome_pdf::features::kPdfSaveToDrive)}, #endif // BUILDFLAG(ENABLE_PDF_SAVE_TO_DRIVE) #endif // BUILDFLAG(ENABLE_PDF) +#if BUILDFLAG(IS_ANDROID) + {"inline-pdf-v2", flag_descriptions::kInlinePdfV2Name, + flag_descriptions::kInlinePdfV2Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kInlinePdfV2)}, +#endif // BUILDFLAG(IS_ANDROID) + #if BUILDFLAG(ENABLE_PRINTING) #if BUILDFLAG(IS_LINUX) {"cups-ipp-printing-backend", @@ -7964,12 +7360,6 @@ const FeatureEntry kFeatureEntries[] = { kMagicStackAndroidVariations, "MagicStackAndroid")}, - {"enable-educational-tip-module", - flag_descriptions::kEducationalTipModuleName, - flag_descriptions::kEducationalTipModuleDescription, kOsAndroid, - FEATURE_VALUE_TYPE( - segmentation_platform::features::kEducationalTipModule)}, - {"enable-educational-tip-default-browser-promo-card", flag_descriptions::kEducationalTipDefaultBrowserPromoCardName, flag_descriptions::kEducationalTipDefaultBrowserPromoCardDescription, @@ -7987,13 +7377,6 @@ const FeatureEntry kFeatureEntries[] = { kEphemeralCardRankerCardOverrideOptions, "EducationalTipModule")}, - {"maylaunchurl-uses-separate-storage-partition", - flag_descriptions::kMayLaunchUrlUsesSeparateStoragePartitionName, - flag_descriptions::kMayLaunchUrlUsesSeparateStoragePartitionDescription, - kOsAndroid, - FEATURE_VALUE_TYPE( - chrome::android::kMayLaunchUrlUsesSeparateStoragePartition)}, - {"enable-segmentation-platform-android-home-module-ranker-v2", flag_descriptions::kSegmentationPlatformAndroidHomeModuleRankerV2Name, flag_descriptions:: @@ -8092,6 +7475,13 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_ANDROID) + {"gemini-antiscam-protections-metrics-only", + flag_descriptions::kGeminiAntiscamProtectionsMetricsOnlyName, + flag_descriptions::kGeminiAntiscamProtectionsMetricsOnlyDescription, + kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux, + FEATURE_VALUE_TYPE( + safe_browsing::kGeminiAntiscamProtectionForMetricsCollection)}, + {"report-notification-content-detection-data", flag_descriptions::kReportNotificationContentDetectionDataName, flag_descriptions::kReportNotificationContentDetectionDataDescription, @@ -8138,6 +7528,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kEnableMediaLinkHelpersDescription, kOsDesktop, FEATURE_VALUE_TYPE(media::kMediaLinkHelpers)}, + {"enable-headless-live-caption-early-start", + flag_descriptions::kHeadlessCaptionEarlyStartName, + flag_descriptions::kHeadlessCaptionEarlyStartDescription, kOsDesktop, + FEATURE_VALUE_TYPE(media::kHeadlessCaptionEarlyStart)}, + #if BUILDFLAG(IS_CHROMEOS) {"enable-chromeos-live-translate", flag_descriptions::kEnableCrOSLiveTranslateName, @@ -8284,12 +7679,16 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kCCTResetTimeoutEnabled, kCCTResetTimeoutVariations, "CCTResetTimeoutVariations")}, + + {"cct-reset-timeout-allowed", + flag_descriptions::kCCTResetTimeoutAllowedName, + flag_descriptions::kCCTResetTimeoutAllowedDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kCCTResetTimeoutAllowed, + kCCTResetTimeoutVariations, + "CCTResetTimeoutVariations")}, #endif #if BUILDFLAG(IS_CHROMEOS) - {"allow-dsp-based-aec", flag_descriptions::kCrOSDspBasedAecAllowedName, - flag_descriptions::kCrOSDspBasedAecAllowedDescription, kOsCrOS, - FEATURE_VALUE_TYPE(media::kCrOSDspBasedAecAllowed)}, {"allow-dsp-based-ns", flag_descriptions::kCrOSDspBasedNsAllowedName, flag_descriptions::kCrOSDspBasedNsAllowedDescription, kOsCrOS, FEATURE_VALUE_TYPE(media::kCrOSDspBasedNsAllowed)}, @@ -8682,12 +8081,6 @@ const FeatureEntry kFeatureEntries[] = { kOsCrOS, FEATURE_VALUE_TYPE(features::kAccessibilityMagnifierFollowsChromeVox)}, - {"enable-accessibility-manifest-v3-accessibility-common", - flag_descriptions::kAccessibilityManifestV3AccessibilityCommonName, - flag_descriptions::kAccessibilityManifestV3AccessibilityCommonDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(features::kAccessibilityManifestV3AccessibilityCommon)}, - {"enable-accessibility-manifest-v3-chromevox", flag_descriptions::kAccessibilityManifestV3ChromeVoxName, flag_descriptions::kAccessibilityManifestV3ChromeVoxDescription, kOsCrOS, @@ -8703,12 +8096,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAccessibilityManifestV3GoogleTtsDescription, kOsCrOS, FEATURE_VALUE_TYPE(::features::kAccessibilityManifestV3GoogleTts)}, - {"enable-accessibility-manifest-v3-select-to-speak", - flag_descriptions::kAccessibilityManifestV3SelectToSpeakName, - flag_descriptions::kAccessibilityManifestV3SelectToSpeakDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(features::kAccessibilityManifestV3SelectToSpeak)}, - {"enable-accessibility-manifest-v3-switch-access", flag_descriptions::kAccessibilityManifestV3SwitchAccessName, flag_descriptions::kAccessibilityManifestV3SwitchAccessDescription, @@ -8726,10 +8113,6 @@ const FeatureEntry kFeatureEntries[] = { kOsCrOS, FEATURE_VALUE_TYPE(features::kAccessibilityCaptionsOnBrailleDisplay)}, - {"event-based-log-upload", flag_descriptions::kEventBasedLogUpload, - flag_descriptions::kEventBasedLogUploadDescription, kOsCrOS, - FEATURE_VALUE_TYPE(features::kEventBasedLogUpload)}, - #endif // BUILDFLAG(IS_CHROMEOS) {"enable-fenced-frames-developer-mode", @@ -8767,14 +8150,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(ash::features::kGesturePropertiesDBusService)}, #endif // BUILDFLAG(IS_CHROMEOS) -#if !BUILDFLAG(IS_CHROMEOS) - {"global-media-controls-updated-ui", - flag_descriptions::kGlobalMediaControlsUpdatedUIName, - flag_descriptions::kGlobalMediaControlsUpdatedUIDescription, - kOsLinux | kOsMac | kOsWin, - FEATURE_VALUE_TYPE(media::kGlobalMediaControlsUpdatedUI)}, -#endif // !BUILDFLAG(IS_CHROMEOS) - #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) {"enable-network-service-sandbox", flag_descriptions::kEnableNetworkServiceSandboxName, @@ -8924,9 +8299,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kHelpAppHomePageAppArticlesName, flag_descriptions::kHelpAppHomePageAppArticlesDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kHelpAppHomePageAppArticles)}, - {"help-app-launcher-search", flag_descriptions::kHelpAppLauncherSearchName, - flag_descriptions::kHelpAppLauncherSearchDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kHelpAppLauncherSearch)}, {"help-app-onboarding-revamp", flag_descriptions::kHelpAppOnboardingRevampName, flag_descriptions::kHelpAppOnboardingRevampDescription, kOsCrOS, @@ -8938,9 +8310,6 @@ const FeatureEntry kFeatureEntries[] = { kOsCrOS, FEATURE_VALUE_TYPE( ash::features::kHelpAppOpensInsteadOfReleaseNotesNotification)}, - {"media-app-pdf-mahi", flag_descriptions::kMediaAppPdfMahiName, - flag_descriptions::kMediaAppPdfMahiDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kMediaAppPdfMahi)}, {"on-device-app-controls", flag_descriptions::kOnDeviceAppControlsName, flag_descriptions::kOnDeviceAppControlsDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kForceOnDeviceAppControlsForAllRegions)}, @@ -9098,13 +8467,6 @@ const FeatureEntry kFeatureEntries[] = { kOsMac | kOsWin | kOsLinux | kOsAndroid, FEATURE_VALUE_TYPE(blink::features::kGeolocationElement)}, - {"permission-promise-lifetime-modulation", - flag_descriptions::kPermissionPromiseLifetimeModulationName, - flag_descriptions::kPermissionPromiseLifetimeModulationDescription, - kOsDesktop, - FEATURE_VALUE_TYPE( - permissions::features::kPermissionPromiseLifetimeModulation)}, - {"left-hand-side-activity-indicators", flag_descriptions::kLeftHandSideActivityIndicatorsName, flag_descriptions::kLeftHandSideActivityIndicatorsDescription, kOsDesktop, @@ -9171,10 +8533,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kLauncherLocalImageSearchIcaName, flag_descriptions::kLauncherLocalImageSearchIcaDescription, kOsCrOS, FEATURE_VALUE_TYPE(search_features::kLauncherImageSearchIca)}, - {"launcher-key-shortcut-in-best-match", - flag_descriptions::kLauncherKeyShortcutInBestMatchName, - flag_descriptions::kLauncherKeyShortcutInBestMatchDescription, kOsCrOS, - FEATURE_VALUE_TYPE(search_features::kLauncherKeyShortcutInBestMatch)}, {"quick-app-access-test-ui", flag_descriptions::kQuickAppAccessTestUIName, flag_descriptions::kQuickAppAccessTestUIDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kQuickAppAccessTestUI)}, @@ -9345,6 +8703,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kFedCmIdPRegistrationDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kFedCmIdPRegistration)}, + {"fedcm-in-authenticator", flag_descriptions::kFedCmInAuthenticatorName, + flag_descriptions::kFedCmInAuthenticatorDescription, kOsAll, + FEATURE_VALUE_TYPE(device::kFedCmInAuthenticator)}, + {"fedcm-lightweight-mode", flag_descriptions::kFedCmLightweightModeName, flag_descriptions::kFedCmLightweightModeDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kFedCmLightweightMode)}, @@ -9493,6 +8855,12 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kPrerenderUntilScriptDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kPrerenderUntilScript)}, + {"prerender-activation-by-form-submission", + flag_descriptions::kPrerenderActivationByFormSubmissionName, + flag_descriptions::kPrerenderActivationByFormSubmissiontDescription, + kOsAll, + FEATURE_VALUE_TYPE(blink::features::kPrerenderActivationByFormSubmission)}, + #if BUILDFLAG(IS_CHROMEOS) {"enable-phone-hub-call-notification", flag_descriptions::kPhoneHubCallNotificationName, @@ -9782,6 +9150,11 @@ const FeatureEntry kFeatureEntries[] = { // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_ANDROID) + {"auto-doc-pip-permission-prompt-android", + flag_descriptions::kAutoDocPiPPermissionPromptAndroidName, + flag_descriptions::kAutoDocPiPPermissionPromptAndroidDescription, + kOsAndroid, FEATURE_VALUE_TYPE(media::kAutoDocPiPPermissionPromptAndroid)}, + {"auto-picture-in-picture-android", flag_descriptions::kAutoPictureInPictureAndroidName, flag_descriptions::kAutoPictureInPictureAndroidDescription, kOsAndroid, @@ -9923,15 +9296,6 @@ const FeatureEntry kFeatureEntries[] = { kIsolateSandboxedIframesGroupingVariations, "IsolateSandboxedIframes" /* trial name */)}, - {"reduce-accept-language", flag_descriptions::kReduceAcceptLanguageName, - flag_descriptions::kReduceAcceptLanguageDescription, kOsAll, - FEATURE_VALUE_TYPE(network::features::kReduceAcceptLanguage)}, - - {"reduce-accept-language-http", - flag_descriptions::kReduceAcceptLanguageHTTPName, - flag_descriptions::kReduceAcceptLanguageHTTPDescription, kOsAll, - FEATURE_VALUE_TYPE(network::features::kReduceAcceptLanguageHTTP)}, - {"reduce-transfer-size-updated-ipc", flag_descriptions::kReduceTransferSizeUpdatedIPCName, flag_descriptions::kReduceTransferSizeUpdatedIPCDescription, kOsAll, @@ -10098,12 +9462,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kCssGamutMappingDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kBakedGamutMapping)}, - {"clipboard-maximum-age", flag_descriptions::kClipboardMaximumAgeName, - flag_descriptions::kClipboardMaximumAgeDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(kClipboardMaximumAge, - kClipboardMaximumAgeVariations, - "ClipboardMaximumAge")}, - #if BUILDFLAG(IS_CHROMEOS) {"enable-media-dynamic-cgroup", flag_descriptions::kMediaDynamicCgroupName, flag_descriptions::kMediaDynamicCgroupDescription, kOsCrOS, @@ -10120,14 +9478,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kRendererSideContentDecodingDescription, kOsAll, FEATURE_VALUE_TYPE(network::features::kRendererSideContentDecoding)}, - {"device-bound-session-access-observer-shared-remote", - flag_descriptions::kDeviceBoundSessionAccessObserverSharedRemoteName, - flag_descriptions:: - kDeviceBoundSessionAccessObserverSharedRemoteDescription, - kOsAll, - FEATURE_VALUE_TYPE( - network::features::kDeviceBoundSessionAccessObserverSharedRemote)}, - #if BUILDFLAG(IS_ANDROID) {"external-navigation-debug-logs", flag_descriptions::kExternalNavigationDebugLogsName, @@ -10189,10 +9539,12 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kTabStripDensityChangeAndroidDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kTabStripDensityChangeAndroid)}, - {"tab-strip-incognito-migration", - flag_descriptions::kTabStripIncognitoMigrationName, - flag_descriptions::kTabStripIncognitoMigrationDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kTabStripIncognitoMigration)}, + {"tab-strip-empty-space-context-menu-android", + flag_descriptions::kTabStripEmptySpaceContextMenuAndroidName, + flag_descriptions::kTabStripEmptySpaceContextMenuAndroidDescription, + kOsAndroid, + FEATURE_VALUE_TYPE( + chrome::android::kTabStripEmptySpaceContextMenuAndroid)}, {"tab-switcher-group-suggestions-android", flag_descriptions::kTabSwitcherGroupSuggestionsAndroidName, @@ -10276,10 +9628,6 @@ const FeatureEntry kFeatureEntries[] = { MULTI_VALUE_TYPE(kPrintingPpdChannelChoices)}, #endif - {"power-bookmark-backend", flag_descriptions::kPowerBookmarkBackendName, - flag_descriptions::kPowerBookmarkBackendDescription, kOsAll, - FEATURE_VALUE_TYPE(power_bookmarks::kPowerBookmarkBackend)}, - #if BUILDFLAG(IS_CHROMEOS) {"enable-eol-notification-reset-dismissed-prefs", flag_descriptions::kEolResetDismissedPrefsName, @@ -10439,19 +9787,6 @@ const FeatureEntry kFeatureEntries[] = { {"read-aloud", flag_descriptions::kReadAloudName, flag_descriptions::kReadAloudDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kReadAloud)}, - - {"read-aloud-background-playback", - flag_descriptions::kReadAloudBackgroundPlaybackName, - flag_descriptions::kReadAloudBackgroundPlaybackDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kReadAloudBackgroundPlayback)}, - - {"read-aloud-in-cct", flag_descriptions::kReadAloudInCCTName, - flag_descriptions::kReadAloudInCCTDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kReadAloudInOverflowMenuInCCT)}, - - {"read-aloud-tap-to-seek", flag_descriptions::kReadAloudTapToSeekName, - flag_descriptions::kReadAloudTapToSeekDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kReadAloudTapToSeek)}, #endif {"rcaps-dynamic-profile-country", @@ -10645,9 +9980,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kBatteryChargeLimitDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kBatteryChargeLimit)}, - {"mahi", flag_descriptions::kMahiName, flag_descriptions::kMahiDescription, - kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kMahi)}, - {"mahi-debugging", flag_descriptions::kMahiDebuggingName, flag_descriptions::kMahiDebuggingDescription, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kMahiDebugging)}, @@ -10689,12 +10021,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_CHROMEOS) #if !BUILDFLAG(IS_ANDROID) - {"password-manual-fallback-available", - flag_descriptions::kPasswordManualFallbackAvailableName, - flag_descriptions::kPasswordManualFallbackAvailableDescription, kOsDesktop, - FEATURE_VALUE_TYPE( - password_manager::features::kPasswordManualFallbackAvailable)}, - {"save-passwords-contextual-ui", flag_descriptions::kSavePasswordsContextualUiName, flag_descriptions::kSavePasswordsContextualUiDescription, kOsDesktop, @@ -10753,14 +10079,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidZoomIndicatorDescription, kOsAndroid, FEATURE_VALUE_TYPE(browser_ui::kAndroidZoomIndicator)}, - {"android-history-pane-favicons", - flag_descriptions::kAndroidHistoryPaneFaviconsName, - flag_descriptions::kAndroidHistoryPaneFaviconsDescription, kOsAndroid, - FEATURE_VALUE_TYPE(ui::kAndroidHistoryPaneFavicons)}, - {"tab-bottom-sheet", flag_descriptions::kTabBottomSheetName, flag_descriptions::kTabBottomSheetDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kTabBottomSheet)}, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kTabBottomSheet, + kTabBottomSheetVariations, + "TabBottomSheetVariations")}, {"android-tips-notifications", flag_descriptions::kAndroidTipsNotificationsName, @@ -10770,6 +10093,16 @@ const FeatureEntry kFeatureEntries[] = { kAndroidTipsNotificationsVariations, "AndroidTipsNotifications")}, + {"android-tips-notifications-v2", + flag_descriptions::kAndroidTipsNotificationsV2Name, + flag_descriptions::kAndroidTipsNotificationsV2Description, kOsAndroid, + FEATURE_VALUE_TYPE( + segmentation_platform::features::kAndroidTipsNotificationsV2)}, + + {"chrome-finds", flag_descriptions::kChromeFindsName, + flag_descriptions::kChromeFindsDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kChromeFinds)}, + {"history-pane-android", flag_descriptions::kHistoryPaneAndroidName, flag_descriptions::kHistoryPaneAndroidDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kHistoryPaneAndroid)}, @@ -10833,13 +10166,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAutofillEnableCardBenefitsSyncDescription, kOsAll, FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableCardBenefitsSync)}, -#if BUILDFLAG(IS_MAC) - {"reduce-ip-address-change-notification", - flag_descriptions::kReduceIPAddressChangeNotificationName, - flag_descriptions::kReduceIPAddressChangeNotificationDescription, kOsMac, - FEATURE_VALUE_TYPE(net::features::kReduceIPAddressChangeNotification)}, -#endif // BUILDFLAG(IS_MAC) - {"enable-standard-device-bound-session-credentials", flag_descriptions::kEnableStandardBoundSessionCredentialsName, flag_descriptions::kEnableStandardBoundSessionCredentialsDescription, @@ -10867,6 +10193,20 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kEnableStandardBoundSessionDevToolsDebuggingDescription, kOsMac | kOsWin | kOsLinux, FEATURE_VALUE_TYPE(features::kDeviceBoundSessionsDevTools)}, + {"enable-standard-device-bound-session-google", + flag_descriptions::kEnableStandardBoundSessionsGoogleName, + flag_descriptions::kEnableStandardBoundSessionsGoogleDescription, + kOsMac | kOsWin | kOsLinux, + FEATURE_VALUE_TYPE(net::features::kDeviceBoundSessionsForRestrictedSites)}, + {"enable-standard-device-bound-session-google-experiment-id", + flag_descriptions::kEnableStandardBoundSessionsGoogleExperimentIdName, + flag_descriptions:: + kEnableStandardBoundSessionsGoogleExperimentIdDescription, + kOsMac | kOsWin | kOsLinux, + FEATURE_WITH_PARAMS_VALUE_TYPE( + net::features::kDeviceBoundSessionsForRestrictedSitesExperimentId, + kDeviceBoundSessionsForRestrictedSitesExperimentIdVariations, + "DeviceBoundSessionsForRestrictedSitesExperimentIdVariations")}, {"responsive-iframes", flag_descriptions::kResponsiveIframesName, flag_descriptions::kResponsiveIframesDescription, kOsAll, @@ -10886,13 +10226,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( password_manager::features::kShowSuggestionsOnAutofocus)}, -#if BUILDFLAG(IS_ANDROID) - {"android-browser-controls-in-viz", - flag_descriptions::kAndroidBrowserControlsInVizName, - flag_descriptions::kAndroidBrowserControlsInVizDescription, kOsAndroid, - FEATURE_VALUE_TYPE(features::kAndroidBrowserControlsInViz)}, -#endif - #if BUILDFLAG(IS_ANDROID) {"android-desktop-density", flag_descriptions::kAndroidDesktopDensityName, flag_descriptions::kAndroidDesktopDensityDescription, kOsAndroid, @@ -10915,11 +10248,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(password_manager::features:: kWebAuthnUsePasskeyFromAnotherDeviceInContextMenu)}, #endif - {"web-authentication-passkey-upgrade", - flag_descriptions::kWebAuthnPasskeyUpgradeName, - flag_descriptions::kWebAuthnPasskeyUpgradeDescription, - kOsDesktop | kOsAndroid, - FEATURE_VALUE_TYPE(device::kWebAuthnPasskeyUpgrade)}, #if BUILDFLAG(IS_CHROMEOS) {"conch", flag_descriptions::kConchName, @@ -11012,17 +10340,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(autofill::features::kAutofillUnmaskCardRequestTimeout)}, #if !BUILDFLAG(IS_ANDROID) - {"freezing-on-energy-saver", flag_descriptions::kFreezingOnEnergySaverName, - flag_descriptions::kFreezingOnEnergySaverDescription, kOsDesktop, - FEATURE_VALUE_TYPE( - performance_manager::features::kFreezingOnBatterySaver)}, - - {"freezing-on-energy-saver-testing", - flag_descriptions::kFreezingOnEnergySaverTestingName, - flag_descriptions::kFreezingOnEnergySaverTestingDescription, kOsDesktop, - FEATURE_VALUE_TYPE( - performance_manager::features::kFreezingOnBatterySaverForTesting)}, - {"infinite-tabs-freezing", flag_descriptions::kInfiniteTabsFreezingName, flag_descriptions::kInfiniteTabsFreezingDescription, kOsDesktop, FEATURE_VALUE_TYPE(performance_manager::features::kInfiniteTabsFreezing)}, @@ -11181,12 +10498,13 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(permissions::kPermissionsAndroidClapperQuiet)}, #endif // BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_CHROMEOS) - {"exclude-display-in-mirror-mode", - flag_descriptions::kExcludeDisplayInMirrorModeName, - flag_descriptions::kExcludeDisplayInMirrorModeDescription, kOsCrOS, - FEATURE_VALUE_TYPE(display::features::kExcludeDisplayInMirrorMode)}, -#endif // BUILDFLAG(IS_CHROMEOS) + {"permissions-gesture-gated-prompts", + flag_descriptions::kPermissionsGestureGatedPromptsName, + flag_descriptions::kPermissionsGestureGatedPromptsDescription, kOsAll, + FEATURE_WITH_PARAMS_VALUE_TYPE( + permissions::features::kPermissionsGestureGatedPrompts, + kPermissionsGestureGatedPromptsVariations, + "PermissionsGestureGatedPrompts")}, #if BUILDFLAG(IS_ANDROID) {"enable-task-manager-clank", flag_descriptions::kTaskManagerClankName, @@ -11199,12 +10517,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kTaskManagerDesktopRefresh)}, #endif // BUILDFLAG(IS_ANDROID) - {"cert-verification-network-time", - flag_descriptions::kCertVerificationNetworkTimeName, - flag_descriptions::kCertVerificationNetworkTimeDescription, - kOsMac | kOsWin | kOsLinux | kOsAndroid, - FEATURE_VALUE_TYPE(features::kCertVerificationNetworkTime)}, - #if !BUILDFLAG(IS_ANDROID) {"enable-lens-overlay-translate-button", flag_descriptions::kLensOverlayTranslateButtonName, @@ -11412,7 +10724,7 @@ const FeatureEntry kFeatureEntries[] = { #if BUILDFLAG(ENABLE_GLIC) {"glic", flag_descriptions::kGlicName, flag_descriptions::kGlicDescription, - kOsDesktop, FEATURE_VALUE_TYPE(features::kGlic)}, + kOsAll, FEATURE_VALUE_TYPE(features::kGlic)}, {"glic-z-order-changes", flag_descriptions::kGlicZOrderChangesName, flag_descriptions::kGlicZOrderChangesDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicZOrderChanges)}, @@ -11437,6 +10749,9 @@ const FeatureEntry kFeatureEntries[] = { {"glic-panel-reset-on-start", flag_descriptions::kGlicPanelResetOnStartName, flag_descriptions::kGlicPanelResetOnStartDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicPanelResetOnStart)}, + {"glic-tab-restoration", flag_descriptions::kGlicTabRestorationName, + flag_descriptions::kGlicTabRestorationDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicTabRestoration)}, {"glic-panel-set-position-on-drag", flag_descriptions::kGlicPanelSetPositionOnDragName, flag_descriptions::kGlicPanelSetPositionOnDragDescription, kOsDesktop, @@ -11511,6 +10826,9 @@ const FeatureEntry kFeatureEntries[] = { {"glic-mi-tab-context-menu", flag_descriptions::kGlicMITabContextMenuName, flag_descriptions::kGlicMITabContextMenuDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicMITabContextMenu)}, + {"glic-share-image", flag_descriptions::kGlicShareImageName, + flag_descriptions::kGlicShareImageDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicShareImage)}, {"glic-trust-first-onboarding", flag_descriptions::kGlicTrustFirstOnboardingName, flag_descriptions::kGlicTrustFirstOnboardingDescription, kOsDesktop, @@ -11521,6 +10839,24 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kGlicDefaultTabContextSettingName, flag_descriptions::kGlicDefaultTabContextSettingDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicDefaultTabContextSetting)}, + + {"glic-reset-mi-enablement-by-tier", + flag_descriptions::kGlicResetMultiInstanceEnabledByTierName, + flag_descriptions::kGlicResetMultiInstanceEnabledByTierDescription, + kOsDesktop, + SINGLE_VALUE_TYPE(switches::kGlicResetMultiInstanceEnabledByTier)}, + + {"glic-set-g1-for-mi", + flag_descriptions::kGlicForceG1StatusForMultiInstanceName, + flag_descriptions::kGlicForceG1StatusForMultiInstanceDescription, + kOsDesktop, MULTI_VALUE_TYPE(kGlicSetG1ForMultiInstance)}, + + {"glic-guest-url-presets", flag_descriptions::kGlicGuestUrlPresetsName, + flag_descriptions::kGlicGuestUrlPresetsDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicGuestUrlPresets, + kGlicGuestUrlPresetTypes, + "GlicGuestUrlPresets")}, + #if BUILDFLAG(IS_CHROMEOS) {"glic-use-non-client", flag_descriptions::kGlicUseNonClientName, flag_descriptions::kGlicUseNonClientDescription, kOsCrOS, @@ -11543,12 +10879,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAutofillEnableSaveAndFillDescription, kOsDesktop, FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableSaveAndFill)}, - {"autofill-improved-labels", flag_descriptions::kAutofillImprovedLabelsName, - flag_descriptions::kAutofillImprovedLabelsDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(autofill::features::kAutofillImprovedLabels, - kAutofillImprovedLabelsVariations, - "AutofillImprovedLabels")}, - #if BUILDFLAG(IS_ANDROID) {"android-appearance-settings", flag_descriptions::kAndroidAppearanceSettingsName, @@ -11566,6 +10896,14 @@ const FeatureEntry kFeatureEntries[] = { chrome::android::kAndroidBookmarkBarFastFollow, kAndroidBookmarkBarFastFollowVariations, "AndroidBookmarkBarFastFollow")}, + + {"default-browser-promo-entry-point", + flag_descriptions::kDefaultBrowserPromoEntryPointName, + flag_descriptions::kDefaultBrowserPromoEntryPointDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE( + chrome::android::kDefaultBrowserPromoEntryPoint, + kDefaultBrowserPromoEntryPointVariations, + "DefaultBrowserPromoEntryPoint")}, #endif // BUILDFLAG(IS_ANDROID) {"happy-eyeballs-v3", flag_descriptions::kHappyEyeballsV3Name, @@ -11712,11 +11050,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // !BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) - {"improved-password-change-service", - flag_descriptions::kImprovedPasswordChangeServiceName, - flag_descriptions::kImprovedPasswordChangeServiceDescription, kOsDesktop, - FEATURE_VALUE_TYPE( - password_manager::features::kImprovedPasswordChangeService)}, {"mark-all-credentials-as-leaked", flag_descriptions::kMarkAllCredentialsAsLeakedName, flag_descriptions::kMarkAllCredentialsAsLeakedDescription, kOsDesktop, @@ -11795,6 +11128,19 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(browsing_data::features::kDbdRevampDesktop)}, #endif // !BUILDFLAG(IS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) + {"default-browser-changed-os-notification", + flag_descriptions::kDefaultBrowserChangedOsNotificationName, + flag_descriptions::kDefaultBrowserChangedOsNotificationDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(default_browser::kDefaultBrowserChangedOsNotification)}, + + {"default-browser-framework", + flag_descriptions::kDefaultBrowserFrameworkName, + flag_descriptions::kDefaultBrowserFrameworkDescription, kOsDesktop, + FEATURE_VALUE_TYPE(default_browser::kDefaultBrowserFramework)}, +#endif // !BUILDFLAG(IS_ANDROID) && ! BUILDFLAG(IS_CHROMEOS) + {"privacy-sandbox-ad-topics-content-parity", flag_descriptions::kPrivacySandboxAdTopicsContentParityName, flag_descriptions::kPrivacySandboxAdTopicsContentParityDescription, kOsAll, @@ -11872,14 +11218,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( feature_engagement::kIPHAutofillCreditCardBenefitFeature)}, -#if BUILDFLAG(IS_CHROMEOS) - {"allow-user-installed-chrome-apps", - flag_descriptions::kAllowUserInstalledChromeAppsName, - flag_descriptions::kAllowUserInstalledChromeAppsDescription, kOsCrOS, - FEATURE_VALUE_TYPE( - apps::chrome_app_deprecation::kAllowUserInstalledChromeApps)}, -#endif // BUILDFLAG(IS_CHROMEOS) - #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) {"chrome-web-store-navigation-throttle", flag_descriptions::kChromeWebStoreNavigationThrottleName, @@ -11908,6 +11246,23 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSupervisedUserBlockInterstitialV3Description, kOsAll, FEATURE_VALUE_TYPE(supervised_user::kSupervisedUserBlockInterstitialV3)}, + {"supervised-user-merge-device-parental-controls-and-family-link-prefs", + flag_descriptions:: + kSupervisedUserMergeDeviceParentalControlsAndFamilyLinkPrefsName, + flag_descriptions:: + kSupervisedUserMergeDeviceParentalControlsAndFamilyLinkPrefsDescription, + kOsAll, + FEATURE_VALUE_TYPE( + supervised_user:: + kSupervisedUserMergeDeviceParentalControlsAndFamilyLinkPrefs)}, + + {"supervised-user-use-url-filtering-service", + flag_descriptions::kSupervisedUserUseUrlFilteringServiceName, + flag_descriptions::kSupervisedUserUseUrlFilteringServiceDescription, + kOsAll, + FEATURE_VALUE_TYPE( + supervised_user::kSupervisedUserUseUrlFilteringService)}, + #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) {"autofill-enable-amount-extraction-testing", @@ -11980,13 +11335,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( network::features::kLocalNetworkAccessChecksSplitPermissions)}, -#if BUILDFLAG(IS_CHROMEOS) - {"notebook-lm-app-preinstall", - flag_descriptions::kNotebookLmAppPreinstallName, - flag_descriptions::kNotebookLmAppPreinstallDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kNotebookLmAppPreinstall)}, -#endif // BUILDFLAG(IS_CHROMEOS) - #if !BUILDFLAG(IS_ANDROID) {"tab-capture-infobar-links", flag_descriptions::kTabCaptureInfobarLinksName, @@ -12126,10 +11474,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidAdaptiveFrameRateDescription, kOsAndroid, FEATURE_VALUE_TYPE(features::kUseFrameIntervalDeciderAdaptiveFrameRate)}, - {"instance-switcher-v2", flag_descriptions::kInstanceSwitcherV2Name, - flag_descriptions::kInstanceSwitcherV2Description, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kInstanceSwitcherV2)}, - {"robust-window-management", flag_descriptions::kRobustWindowManagementName, flag_descriptions::kRobustWindowManagementDescription, kOsAndroid, FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kRobustWindowManagement, @@ -12140,7 +11484,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kRobustWindowManagementExperimentalName, flag_descriptions::kRobustWindowManagementExperimentalDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kRobustWindowManagementExperimental)}, + FEATURE_WITH_PARAMS_VALUE_TYPE( + chrome::android::kRobustWindowManagementExperimental, + kRobustWindowManagementExperimentalVariations, + "RobustWindowManagementExperimental")}, #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) @@ -12228,13 +11575,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_CHROMEOS) - {"notebook-lm-app-shelf-pin", flag_descriptions::kNotebookLmAppShelfPinName, - flag_descriptions::kNotebookLmAppShelfPinDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kNotebookLmAppShelfPin)}, - {"notebook-lm-app-shelf-pin-reset", - flag_descriptions::kNotebookLmAppShelfPinResetName, - flag_descriptions::kNotebookLmAppShelfPinResetDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kNotebookLmAppShelfPinReset)}, {"preinstalled-web-app-always-migrate-calculator", flag_descriptions::kPreinstalledWebAppAlwaysMigrateCalculatorName, flag_descriptions::kPreinstalledWebAppAlwaysMigrateCalculatorDescription, @@ -12248,12 +11588,6 @@ const FeatureEntry kFeatureEntries[] = { kOsAndroid | kOsMac | kOsWin, FEATURE_VALUE_TYPE(blink::features::kSecurePaymentConfirmationUxRefresh)}, -#if BUILDFLAG(IS_ANDROID) - {"fill-recovery-password", flag_descriptions::kFillRecoveryPasswordName, - flag_descriptions::kFillRecoveryPasswordDescription, kOsAndroid, - FEATURE_VALUE_TYPE(password_manager::features::kFillRecoveryPassword)}, -#endif // BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) {"android-use-correct-display-work-area", flag_descriptions::kAndroidUseCorrectDisplayWorkAreaName, @@ -12303,21 +11637,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDisableAutofillStrikeSystemDescription, kOsAll, FEATURE_VALUE_TYPE(strike_database::features::kDisableStrikeSystem)}, -#if BUILDFLAG(IS_ANDROID) - {"allow-non-family-link-url-filter-mode", - flag_descriptions::kAllowNonFamilyLinkUrlFilterModeName, - flag_descriptions::kAllowNonFamilyLinkUrlFilterModeDescription, kOsAndroid, - FEATURE_VALUE_TYPE(supervised_user::kAllowNonFamilyLinkUrlFilterMode)}, - - {"propagate-device-content-filters-to-supervised-user", - flag_descriptions::kPropagateDeviceContentFiltersToSupervisedUserName, - flag_descriptions:: - kPropagateDeviceContentFiltersToSupervisedUserDescription, - kOsAndroid, - FEATURE_VALUE_TYPE( - supervised_user::kPropagateDeviceContentFiltersToSupervisedUser)}, -#endif // BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) {"show-tab-list-animations", flag_descriptions::kShowTabListAnimationsName, flag_descriptions::kShowTabListAnimationsDescription, kOsAndroid, @@ -12402,15 +11721,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( autofill::features::kAutofillEnableDownstreamCardAwarenessIph)}, -#if BUILDFLAG(IS_ANDROID) - {"supervised-user-interstitial-without-approvals", - flag_descriptions::kSupervisedUserInterstitialWithoutApprovalsName, - flag_descriptions::kSupervisedUserInterstitialWithoutApprovalsDescription, - kOsAndroid, - FEATURE_VALUE_TYPE( - supervised_user::kSupervisedUserInterstitialWithoutApprovals)}, -#endif // BUILDFLAG(IS_ANDROID) - #if !BUILDFLAG(IS_ANDROID) {"enable-ntp-browser-promos", flag_descriptions::kEnableNtpBrowserPromosName, @@ -12478,6 +11788,15 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(IS_ANDROID) + {"enable-activityless-signin-all-entry-point", + flag_descriptions::kEnableActivitylessSigninAllEntryPointName, + flag_descriptions::kEnableActivitylessSigninAllEntryPointDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(switches::kEnableActivitylessSigninAllEntryPoint)}, + +#endif // BUILDFLAG(IS_ANDROID) + #if BUILDFLAG(IS_ANDROID) {"force-history-opt-in-screen", flag_descriptions::kForceHistoryOptInScreenName, @@ -12538,7 +11857,9 @@ const FeatureEntry kFeatureEntries[] = { #if BUILDFLAG(IS_ANDROID) {"media-indicators-android", flag_descriptions::kMediaIndicatorsAndroidName, flag_descriptions::kMediaIndicatorsAndroidDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kMediaIndicatorsAndroid)}, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kMediaIndicatorsAndroid, + kMediaIndicatorsAndroidVariations, + "MediaIndicatorsAndroid")}, #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) @@ -12556,11 +11877,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) - {"migrate-account-prefs-on-mobile", - flag_descriptions::kMigrateAccountPrefsOnMobileName, - flag_descriptions::kMigrateAccountPrefsOnMobileDescription, kOsAndroid, - FEATURE_VALUE_TYPE(syncer::kMigrateAccountPrefs)}, - {"tab-model-init-fixes", flag_descriptions::kTabModelInitFixesName, flag_descriptions::kTabModelInitFixesDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kTabModelInitFixes)}, @@ -12656,6 +11972,18 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kBrowsingHistoryActorIntegrationM2Description, kOsDesktop, FEATURE_VALUE_TYPE(history::kBrowsingHistoryActorIntegrationM2)}, + + {"browsing-history-actor-integration-M3", + flag_descriptions::kBrowsingHistoryActorIntegrationM3Name, + flag_descriptions::kBrowsingHistoryActorIntegrationM3Description, + kOsDesktop, + FEATURE_VALUE_TYPE(history::kBrowsingHistoryActorIntegrationM3)}, + + {"browsing-history-similar-visits-grouping", + flag_descriptions::kBrowsingHistorySimilarVisitsGroupingName, + flag_descriptions::kBrowsingHistorySimilarVisitsGroupingDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(history::kBrowsingHistorySimilarVisitsGrouping)}, #endif // !BUILDFLAG(IS_ANDROID) {"autofill-manual-testing-data", @@ -12764,15 +12092,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kShowTabGroupsMacSystemMenu)}, #endif // BUILDFLAG(IS_MAC) -#if BUILDFLAG(IS_ANDROID) - {"autofill-update-context-for-web-contents", - flag_descriptions::kAndroidAutofillUpdateContextForWebContentsName, - flag_descriptions::kAndroidAutofillUpdateContextForWebContentsDescription, - kOsAndroid, - FEATURE_VALUE_TYPE( - autofill::features::kAndroidAutofillUpdateContextForWebContents)}, -#endif // BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) {"autofill-android-desktop-keyboard-accessory-revamp", flag_descriptions::kAutofillAndroidDesktopKeyboardAccessoryRevampName, @@ -12807,22 +12126,6 @@ const FeatureEntry kFeatureEntries[] = { blink::features::kControlledFrameWebRequestSecurityInfo)}, #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_ANDROID) - {"enable-minimal-ui-menu-button", - flag_descriptions::kAndroidWebAppMenuButtonName, - flag_descriptions::kAndroidWebAppMenuButtonDescription, kOsAndroid, - FEATURE_VALUE_TYPE(webapps::features::kAndroidWebAppMenuButton)}, -#endif // BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(IS_ANDROID) - {"use-web-app-header-for-standalone-mode", - flag_descriptions::kAndroidWebAppHeaderForStandaloneModeName, - flag_descriptions::kAndroidWebAppHeaderForStandaloneModeDescription, - kOsAndroid, - FEATURE_VALUE_TYPE( - webapps::features::kAndroidWebAppHeaderForStandaloneMode)}, -#endif // BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) {"enable-twa-origin-display", flag_descriptions::kAndroidEnableTWAOriginDisplayName, @@ -12864,12 +12167,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(media::kMediaCodecLowDelayMode)}, #endif - {"autofill-and-passwords-in-same-surface", - flag_descriptions::kAutofillAndPasswordsInSameSurfaceName, - flag_descriptions::kAutofillAndPasswordsInSameSurfaceDescription, kOsAll, - FEATURE_VALUE_TYPE( - autofill::features::kAutofillAndPasswordsInSameSurface)}, - #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \ BUILDFLAG(IS_WIN) {"contextual-suggestion-ui-improvements", @@ -13231,21 +12528,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(unexportable_keys::kUnexportableKeyDeletion)}, #endif -#if !BUILDFLAG(IS_ANDROID) - {flag_descriptions::kAppBrowserUseNewLayoutId, - flag_descriptions::kAppBrowserUseNewLayoutName, - flag_descriptions::kAppBrowserUseNewLayoutDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kAppBrowserUseNewLayout)}, - {flag_descriptions::kPopupBrowserUseNewLayoutId, - flag_descriptions::kPopupBrowserUseNewLayoutName, - flag_descriptions::kPopupBrowserUseNewLayoutDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kPopupBrowserUseNewLayout)}, - {flag_descriptions::kTabbedBrowserUseNewLayoutId, - flag_descriptions::kTabbedBrowserUseNewLayoutName, - flag_descriptions::kTabbedBrowserUseNewLayoutDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kTabbedBrowserUseNewLayout)}, -#endif - #if BUILDFLAG(IS_ANDROID) {"enable-audio-monitoring-on-android", flag_descriptions::kEnableAudioMonitoringOnAndroidName, @@ -13486,6 +12768,118 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(chrome::android::kDesktopAndroidLinkCapturing)}, #endif +#if BUILDFLAG(IS_ANDROID) + {"enable-payment-request-deduplicate-native-payment-apps", + flag_descriptions::kDeduplicateNativePaymentAppsName, + flag_descriptions::kDeduplicateNativePaymentAppsDescription, kOsAndroid, + FEATURE_VALUE_TYPE(payments::android::kDeduplicateNativePaymentApps)}, +#endif + +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + {"password-upload-ui-update", + flag_descriptions::kPasswordUploadUiUpdateName, + flag_descriptions::kPasswordUploadUiUpdateDescription, + kOsLinux | kOsMac | kOsWin, + FEATURE_VALUE_TYPE(switches::kPasswordUploadUiUpdate)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"enable-android-side-panel", + flag_descriptions::kEnableAndroidSidePanelName, + flag_descriptions::kEnableAndroidSidePanelDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kEnableAndroidSidePanel)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"signin-level-up-button", flag_descriptions::kSigninLevelUpButtonName, + flag_descriptions::kSigninLevelUpButtonDescription, kOsAndroid, + FEATURE_VALUE_TYPE(switches::kSigninLevelUpButton)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"always-draw-composited-toolbar-hairline", + flag_descriptions::kAlwaysDrawCompositedToolbarHairlineName, + flag_descriptions::kAlwaysDrawCompositedToolbarHairlineDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kAlwaysDrawCompositedToolbarHairline)}, +#endif + +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + {"saas-usage-reporting", flag_descriptions::kSaasUsageReportingName, + flag_descriptions::kSaasUsageReportingDescription, + kOsLinux | kOsMac | kOsWin, + FEATURE_VALUE_TYPE(enterprise_reporting::kSaasUsageReporting)}, +#endif + + {"autofill-enable-pay-now-pay-later-tabs", + flag_descriptions::kAutofillEnablePayNowPayLaterTabsName, + flag_descriptions::kAutofillEnablePayNowPayLaterTabsDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(autofill::features::kAutofillEnablePayNowPayLaterTabs)}, + + {"web-authentication-ambient-signin", + flag_descriptions::kWebAuthnAmbientSigninName, + flag_descriptions::kWebAuthnAmbientSigninDescription, kOsDesktop, + FEATURE_VALUE_TYPE(device::kWebAuthnAmbientSignin)}, + + {"devtools-protocol-monitor", + flag_descriptions::kDevToolsProtocolMonitorName, + flag_descriptions::kDevToolsProtocolMonitorDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kDevToolsProtocolMonitor)}, + +#if BUILDFLAG(IS_ANDROID) + {"use-surface-view-for-thin-webview", + flag_descriptions::kUseSurfaceViewForThinWebViewName, + flag_descriptions::kUseSurfaceViewForThinWebViewDescription, kOsAndroid, + FEATURE_VALUE_TYPE(thin_webview::android::kUseSurfaceViewForThinWebView)}, +#endif + + {"bundled-security-settings-secure-dns-v2", + flag_descriptions::kBundledSecuritySettingsSecureDnsV2Name, + flag_descriptions::kBundledSecuritySettingsSecureDnsV2Description, + kOsDesktop, + FEATURE_VALUE_TYPE(safe_browsing::kBundledSecuritySettingsSecureDnsV2)}, + + {"launch-queue-stop-sending-on-reload", + flag_descriptions::kWebAppLaunchQueueStopSendingOnReloadName, + flag_descriptions::kWebAppLaunchQueueStopSendingOnReloadDescription, + kOsAll, + FEATURE_VALUE_TYPE(webapps::features::kLaunchQueueStopSendingOnReload)}, + +#if !BUILDFLAG(IS_ANDROID) + {"credential-management-unified-ui", + flag_descriptions::kCredentialManagementUnifiedUiName, + flag_descriptions::kCredentialManagementUnifiedUiDescription, kOsDesktop, + FEATURE_VALUE_TYPE( + password_manager::features::kCredentialManagementUnifiedUi)}, +#endif // !BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) + {"search-engine-explicit-choice-dialog", + flag_descriptions::kSearchEngineExplicitChoiceDialogName, + flag_descriptions::kSearchEngineExplicitChoiceDialogDescription, + kOsWin | kOsMac, + FEATURE_VALUE_TYPE( + extensions_features::kSearchEngineExplicitChoiceDialog)}, + + {"search-engine-unconditional-dialog", + flag_descriptions::kSearchEngineUnconditionalDialogName, + flag_descriptions::kSearchEngineUnconditionalDialogDescription, + kOsWin | kOsMac, + FEATURE_VALUE_TYPE(extensions_features::kSearchEngineUnconditionalDialog)}, +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) + +#if BUILDFLAG(IS_ANDROID) + {"persist-across-reboots-debug-logs", + flag_descriptions::kPersistAcrossRebootsDebugLogsName, + flag_descriptions::kPersistAcrossRebootsDebugLogsDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kPersistAcrossRebootsDebugLogs)}, +#endif + + {"enable-webmcp-testing", flag_descriptions::kWebMCPTestingName, + flag_descriptions::kWebMCPTestingDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kWebMCPTesting)}, + // Add new entries above this line. // NOTE: Adding a new flag requires adding a corresponding entry to enum // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag @@ -13754,8 +13148,8 @@ std::vector RegisterAllFeatureVariationParameters( void GetFlagFeatureEntries(flags_ui::FlagsStorage* flags_storage, flags_ui::FlagAccess access, - base::Value::List& supported_entries, - base::Value::List& unsupported_entries) { + base::ListValue& supported_entries, + base::ListValue& unsupported_entries) { FlagsStateSingleton::GetFlagsState()->GetFlagFeatureEntries( flags_storage, access, supported_entries, unsupported_entries, base::BindRepeating(&ShouldSkipConditionalFeatureEntry, @@ -13767,8 +13161,8 @@ void GetFlagFeatureEntries(flags_ui::FlagsStorage* flags_storage, void GetFlagFeatureEntriesForDeprecatedPage( flags_ui::FlagsStorage* flags_storage, flags_ui::FlagAccess access, - base::Value::List& supported_entries, - base::Value::List& unsupported_entries) { + base::ListValue& supported_entries, + base::ListValue& unsupported_entries) { FlagsStateSingleton::GetFlagsState()->GetFlagFeatureEntries( flags_storage, access, supported_entries, unsupported_entries, base::BindRepeating(&ShouldSkipNonDeprecatedFeatureEntry)); 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 6f1b8b32..0ec41022 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 @@ -34,7 +34,6 @@ #include "chrome/browser/autocomplete/zero_suggest_cache_service_factory.h" #include "chrome/browser/autofill/autofill_entity_data_manager_factory.h" #include "chrome/browser/autofill/personal_data_manager_factory.h" -#include "chrome/browser/autofill/strike_database_factory.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h" @@ -80,6 +79,7 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/spellchecker/spellcheck_factory.h" #include "chrome/browser/spellchecker/spellcheck_service.h" +#include "chrome/browser/strike_database/strike_database_factory.h" #include "chrome/browser/sync/sync_service_factory.h" #include "chrome/browser/tpcd/metadata/manager_factory.h" #include "chrome/browser/translate/chrome_translate_client.h" @@ -336,10 +336,10 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( FROM_HERE, slow_pending_tasks_closure_.callback(), kSlowTaskTimeout); // Embedder-defined DOM-accessible storage currently contains only - // one datatype, which is the durable storage permission. + // one datatype, which is the persistent storage permission. if (remove_mask & content::BrowsingDataRemover::DATA_TYPE_EMBEDDER_DOM_STORAGE) { - remove_mask |= constants::DATA_TYPE_DURABLE_PERMISSION; + remove_mask |= constants::DATA_TYPE_PERSISTENT_PERMISSION; } if (origin_type_mask & @@ -416,7 +416,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( HistoryServiceFactory::GetForProfile( profile_, ServiceAccessType::EXPLICIT_ACCESS); if (history_service) { - // TODO(dmurph): Support all backends with filter (crbug.com/113621). + // TODO(dmurph): Support all backends with filter (crbug.com/40152186). base::RecordAction(UserMetricsAction("ClearBrowsingData_History")); history_service->DeleteLocalAndRemoteHistoryBetween( WebHistoryServiceFactory::GetForProfile(profile_), delete_begin_, @@ -437,7 +437,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( // The extension activity log contains details of which websites extensions // were active on. It therefore indirectly stores details of websites a // user has visited so best clean from here as well. - // TODO(msramek): Support all backends with filter (crbug.com/589586). + // TODO(msramek): Support all backends with filter (crbug.com/40458377). extensions::ActivityLog::GetInstance(profile_)->RemoveURLs( std::set()); @@ -469,7 +469,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( prerender::NoStatePrefetchManagerFactory::GetForBrowserContext( profile_); if (no_state_prefetch_manager) { - // TODO(dmurph): Support all backends with filter (crbug.com/113621). + // TODO(dmurph): Support all backends with filter (crbug.com/40152186). no_state_prefetch_manager->ClearData( prerender::NoStatePrefetchManager::CLEAR_PRERENDER_CONTENTS | prerender::NoStatePrefetchManager::CLEAR_PRERENDER_HISTORY); @@ -477,11 +477,11 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( base::ThreadPool::PostTaskAndReply( FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock()}, - base::BindOnce( - &webrtc_logging::DeleteOldAndRecentWebRtcLogFiles, - webrtc_logging::TextLogList:: - GetWebRtcLogDirectoryForBrowserContextPath(profile_->GetPath()), - delete_begin_), + base::BindOnce(&webrtc_logging::DeleteOldAndRecentWebRtcLogFiles, + webrtc_logging::TextLogList:: + GetWebRtcLogDirectoriesForBrowserContextPath( + profile_->GetPath()), + delete_begin_), CreateTaskCompletionClosure(TracingDataType::kWebrtcLogs)); #if BUILDFLAG(IS_ANDROID) @@ -825,11 +825,11 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( } ////////////////////////////////////////////////////////////////////////////// - // DATA_TYPE_DURABLE_PERMISSION - if (remove_mask & constants::DATA_TYPE_DURABLE_PERMISSION) { + // DATA_TYPE_PERSISTENT_PERMISSION + if (remove_mask & constants::DATA_TYPE_PERSISTENT_PERMISSION) { host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( - ContentSettingsType::DURABLE_STORAGE, base::Time(), base::Time::Max(), - website_settings_filter); + ContentSettingsType::PERSISTENT_STORAGE, base::Time(), + base::Time::Max(), website_settings_filter); } ////////////////////////////////////////////////////////////////////////////// @@ -1036,7 +1036,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( ////////////////////////////////////////////////////////////////////////////// // DATA_TYPE_FORM_DATA - // TODO(dmurph): Support all backends with filter (crbug.com/113621). + // TODO(dmurph): Support all backends with filter (crbug.com/40152186). if (remove_mask & constants::DATA_TYPE_FORM_DATA) { base::RecordAction(UserMetricsAction("ClearBrowsingData_Autofill")); scoped_refptr web_data_service = @@ -1056,10 +1056,10 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( // TODO(crbug.com/40594007): Respect |delete_begin_| and |delete_end_| and // only clear out entries whose last strikes were created in that // timeframe. - strike_database::StrikeDatabase* strike_database = - autofill::StrikeDatabaseFactory::GetForProfile(profile_); - if (strike_database) + if (strike_database::StrikeDatabase* strike_database = + StrikeDatabaseFactory::GetForProfile(profile_)) { strike_database->ClearAllStrikes(); + } autofill::PersonalDataManager* data_manager = autofill::PersonalDataManagerFactory::GetForBrowserContext(profile_); @@ -1734,7 +1734,12 @@ void ChromeBrowsingDataRemoverDelegate::DisablePasswordsAutoSignin( TracingDataType::kDisableAutoSigninForProfilePasswords)); } if (account_store && - password_manager::features_util::IsAccountStorageEnabled(sync_service)) { + // TODO(crbug.com/470332074): This should check for + // "enabled" instead of "active" because this code is just trying to + // delete data from all relevant places. The if() statement is just making + // sure the storage exists before we make a deletion call on it. This + // seems to match the semantics of "enabled". + password_manager::features_util::IsAccountStorageActive(sync_service)) { account_store->DisableAutoSignInForOrigins( url_filter, CreateTaskCompletionClosure( 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 7461f757..3e072fb6 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 @@ -12,6 +12,7 @@ #include "build/chromeos_buildflags.h" #include "chrome/browser/accessibility/accessibility_labels_service.h" #include "chrome/browser/accessibility/accessibility_labels_service_factory.h" +#include "chrome/browser/actor/actor_script_tool_receiver.h" #include "chrome/browser/buildflags.h" #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h" #include "chrome/browser/navigation_predictor/navigation_predictor.h" @@ -86,7 +87,7 @@ BUILDFLAG(IS_CHROMEOS) #include "chrome/browser/screen_ai/screen_ai_service_router.h" #include "chrome/browser/screen_ai/screen_ai_service_router_factory.h" -#include "chrome/browser/ui/web_applications/sub_apps_service_impl.h" +#include "chrome/browser/web_applications/sub_apps_service_impl.h" #endif #if BUILDFLAG(IS_ANDROID) @@ -438,6 +439,9 @@ void PopulateChromeFrameBinders( content::RenderFrameHost* render_frame_host) { map->Add(&BindImageAnnotator); + map->Add( + &actor::ActorScriptToolReceiver::Create); + map->Add( &NavigationPredictor::Create); @@ -542,7 +546,7 @@ void PopulateChromeFrameBinders( #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) - if (base::FeatureList::IsEnabled(blink::features::kDesktopPWAsSubApps) && + if (base::FeatureList::IsEnabled(blink::features::kSubApps) && !render_frame_host->GetParentOrOuterDocument()) { // The service binder will reject non-primary main frames, but we still need // to register it for them because a non-primary main frame could become a 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 b96e429e..7ca1e306 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 @@ -18,9 +18,11 @@ #include "base/base_switches.h" #include "base/byte_count.h" #include "base/check_deref.h" +#include "base/check_op.h" #include "base/command_line.h" #include "base/containers/fixed_flat_map.h" #include "base/containers/fixed_flat_set.h" +#include "base/containers/to_vector.h" #include "base/dcheck_is_on.h" #include "base/feature_list.h" #include "base/files/file_path.h" @@ -125,10 +127,12 @@ #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.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_keep_alive_request_tracker.h" #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader.h" #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.h" #include "chrome/browser/preloading/preloading_features.h" #include "chrome/browser/preloading/preloading_prefs.h" +#include "chrome/browser/preloading/preloading_utils.h" #include "chrome/browser/preloading/prerender/prerender_web_contents_delegate.h" #include "chrome/browser/preloading/search_preload/search_preload_features.h" #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h" @@ -171,13 +175,13 @@ #include "chrome/browser/ui/color/chrome_color_id.h" #include "chrome/browser/ui/login/http_auth_coordinator.h" #include "chrome/browser/ui/prefs/pref_watcher.h" +#include "chrome/browser/ui/startup/google_chrome_scheme_util.h" #include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" #include "chrome/browser/ui/ui_features.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" #include "chrome/browser/ui/webui/log_web_ui_url.h" -#include "chrome/browser/ui/webui/top_chrome/webui_url_utils.h" #include "chrome/browser/universal_web_contents_observers.h" #include "chrome/browser/usb/chrome_usb_delegate.h" #include "chrome/browser/vr/vr_tab_helper.h" @@ -205,6 +209,7 @@ #include "chrome/common/secure_origin_allowlist.h" #include "chrome/common/url_constants.h" #include "chrome/common/webui_url_constants.h" +#include "chrome/common/webui_url_utils.h" #include "chrome/grit/generated_resources.h" #include "chrome/installer/util/google_update_settings.h" #include "components/autofill/core/common/autofill_features.h" @@ -238,6 +243,8 @@ #include "components/error_page/common/error_page_switches.h" #include "components/error_page/common/localized_error.h" #include "components/google/core/common/google_switches.h" +#include "components/google/core/common/google_util.h" +#include "components/guest_view/buildflags/buildflags.h" #include "components/heap_profiling/in_process/heap_profiler_controller.h" #include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/scoped_keep_alive.h" @@ -268,6 +275,7 @@ #include "components/performance_manager/public/performance_manager.h" #include "components/permissions/content_setting_permission_context_base.h" #include "components/policy/core/browser/url_list/policy_blocklist_service.h" +#include "components/policy/core/common/features.h" #include "components/policy/core/common/management/management_service.h" #include "components/policy/core/common/policy_pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -391,6 +399,7 @@ #include "third_party/blink/public/common/permissions/permission_utils.h" #include "third_party/blink/public/common/switches.h" #include "third_party/blink/public/mojom/browsing_topics/browsing_topics.mojom.h" +#include "third_party/blink/public/mojom/navigation/navigation_params.mojom.h" #include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom.h" #include "third_party/blink/public/public_buildflags.h" #include "third_party/widevine/cdm/buildflags.h" @@ -420,14 +429,15 @@ #include "chrome/browser/tracing/tracing_features.h" #include "chrome/browser/tracing/windows_system_tracing_client_win.h" #include "chrome/install_static/install_util.h" +#include "chrome/installer/util/isolation_support.h" #include "chrome/services/util_win/public/mojom/util_win.mojom.h" #include "content/public/browser/tracing_service.h" #include "sandbox/win/src/sandbox_policy.h" #elif BUILDFLAG(IS_MAC) #include "chrome/browser/browser_process_platform_part_mac.h" -#include "chrome/browser/enterprise/platform_auth/platform_auth_features.h" #include "chrome/browser/enterprise/platform_auth/platform_auth_proxying_url_loader_factory.h" #include "chrome/common/chrome_version.h" +#include "components/enterprise/platform_auth/platform_auth_features.h" #include "components/soda/constants.h" #include "sandbox/mac/sandbox_serializer.h" #include "sandbox/policy/mac/params.h" @@ -464,7 +474,7 @@ #include "chrome/browser/speech/tts_chromeos.h" #include "chrome/browser/speech/tts_controller_delegate_impl.h" #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h" -#include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/dialogs/browser_dialogs.h" #include "chrome/browser/ui/webui/ash/kerberos/kerberos_in_browser_dialog.h" #include "chrome/common/webui_url_constants.h" #include "chromeos/ash/components/browser_context_helper/browser_context_types.h" @@ -525,10 +535,10 @@ #include "chrome/browser/themes/theme_service.h" #include "chrome/browser/themes/theme_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/browser_list.h" #include "chrome/browser/ui/chrome_pages.h" +#include "chrome/browser/ui/dialogs/browser_dialogs.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/waap/waap_utils.h" #include "chrome/browser/ui/webui/chrome_content_browser_client_webui_part.h" @@ -536,6 +546,8 @@ #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_error_page.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/isolated_web_apps/iwa_permissions_policy_cache.h" +#include "chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.h" #include "chrome/browser/web_applications/locks/app_lock.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" #include "chrome/browser/web_applications/proto/web_app_install_state.pb.h" @@ -552,6 +564,7 @@ #include "components/password_manager/content/common/web_ui_constants.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/soda/soda_util.h" +#include "components/webapps/isolated_web_apps/types/iwa_origin.h" #include "components/webapps/isolated_web_apps/url_loading/url_loader_factory.h" #include "services/network/public/mojom/permissions_policy/permissions_policy_feature.mojom.h" #include "third_party/blink/public/mojom/installedapp/related_application.mojom.h" @@ -613,6 +626,15 @@ #include "extensions/common/manifest_handlers/background_info.h" #include "extensions/common/permissions/permissions_data.h" #include "extensions/common/switches.h" + +#if BUILDFLAG(ENABLE_GUEST_VIEW) +#include "extensions/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" +#endif + +#elif BUILDFLAG(IS_ANDROID) +#include "chrome/browser/android/guest_view/chrome_content_browser_client_guest_view_part.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) #if BUILDFLAG(ENABLE_EXTENSIONS) @@ -625,12 +647,6 @@ #include "extensions/common/user_script.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) -#if BUILDFLAG(ENABLE_GUEST_VIEW) -#include "extensions/browser/guest_view/web_view/web_view_guest.h" -#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" -#include "extensions/browser/guest_view/web_view/web_view_renderer_state.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" @@ -711,8 +727,7 @@ #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) -#include "chrome/browser/on_device_translation/component_manager.h" -#include "components/on_device_translation/pref_names.h" +#include "components/on_device_translation/component_manager.h" #endif // BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) #if BUILDFLAG(ENABLE_REQUEST_HEADER_INTEGRITY) @@ -809,8 +824,7 @@ bool HandleNewTabPageLocationOverride( return false; } url::Component scheme; - if (!url::ExtractScheme(ntp_location.data(), - static_cast(ntp_location.length()), &scheme)) { + if (!url::ExtractScheme(ntp_location, &scheme)) { ntp_location = base::StrCat( {url::kHttpsScheme, url::kStandardSchemeSeparator, ntp_location}); } @@ -986,13 +1000,24 @@ GetRendererConfiguration(content::RenderProcessHost* render_process_host) { #endif // !BUILDFLAG(IS_ANDROID) bool ShouldHonorPolicies() { + bool management_check_required = false; + #if BUILDFLAG(IS_WIN) - return policy::ManagementServiceFactory::GetForPlatform() - ->GetManagementAuthorityTrustworthiness() >= - policy::ManagementAuthorityTrustworthiness::TRUSTED; -#else - return true; + management_check_required = true; +#elif BUILDFLAG(IS_MAC) + if (base::FeatureList::GetInstance() && + base::FeatureList::IsEnabled( + policy::features::kUseManagementServiceForSensitivePolicies)) { + management_check_required = true; + } #endif + + if (management_check_required) { + return policy::ManagementServiceFactory::GetForPlatform() + ->GetManagementAuthorityTrustworthiness() >= + policy::ManagementAuthorityTrustworthiness::TRUSTED; + } + return true; } // Used by Enterprise policy. Disable blocking of navigations toward external @@ -1377,6 +1402,9 @@ ChromeContentBrowserClient::ChromeContentBrowserClient() { #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) extra_parts_.push_back( std::make_unique()); +#elif BUILDFLAG(IS_ANDROID) + extra_parts_.push_back( + std::make_unique()); #endif #if !BUILDFLAG(IS_ANDROID) @@ -1452,9 +1480,6 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterListPref(prefs::kSSLErrorOverrideAllowedForOrigins); registry->RegisterBooleanPref(prefs::kCompressionDictionaryTransportEnabled, true); -#if BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) - registry->RegisterBooleanPref(prefs::kTranslatorAPIAllowed, true); -#endif registry->RegisterBooleanPref( prefs::kSuppressDifferentOriginSubframeJSDialogs, true); #if BUILDFLAG(IS_ANDROID) @@ -1478,6 +1503,8 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterBooleanPref(prefs::kDataUrlInSvgUseEnabled, false); registry->RegisterBooleanPref(prefs::kPartitionedBlobUrlUsage, true); + registry->RegisterBooleanPref(policy::policy_prefs::kXSLTEnabled, false); + registry->RegisterBooleanPref( policy::policy_prefs::kCSSCustomStateDeprecatedSyntaxEnabled, /*default_value=*/false); @@ -1605,7 +1632,7 @@ void ChromeContentBrowserClient::MaybeProxyNetworkBoundRequest( // the hijacked remote to this. network::mojom::URLLoaderFactoryParamsPtr params = network::mojom::URLLoaderFactoryParams::New(); - params->process_id = network::mojom::kBrowserProcessId; + params->process_id = network::OriginatingProcess::browser(); params->is_trusted = true; params->isolation_info = isolation_info; // Disable CORS wrapping, this is already handled by the caller. @@ -1757,7 +1784,7 @@ std::optional ChromeContentBrowserClient::GetEffectiveURL( // 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. + // https://crbug.com/41339429. if (search::ShouldAssignURLToInstantRenderer(url, profile)) { return search::GetEffectiveURLForInstant(url, profile); } @@ -2275,33 +2302,34 @@ size_t ChromeContentBrowserClient::GetProcessCountToIgnoreForLimit() { #endif } -std::optional +std::optional> ChromeContentBrowserClient::GetPermissionsPolicyForIsolatedWebApp( - content::WebContents* web_contents, - const url::Origin& app_origin) { + content::BrowserContext* browser_context, + const url::Origin& iwa_origin) { #if !BUILDFLAG(IS_ANDROID) - // Extensions are exempt from manifest policy enforcement and retain the - // default frame permissions policy. - if (app_origin.scheme() == extensions::kExtensionScheme) { + Profile* profile = Profile::FromBrowserContext(browser_context); + web_app::IwaPermissionsPolicyCache* cache = + web_app::IwaPermissionsPolicyCacheFactory::GetForProfile(profile); + if (!cache) { return std::nullopt; } - CHECK(web_contents); - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - auto& registrar = - web_app::WebAppProvider::GetForWebApps(profile)->registrar_unsafe(); - std::vector app_ids_for_origin = - registrar.FindAllAppsNestedInUrl( - app_origin.GetURL(), web_app::WebAppFilter::InstalledInChrome()); - if (app_ids_for_origin.empty()) { - return network::ParsedPermissionsPolicy(); + ASSIGN_OR_RETURN(web_app::IwaOrigin origin, + web_app::IwaOrigin::Create(iwa_origin.GetURL()), + [](auto) { return std::nullopt; }); + + const web_app::IwaPermissionsPolicyCache::CacheEntry* policy = + cache->GetPolicy(origin); + if (!policy) { + return std::nullopt; } - return registrar.GetPermissionsPolicy(app_ids_for_origin[0]); + return base::ToVector(*policy, [](const auto& entry) { + return blink::mojom::IsolatedAppPermissionPolicyEntry::New( + entry.feature, entry.allowed_origins); + }); #else - NOTIMPLEMENTED(); - return network::ParsedPermissionsPolicy(); + return std::nullopt; #endif } @@ -2405,7 +2433,7 @@ void ChromeContentBrowserClient::WillComputeSiteForNavigation( content::BrowserContext* browser_context, const GURL& url) { if (!site_isolation::SiteIsolationPolicy:: - IsOriginIsolationForJsOptExceptionsEnabled()) { + IsOriginIsolationForJsOptExceptionsEnabled(browser_context)) { return; } @@ -2755,6 +2783,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext()); PrefService* prefs = profile->GetPrefs(); + PrefService* local_state = g_browser_process->local_state(); // Currently this pref is only registered if applied via a policy. if (prefs->HasPrefPath(prefs::kDisable3DAPIs) && prefs->GetBoolean(prefs::kDisable3DAPIs)) { @@ -2770,6 +2799,14 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( command_line->AppendSwitch(blink::switches::kDataUrlInSvgUseEnabled); } + if (prefs->FindPreference(policy::policy_prefs::kXSLTEnabled) + ->IsManaged()) { + command_line->AppendSwitchASCII( + blink::switches::kXSLTEnabledPolicy, + prefs->GetBoolean(policy::policy_prefs::kXSLTEnabled) ? "true" + : "false"); + } + if (!prefs->GetBoolean(prefs::kPartitionedBlobUrlUsage)) { command_line->AppendSwitch( blink::switches::kDisableBlobUrlPartitioning); @@ -2792,6 +2829,14 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( network::switches::kForcePermissionPolicyUnloadDefaultEnabled); } + if (local_state->GetBoolean( + policy::policy_prefs:: + kLocalNetworkAccessPermissionsPolicyDefaultEnabled)) { + command_line->AppendSwitch( + network::switches:: + kLocalNetworkAccessPermissionsPolicyDefaultEnabled); + } + if (prefs->GetBoolean(prefs::kWebAudioOutputBufferingEnabled)) { command_line->AppendSwitch( blink::switches::kWebAudioBypassOutputBufferingOptOut); @@ -2847,7 +2892,6 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( // base::Feature, but it has a managed policy override. The override is // communicated to blink via a custom command-line flag. See // PageSchedulerImpl for the other half of related logic. - PrefService* local_state = g_browser_process->local_state(); const PrefService::Preference* pref = local_state->FindPreference( policy::policy_prefs::kIntensiveWakeUpThrottlingEnabled); if (pref && pref->IsManaged()) { @@ -3232,14 +3276,14 @@ void ChromeContentBrowserClient::AllowWorkerFileSystem( Profile::FromBrowserContext(browser_context)); bool allow = embedder_support::AllowWorkerFileSystem( url, {}, cookie_settings.get(), storage_key); -#if BUILDFLAG(ENABLE_GUEST_VIEW) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) && BUILDFLAG(ENABLE_GUEST_VIEW) GuestPermissionRequestHelper(url, render_frames, std::move(callback), allow); #else FileSystemAccessed(url, render_frames, std::move(callback), allow); -#endif +#endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) && BUILDFLAG(ENABLE_GUEST_VIEW) } -#if BUILDFLAG(ENABLE_GUEST_VIEW) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) && BUILDFLAG(ENABLE_GUEST_VIEW) void ChromeContentBrowserClient::GuestPermissionRequestHelper( const GURL& url, const std::vector& render_frames, @@ -3937,7 +3981,7 @@ bool ShouldDisableForcedColorsForWebContent(content::WebContents* contents, Profile::FromBrowserContext(contents->GetBrowserContext())->GetPrefs(); CHECK(prefs); - const base::Value::List& forced_colors_blocklist = + const base::ListValue& forced_colors_blocklist = prefs->GetList(prefs::kPageColorsBlockList); if (forced_colors_blocklist.empty()) { @@ -4362,12 +4406,12 @@ bool ChromeContentBrowserClient::CanCreateWindow( return true; } -#if BUILDFLAG(ENABLE_GUEST_VIEW) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) && BUILDFLAG(ENABLE_GUEST_VIEW) if (extensions::WebViewRendererState::GetInstance()->IsGuest( opener->GetProcess()->GetDeprecatedID())) { return true; } -#endif +#endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) && BUILDFLAG(ENABLE_GUEST_VIEW) #if BUILDFLAG(ENABLE_PLATFORM_APPS) if (target_url.SchemeIs(extensions::kExtensionScheme)) { @@ -4467,7 +4511,7 @@ void ChromeContentBrowserClient::OverrideWebPreferences( // Fill font preferences. These are not registered on Android unless we're built // with extensions (the chrome.fontSettings API can change these). -// - http://crbug.com/308033, http://crbug.com/696364. +// - http://crbug.com/40337093, http://crbug.com/41304476. #if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS) // Enabling the FontFamilyCache needs some KeyedService that might not be // available for some irregular profiles, like the System Profile. @@ -4599,7 +4643,6 @@ void ChromeContentBrowserClient::OverrideWebPreferences( switches::kEnablePotentiallyAnnoyingSecurityFeatures)) { web_prefs->disable_reading_from_canvas = true; web_prefs->strict_mixed_content_checking = true; - web_prefs->strict_powerful_feature_restrictions = true; } web_prefs->data_saver_enabled = IsDataSaverEnabled(profile); @@ -5090,7 +5133,7 @@ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess( std::wstring ChromeContentBrowserClient::GetAppContainerSidForSandboxType( sandbox::mojom::Sandbox sandbox_type, AppContainerFlags flags) { - // TODO(wfh): Add support for more process types here. crbug.com/499523 + // TODO(wfh): Add support for more process types here. crbug.com/41182255 switch (sandbox_type) { case sandbox::mojom::Sandbox::kRenderer: if (flags & AppContainerFlags::kAppContainerFlagDisableAppContainer) { @@ -5299,6 +5342,10 @@ bool ChromeContentBrowserClient::ShouldRestrictCoreSharingOnRenderer() { return false; } +std::optional +ChromeContentBrowserClient::GetWindowsSecurityAttributeName() const { + return installer::GetIsolationAttributeName(); +} #endif // BUILDFLAG(IS_WIN) void ChromeContentBrowserClient:: @@ -5467,7 +5514,7 @@ void ChromeContentBrowserClient::UpdateDevToolsBackgroundServiceExpiration( ScopedDictPrefUpdate pref_update( pref_service, prefs::kDevToolsBackgroundServicesExpirationDict); - base::Value::Dict& exp_dict = pref_update.Get(); + base::DictValue& exp_dict = pref_update.Get(); // Convert |expiration_time| to minutes since that is the most granular // option that returns an int. base::Value does not accept int64. @@ -6391,7 +6438,7 @@ void ChromeContentBrowserClient::WillCreateURLLoaderFactory( // WARNING: This factory blocks certain requests from going out via the // final network bound factory. enterprise_auth::ProxyingURLLoaderFactory::MaybeProxyRequest( - request_initiator, type, factory_builder); + request_initiator, type, browser_context, factory_builder); } #endif @@ -6621,7 +6668,7 @@ ChromeContentBrowserClient::GetNetworkContextsParentDirectory() { return network_contexts_parent_directory_; } -base::Value::Dict ChromeContentBrowserClient::GetNetLogConstants() { +base::DictValue ChromeContentBrowserClient::GetNetLogConstants() { return net_log::GetPlatformConstantsForNetLog( base::CommandLine::ForCurrentProcess()->GetCommandLineString(), chrome::GetChannelName(chrome::WithExtendedStable(true))); @@ -6870,6 +6917,30 @@ bool ChromeContentBrowserClient::HandleExternalProtocol( mojo::PendingRemote* out_factory) { CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); +#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || \ + BUILDFLAG(IS_WIN) + // Handle the google-chrome:// scheme (and chromium://). + // If the scheme is present, we strip it and navigate to the inner URL. + // This avoids launching a new browser instance via the OS handler. + if (std::optional new_url = + startup::ExtractGoogleChromeSchemeInnerUrl(url)) { + if (startup::ValidateUrl(*new_url)) { + auto* web_contents = web_contents_getter.Run(); + if (web_contents) { + content::OpenURLParams params( + *new_url, + content::Referrer(web_contents->GetLastCommittedURL(), + network::mojom::ReferrerPolicy::kDefault), + WindowOpenDisposition::NEW_FOREGROUND_TAB, page_transition, + /*is_renderer_initiated=*/false); + params.initiator_origin = initiating_origin; + web_contents->OpenURL(params, /*navigation_handle_callback=*/{}); + return true; + } + } + } +#endif + #if !BUILDFLAG(IS_ANDROID) content::WebContents* web_contents = web_contents_getter.Run(); if (web_contents && IsActorActingOnWebContents(web_contents)) { @@ -6978,16 +7049,14 @@ bool ChromeContentBrowserClient::HandleWebUI( #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) - // Rewrite chrome://settings/autofill and chrome://settings/enhancedAutofill - // to chrome://settings/yourSavedInfo. + // Rewrite chrome://settings/enhancedAutofill to chrome://settings/autofill. if (url->SchemeIs(content::kChromeUIScheme) && url->GetHost() == chrome::kChromeUISettingsHost && - (url->GetPath() == chrome::kChromeUIAutofillPath || - url->GetPath() == chrome::kChromeUIAutofillAiPath) && + url->GetPath() == chrome::kChromeUIAutofillAiPath && base::FeatureList::IsEnabled( autofill::features::kYourSavedInfoSettingsPage)) { GURL::Replacements replacements; - replacements.SetPathStr(chrome::kChromeUIYourSavedInfoPath); + replacements.SetPathStr(chrome::kChromeUIAutofillPath); *url = url->ReplaceComponents(replacements); } @@ -7644,6 +7713,16 @@ void ChromeContentBrowserClient::IsClipboardCopyAllowedByPolicy( #endif // BUILDFLAG(ENTERPRISE_DATA_CONTROLS) && !BUILDFLAG(IS_ANDROID) } +bool ChromeContentBrowserClient::IsDragAllowedByPolicy( + const content::ClipboardEndpoint& source, + const content::DropData& drop_data) { +#if BUILDFLAG(ENTERPRISE_DATA_CONTROLS) + return enterprise_data_protection::IsDragAllowedByPolicy(source, drop_data); +#else + return true; +#endif // BUILDFLAG(ENTERPRISE_DATA_CONTROLS) +} + #if BUILDFLAG(ENABLE_VR) content::XrIntegrationClient* ChromeContentBrowserClient::GetXrIntegrationClient() { @@ -7692,14 +7771,14 @@ void ChromeContentBrowserClient:: // BUILDFLAG(IS_CHROMEOS) } -content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride -ChromeContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy( +content::ContentBrowserClient::LocalNetworkAccessRequestPolicyOverride +ChromeContentBrowserClient::ShouldOverrideLocalNetworkAccessRequestPolicy( content::BrowserContext* browser_context, const url::Origin& origin) { #if BUILDFLAG(IS_ANDROID) if (base::android::device_info::is_automotive()) { - return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride:: - kBlockInsteadOfWarn; + return content::ContentBrowserClient:: + LocalNetworkAccessRequestPolicyOverride::kBlockInsteadOfWarn; } #endif @@ -7707,12 +7786,12 @@ ChromeContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy( if (profile->GetPrefs()->GetBoolean( prefs::kManagedLocalNetworkAccessRestrictionsTemporaryOptOut)) { - return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride:: - kWarnInsteadOfBlock; + return content::ContentBrowserClient:: + LocalNetworkAccessRequestPolicyOverride::kWarnInsteadOfBlock; } - return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride:: - kDefault; + return content::ContentBrowserClient:: + LocalNetworkAccessRequestPolicyOverride::kDefault; } bool ChromeContentBrowserClient::IsJitDisabledForSite( @@ -8238,23 +8317,6 @@ bool ChromeContentBrowserClient::AreIsolatedWebAppsEnabled( #endif } -bool ChromeContentBrowserClient::IsThirdPartyStoragePartitioningAllowed( - content::BrowserContext* browser_context, - const url::Origin& top_level_origin) { - const HostContentSettingsMap* const content_settings = - HostContentSettingsMapFactory::GetForProfile( - Profile::FromBrowserContext(browser_context)); - if (!content_settings) { - // We fail permissive as this function is used to check whether partitioning - // should be blocked, but isn't the final word on if it's allowed. - return true; - } - return content_settings->GetContentSetting( - top_level_origin.GetURL(), top_level_origin.GetURL(), - ContentSettingsType::THIRD_PARTY_STORAGE_PARTITIONING) == - CONTENT_SETTING_ALLOW; -} - bool ChromeContentBrowserClient::AreDeprecatedAutomaticBeaconCredentialsAllowed( content::BrowserContext* browser_context, const GURL& destination_url, @@ -8323,7 +8385,7 @@ bool ChromeContentBrowserClient::DoesGaiaOriginRequireDedicatedProcess() { return true; #else // Sign-in process isolation is not strictly needed on Android, see - // https://crbug.com/739418. On Android, it's more optional but it does + // https://. On Android, it's more optional but it does // improve security generally and specifically it allows the exposure of // certain optional privileged APIs. @@ -8555,8 +8617,7 @@ void ChromeContentBrowserClient::BindAIManager( if (!context_user_data->GetUserData(kAIManagerUserDataKey)) { context_user_data->SetUserData( kAIManagerUserDataKey, - std::make_unique( - browser_context, g_browser_process->component_updater(), rfh)); + std::make_unique(browser_context, rfh)); } AIManager* ai_manager = static_cast( @@ -8632,9 +8693,9 @@ void ChromeContentBrowserClient::QueryInstalledWebAppsByManifestId( base::BindOnce( [](webapps::AppId app_id, webapps::ManifestId manifest_id, GURL frame_url, web_app::AppLock& lock, - base::Value::Dict& debug_value) + base::DictValue& debug_value) -> std::optional { - debug_value.Set("input", base::Value::Dict() + debug_value.Set("input", base::DictValue() .Set("manifest_id", manifest_id.spec()) .Set("frame_url", frame_url.spec())); @@ -8664,7 +8725,7 @@ void ChromeContentBrowserClient::QueryInstalledWebAppsByManifestId( debug_value.Set("did_find_application", true); debug_value.Set( "application", - base::Value::Dict() + base::DictValue() .Set("app_id", application.id.value_or("")) .Set("manifest_url", application.url.value_or(""))); return application; @@ -8769,14 +8830,31 @@ bool ChromeContentBrowserClient::ShouldPrioritizeForBackForwardCache( ->IsSearchResultsPageFromDefaultSearchProvider(url); } -std::unique_ptr +std::vector> ChromeContentBrowserClient::MaybeCreateKeepAliveRequestTracker( const network::ResourceRequest& request, std::optional ukm_source_id, + content::BrowserContext* browser_context, content::KeepAliveRequestTracker::IsContextDetachedCallback is_context_detached_callback) { - return ChromeKeepAliveRequestTracker::MaybeCreateKeepAliveRequestTracker( - request, ukm_source_id, std::move(is_context_detached_callback)); + // Do not need to track non-keepalive requests. + if (!request.keepalive || !request.keepalive_token.has_value()) { + return {}; + } + std::vector> trackers; + std::unique_ptr chrome_tracker = + ChromeKeepAliveRequestTracker::MaybeCreateKeepAliveRequestTracker( + request, ukm_source_id, is_context_detached_callback); + if (chrome_tracker) { + trackers.push_back(std::move(chrome_tracker)); + } + std::unique_ptr search_tracker = + SearchPrefetchKeepAliveRequestTracker::MaybeCreateKeepAliveRequestTracker( + request, browser_context); + if (search_tracker) { + trackers.push_back(std::move(search_tracker)); + } + return trackers; } std::optional> @@ -8894,3 +8972,27 @@ std::string ChromeContentBrowserClient::GetDnsTxtResolverUrlPrefix() { "https://dns.google/resolve?type=txt&do=1&name="; return kGoogleDnsResolverUrl; } + +bool ChromeContentBrowserClient::ShouldAllowPrefetchRedirection( + content::BrowserContext& browser_context, + const GURL& url, + const std::string& embedder_histogram_suffix) { + // TODO(crbug.com/413259638): Use the constant in `preloading_utils` once it + // is created, currently this is set to be the same constant in + // c/b/p/b_p/bookmarkbar_preload_pipeline.cc. + // This function is only interested in specific triggers. The related triggers + // don't generate parameters to be identified by search results providers, so + // the triggering search related urls is avoided. See crbug.com/40282403 for + // more details. + if (embedder_histogram_suffix != preloading_utils::kBookmarkBarMetricSuffix && + embedder_histogram_suffix != preloading_utils::kNewTabPageMetricSuffix) { + return true; + } + auto* profile = Profile::FromBrowserContext(&browser_context); + TemplateURLService* template_url_service = + TemplateURLServiceFactory::GetForProfile(profile); + return !((template_url_service && + template_url_service->IsSearchResultsPageFromDefaultSearchProvider( + url)) || + google_util::IsGoogleSearchUrl(url)); +} diff --git a/tools/under-control/src/chrome/browser/chrome_content_browser_client_navigation_throttles.cc b/tools/under-control/src/chrome/browser/chrome_content_browser_client_navigation_throttles.cc index bfb61f49..e6e51235 100755 --- a/tools/under-control/src/chrome/browser/chrome_content_browser_client_navigation_throttles.cc +++ b/tools/under-control/src/chrome/browser/chrome_content_browser_client_navigation_throttles.cc @@ -8,7 +8,10 @@ #include "base/feature_list.h" #include "build/build_config.h" #include "build/buildflag.h" +#include "chrome/browser/actor/actor_navigation_throttle.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/custom_handlers/chrome_protocol_handler_navigation_throttle.h" +#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" #include "chrome/browser/data_sharing/data_sharing_navigation_throttle.h" #include "chrome/browser/enterprise/data_protection/view_source_navigation_throttle.h" #include "chrome/browser/first_party_sets/first_party_sets_navigation_throttle.h" @@ -37,7 +40,11 @@ #include "components/captive_portal/content/captive_portal_service.h" #include "components/captive_portal/core/buildflags.h" #include "components/contextual_tasks/public/features.h" +#include "components/custom_handlers/protocol_handler_navigation_throttle.h" #include "components/dom_distiller/content/browser/distiller_page_web_contents.h" +#include "components/dom_distiller/content/browser/distiller_referrer_throttle.h" +#include "components/dom_distiller/core/url_constants.h" +#include "components/dom_distiller/core/url_utils.h" #include "components/error_page/content/browser/net_error_auto_reloader.h" #include "components/guest_view/buildflags/buildflags.h" #include "components/history/content/browser/visited_link_navigation_throttle.h" @@ -61,8 +68,11 @@ #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" #include "extensions/buildflags/buildflags.h" +#include "extensions/common/extension_features.h" #include "pdf/buildflags.h" +#include "services/network/public/mojom/referrer_policy.mojom.h" #include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/mojom/loader/referrer.mojom.h" #include "url/gurl.h" #if BUILDFLAG(IS_ANDROID) @@ -75,7 +85,6 @@ #endif // BUILDFLAG(DFMIFY_DEV_UI) #else // BUILDFLAG(IS_ANDROID) -#include "chrome/browser/actor/actor_navigation_throttle.h" #include "chrome/browser/apps/link_capturing/link_capturing_navigation_throttle.h" #include "chrome/browser/apps/link_capturing/web_app_link_capturing_delegate.h" #include "chrome/browser/contextual_tasks/contextual_tasks_navigation_throttle.h" @@ -112,9 +121,9 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) -#if BUILDFLAG(ENABLE_GUEST_VIEW) +#if BUILDFLAG(ENABLE_GUEST_VIEW) && BUILDFLAG(ENABLE_EXTENSIONS_CORE) #include "extensions/browser/guest_view/web_view/web_view_guest.h" -#endif +#endif // BUILDFLAG(ENABLE_GUEST_VIEW) && BUILDFLAG(ENABLE_EXTENSIONS_CORE) #if BUILDFLAG(ENABLE_PDF) #include "chrome/browser/pdf/chrome_pdf_stream_delegate.h" @@ -275,7 +284,7 @@ void CreateAndAddChromeThrottlesForNavigation( #if BUILDFLAG(IS_ANDROID) // TODO(davidben): This is insufficient to integrate with prerender properly. - // https://crbug.com/370595 + // https://crbug.com/40364296 prerender::NoStatePrefetchContents* no_state_prefetch_contents = prerender::ChromeNoStatePrefetchContentsDelegate::FromWebContents( handle.GetWebContents()); @@ -314,6 +323,9 @@ void CreateAndAddChromeThrottlesForNavigation( apps::ChromeOsDisabledAppsThrottle::MaybeCreateAndAdd(registry); #endif // BUILDFLAG(IS_CHROMEOS) + Profile* profile = + Profile::FromBrowserContext(handle.GetWebContents()->GetBrowserContext()); + #if !BUILDFLAG(IS_ANDROID) std::unique_ptr link_capturing_delegate; @@ -340,10 +352,17 @@ void CreateAndAddChromeThrottlesForNavigation( #endif // BUILDFLAG(IS_CHROMEOS) web_app::NavigationCapturingRedirectionThrottle::MaybeCreateAndAdd(registry); -#endif // !BUILDFLAG(IS_ANDROID) - Profile* profile = - Profile::FromBrowserContext(handle.GetWebContents()->GetBrowserContext()); + if (base::FeatureList::IsEnabled( + extensions_features::kExtensionProtocolHandlers)) { + // Could be null in some unit tests. + if (auto* protocol_handler_registry = + ProtocolHandlerRegistryFactory::GetForBrowserContext(profile)) { + custom_handlers::ChromeProtocolHandlerNavigationThrottle:: + MaybeCreateAndAdd(protocol_handler_registry, registry); + } + } +#endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (!extensions::ChromeContentBrowserClientExtensionsPart:: @@ -355,11 +374,12 @@ void CreateAndAddChromeThrottlesForNavigation( ->GetUserScriptListener() ->CreateAndAddNavigationThrottle(registry); } -#endif #if BUILDFLAG(ENABLE_GUEST_VIEW) extensions::WebViewGuest::MaybeCreateAndAddNavigationThrottle(registry); -#endif +#endif // BUILDFLAG(ENABLE_GUEST_VIEW) + +#endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) SupervisedUserGoogleAuthNavigationThrottle::MaybeCreateAndAdd(registry); supervised_user::ClassifyUrlNavigationThrottle::MaybeCreateAndAdd(registry); @@ -570,9 +590,11 @@ void CreateAndAddChromeThrottlesForNavigation( #if !BUILDFLAG(IS_ANDROID) web_app::IsolatedWebAppThrottle::MaybeCreateAndAdd(registry); - actor::ActorNavigationThrottle::MaybeCreateAndAdd(registry); #endif // !BUILDFLAG(IS_ANDROID) + actor::ActorNavigationThrottle::MaybeCreateAndAdd(registry); dom_distiller::DistillerPageWebContents::MaybeCreateAndAddNavigationThrottle( registry); + + dom_distiller::DistillerReferrerThrottle::MaybeCreateAndAdd(registry); } 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 caf52f8e..8d175c77 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 @@ -165,6 +165,11 @@ public abstract class ChromeFeatureList { "AdaptiveButtonInTopToolbarCustomizationV2"; public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_PAGE_SUMMARY = "AdaptiveButtonInTopToolbarPageSummary"; + // Don't clean up this flag yet, BCIV is launched, so this needs to be enabled by + // default, but some render tests need to disable this so that the hairline isn't + // included in the screenshot. See https://crbug.com/394842006 for more details. + public static final String ALWAYS_DRAW_COMPOSITED_TOOLBAR_HAIRLINE = + "AlwaysDrawCompositedToolbarHairline"; public static final String ANDROID_ANIMATED_PROGRESS_BAR_IN_BROWSER = "AndroidAnimatedProgressBarInBrowser"; public static final String ANDROID_APPEARANCE_SETTINGS = "AndroidAppearanceSettings"; @@ -212,13 +217,11 @@ public abstract class ChromeFeatureList { public static final String ANDROID_THEME_MODULE = "AndroidThemeModule"; public static final String ANDROID_THEME_RESOURCE_PROVIDER = "AndroidThemeResourceProvider"; public static final String ANDROID_TIPS_NOTIFICATIONS = "AndroidTipsNotifications"; + public static final String ANDROID_TIPS_NOTIFICATIONS_V2 = "AndroidTipsNotificationsV2"; public static final String ANDROID_TWA_ORIGIN_DISPLAY = "AndroidTWAOriginDisplay"; public static final String ANDROID_USE_ADMINS_FOR_ENTERPRISE_INFO = "AndroidUseAdminsForEnterpriseInfo"; - public static final String ANDROID_WEB_APP_HEADER_FOR_STANDALONE_MODE = - "AndroidWebAppHeaderForStandaloneMode"; public static final String ANDROID_WEB_APP_LAUNCH_HANDLER = "AndroidWebAppLaunchHandler"; - public static final String ANDROID_WEB_APP_MENU_BUTTON = "AndroidWebAppMenuButton"; public static final String ANDROID_WINDOW_CONTROLS_OVERLAY = "AndroidWindowControlsOverlay"; public static final String ANDROID_WINDOW_MANAGEMENT_WEB_API = "AndroidWindowManagementWebApi"; public static final String ANDROID_WINDOW_POPUP_CUSTOM_TAB_UI = "AndroidWindowPopupCustomTabUi"; @@ -237,6 +240,7 @@ public abstract class ChromeFeatureList { public static final String ASYNC_NOTIFICATION_MANAGER = "AsyncNotificationManager"; public static final String ASYNC_NOTIFICATION_MANAGER_FOR_DOWNLOAD = "AsyncNotificationManagerForDownload"; + public static final String AUTOFILL_AI_WITH_DATA_SCHEMA = "AutofillAiWithDataSchema"; public static final String AUTOFILL_ALLOW_NON_HTTP_ACTIVATION = "AutofillAllowNonHttpActivation"; public static final String AUTOFILL_ANDROID_DESKTOP_KEYBOARD_ACCESSORY_REVAMP = @@ -279,6 +283,8 @@ public abstract class ChromeFeatureList { public static final String AUTOFILL_SYNC_EWALLET_ACCOUNTS = "AutofillSyncEwalletAccounts"; public static final String AUTOFILL_THIRD_PARTY_MODE_CONTENT_PROVIDER = "AutofillThirdPartyModeContentProvider"; + public static final String AUTOFILL_THIRD_PARTY_MODE_RESTORED_ON_START = + "AutofillThirdPartyModeRestoredOnStart"; public static final String AUTOMOTIVE_BACK_BUTTON_BAR_STREAMLINE = "AutomotiveBackButtonBarStreamline"; public static final String AUTO_DOC_PIP_PERMISSION_PROMPT_ANDROID = @@ -297,7 +303,6 @@ public abstract class ChromeFeatureList { public static final String BOOKMARK_PANE_ANDROID = "BookmarkPaneAndroid"; 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 BROWSER_CONTROLS_PERSISTS_ON_CVH = "BrowserControlsPersistsOnCvh"; public static final String BROWSER_CONTROLS_RENDER_DRIVEN_SHOW_CONSTRAINT = "BrowserControlsRenderDrivenShowConstraint"; @@ -342,20 +347,21 @@ public abstract class ChromeFeatureList { public static final String CCT_REPORT_PARALLEL_REQUEST_STATUS = "CCTReportParallelRequestStatus"; public static final String CCT_REPORT_PRERENDER_EVENTS = "CCTReportPrerenderEvents"; + public static final String CCT_RESET_TIMEOUT_ALLOWED = "CCTResetTimeoutAllowed"; public static final String CCT_RESET_TIMEOUT_ENABLED = "CCTResetTimeoutEnabled"; public static final String CCT_RESIZABLE_FOR_THIRD_PARTIES = "CCTResizableForThirdParties"; public static final String CCT_SHOW_TAB_FIX = "CCTShowTabFix"; public static final String CCT_TAB_MODAL_DIALOG = "CCTTabModalDialog"; public static final String CCT_TOOLBAR_REFACTOR = "CCTToolbarRefactor"; public static final String CHANGE_UNFOCUSED_PRIORITY = "ChangeUnfocusedPriority"; + public static final String CHROME_FINDS = "ChromeFinds"; public static final String CHROME_ITEM_PICKER_UI = "ChromeItemPickerUi"; public static final String CHROME_NATIVE_URL_OVERRIDING = "ChromeNativeUrlOverriding"; public static final String CHROME_SURVEY_NEXT_ANDROID = "ChromeSurveyNextAndroid"; public static final String CLAMP_AUTOMOTIVE_SCALING = "ClampAutomotiveScaling"; + public static final String CLANK_DEFAULT_SEARCH_API = "ClankDefaultSearchApi"; public static final String CLANK_STARTUP_LATENCY_INJECTION = "ClankStartupLatencyInjection"; public static final String CLANK_WHATS_NEW = "ClankWhatsNew"; - public static final String CLEAR_INSTANCE_INFO_WHEN_CLOSED_INTENTIONALLY = - "ClearInstanceInfoWhenClosedIntentionally"; public static final String CLEAR_INTENT_WHEN_RECREATED = "ClearIntentWhenRecreated"; public static final String COMMAND_LINE_ON_NON_ROOTED = "CommandLineOnNonRooted"; public static final String COMMERCE_MERCHANT_VIEWER = "CommerceMerchantViewer"; @@ -370,6 +376,7 @@ public abstract class ChromeFeatureList { "ContextualSearchDisableOnlineDetection"; public static final String CONTEXTUAL_SEARCH_SUPPRESS_SHORT_VIEW = "ContextualSearchSuppressShortView"; + public static final String CONTEXTUAL_TASKS = "ContextualTasks"; public static final String CONTEXT_MENU_EMPTY_SPACE = "ContextMenuEmptySpace"; public static final String CONTEXT_MENU_PICTURE_IN_PICTURE_ANDROID = "ContextMenuPictureInPictureAndroid"; @@ -388,6 +395,7 @@ public abstract class ChromeFeatureList { public static final String DATA_SHARING_NON_PRODUCTION_ENVIRONMENT = "DataSharingNonProductionEnvironment"; public static final String DEFAULT_BROWSER_PROMO_ANDROID2 = "DefaultBrowserPromoAndroid2"; + public static final String DEFAULT_BROWSER_PROMO_ENTRY_POINT = "DefaultBrowserPromoEntryPoint"; public static final String DESKTOP_ANDROID_LINK_CAPTURING = "DesktopAndroidLinkCapturing"; public static final String DESKTOP_UA_ON_CONNECTED_DISPLAY = "DesktopUAOnConnectedDisplay"; public static final String DETAILED_LANGUAGE_SETTINGS = "DetailedLanguageSettings"; @@ -409,9 +417,9 @@ public abstract class ChromeFeatureList { "EdgeToEdgeUseBackupNavbarInsets"; 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_ANDROID_SIDE_PANEL = "EnableAndroidSidePanel"; public static final String ENABLE_CLIPBOARD_DATA_CONTROLS_ANDROID = "EnableClipboardDataControlsAndroid"; public static final String ENABLE_DISCOUNT_INFO_API = "EnableDiscountInfoApi"; @@ -443,6 +451,7 @@ public abstract class ChromeFeatureList { public static final String FULLSCREEN_INSETS_API_MIGRATION = "FullscreenInsetsApiMigration"; public static final String FULLSCREEN_INSETS_API_MIGRATION_ON_AUTOMOTIVE = "FullscreenInsetsApiMigrationOnAutomotive"; + public static final String GLIC = "Glic"; public static final String GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE = "GridTabSwitcherSurfaceColorUpdate"; public static final String GRID_TAB_SWITCHER_UPDATE = "GridTabSwitcherUpdate"; @@ -455,11 +464,10 @@ public abstract class ChromeFeatureList { public static final String HISTORY_PANE_ANDROID = "HistoryPaneAndroid"; public static final String HOME_MODULE_PREF_REFACTOR = "HomeModulePrefRefactor"; public static final String HTTPS_FIRST_BALANCED_MODE = "HttpsFirstBalancedMode"; - public static final String HUB_BACK_BUTTON = "HubBackButton"; public static final String INCOGNITO_NTP_SMALL_ICON = "IncognitoNtpSmallIcon"; public static final String INCOGNITO_SCREENSHOT = "IncognitoScreenshot"; public static final String INCOGNITO_THEME_OVERLAY_TESTING = "IncognitoThemeOverlayTesting"; - public static final String INSTANCE_SWITCHER_V2 = "InstanceSwitcherV2"; + public static final String INLINE_PDF_V2 = "InlinePdfV2"; public static final String KEYBOARD_ESC_BACK_NAVIGATION = "KeyboardEscBackNavigation"; public static final String LAUNCH_CAUSE_SCREEN_OFF_FIX = "LaunchCauseScreenOffFix"; public static final String LENS_ON_QUICK_ACTION_SEARCH_WIDGET = "LensOnQuickActionSearchWidget"; @@ -487,8 +495,6 @@ public abstract class ChromeFeatureList { public static final String MOST_VISITED_TILES_RESELECT = "MostVisitedTilesReselect"; public static final String MOVE_TO_FRONT_IN_LAUNCH_INTENT_DISPATCHER = "MoveToFrontInLaunchIntentDispatcher"; - 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 NAV_BAR_COLOR_ANIMATION = "NavBarColorAnimation"; public static final String NEW_TAB_PAGE_CUSTOMIZATION = "NewTabPageCustomization"; @@ -500,6 +506,8 @@ public abstract class ChromeFeatureList { "NotificationPermissionBottomSheet"; public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_TRAMPOLINE = "NotificationTrampoline"; + public static final String NOTIFICATION_TRAMPOLINE_NO_NEW_TASK = + "NotificationTrampolineNoNewTask"; public static final String OMAHA_MIN_SDK_VERSION_ANDROID = "OmahaMinSdkVersionAndroid"; public static final String OMNIBOX_AUTOFOCUS_ON_INCOGNITO_NTP = "OmniboxAutofocusOnIncognitoNtp"; @@ -518,6 +526,7 @@ public abstract class ChromeFeatureList { public static final String PERMISSION_SITE_SETTING_RADIO_BUTTON = "PermissionSiteSettingsRadioButton"; public static final String PERSIST_ACROSS_REBOOTS = "PersistAcrossReboots"; + public static final String PERSIST_ACROSS_REBOOTS_DEBUG_LOGS = "PersistAcrossRebootsDebugLogs"; public static final String PLUS_ADDRESSES_ENABLED = "PlusAddressesEnabled"; public static final String PLUS_ADDRESS_ANDROID_OPEN_GMS_CORE_MANAGEMENT_PAGE = "PlusAddressAndroidOpenGmsCoreManagementPage"; @@ -539,10 +548,6 @@ public abstract class ChromeFeatureList { public static final String PRIVACY_SANDBOX_SENTIMENT_SURVEY = "PrivacySandboxSentimentSurvey"; public static final String PRIVACY_SANDBOX_SETTINGS_4 = "PrivacySandboxSettings4"; public static final String PROCESS_RANK_POLICY_ANDROID = "ProcessRankPolicyAndroid"; - // Do not access directly, use SupervisedUserService::IsLocallySupervised() or - // supervised_user::UseLocalSupervision() instead. Exposed only for testing. - public static final String PROPAGATE_DEVICE_CONTENT_FILTERS_TO_SUPERVISED_USER = - "PropagateDeviceContentFiltersToSupervisedUser"; public static final String PROTECT_RECENTLY_VISIBLE_TAB = "ProtectRecentlyVisibleTab"; public static final String PUSH_MESSAGING_DISALLOW_SENDER_IDS = "PushMessagingDisallowSenderIDs"; @@ -556,13 +561,9 @@ public abstract class ChromeFeatureList { "ReadAloudAudioOverviewsFeedback"; public static final String READALOUD_AUDIO_OVERVIEWS_SKIP_DISCLAIMER_WHEN_POSSIBLE = "ReadAloudAudioOverviewsSkipDisclaimerWhenPossible"; - 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"; public static final String READALOUD_IPH_MENU_BUTTON_HIGHLIGHT_CCT = "ReadAloudIPHMenuButtonHighlightCCT"; public static final String READALOUD_PLAYBACK = "ReadAloudPlayback"; - public static final String READALOUD_TAP_TO_SEEK = "ReadAloudTapToSeek"; public static final String RECENTLY_CLOSED_TABS_AND_WINDOWS = "RecentlyClosedTabsAndWindows"; public static final String RECORD_INCOGNITO_NTP_TIME_TO_FIRST_NAVIGATION_METRIC = "RecordIncognitoNtpTimeToFirstNavigationMetric"; @@ -641,6 +642,8 @@ public abstract class ChromeFeatureList { public static final String SYNC_ENABLE_NEW_SYNC_DASHBOARD_URL = "SyncEnableNewSyncDashboardUrl"; public static final String SYNC_ENABLE_PASSWORDS_SYNC_ERROR_MESSAGE_ALTERNATIVE = "SyncEnablePasswordsSyncErrorMessageAlternative"; + public static final String SYNC_TRUSTED_VAULT_ERROR_MESSAGE_DURATION = + "SyncTrustedVaultErrorMessageDuration"; public static final String TAB_BOTTOM_SHEET = "TabBottomSheet"; public static final String TAB_CLOSURE_METHOD_REFACTOR = "TabClosureMethodRefactor"; public static final String TAB_FREEZING_USES_DISCARD = "TabFreezingUsesDiscard"; @@ -650,7 +653,8 @@ public abstract class ChromeFeatureList { "TabStripAutoSelectOnCloseChange"; public static final String TAB_STRIP_CLOSE_REFACTOR_ANDROID = "TabStripCloseRefactorAndroid"; public static final String TAB_STRIP_DENSITY_CHANGE_ANDROID = "TabStripDensityChangeAndroid"; - public static final String TAB_STRIP_INCOGNITO_MIGRATION = "TabStripIncognitoMigration"; + public static final String TAB_STRIP_EMPTY_SPACE_CONTEXT_MENU_ANDROID = + "TabStripEmptySpaceContextMenuAndroid"; public static final String TAB_SWITCHER_DRAG_DROP_ANDROID = "TabSwitcherDragDropAndroid"; public static final String TAB_SWITCHER_GROUP_SUGGESTIONS_ANDROID = "TabSwitcherGroupSuggestionsAndroid"; @@ -736,7 +740,7 @@ public abstract class ChromeFeatureList { newCachedFlag( ANDROID_PROGRESS_BAR_VISUAL_UPDATE, /* defaultValue= */ false, - /* defaultValueInTests= */ true); + /* defaultValueInTests= */ false); public static final CachedFlag sAndroidSettingsContainment = newCachedFlag( ANDROID_SETTINGS_CONTAINMENT, @@ -763,12 +767,8 @@ public abstract class ChromeFeatureList { newCachedFlag(ANDROID_TWA_ORIGIN_DISPLAY, false); public static final CachedFlag sAndroidUseAdminsForEnterpriseInfo = newCachedFlag(ANDROID_USE_ADMINS_FOR_ENTERPRISE_INFO, true); - public static final CachedFlag sAndroidWebAppHeaderForStandaloneMode = - newCachedFlag(ANDROID_WEB_APP_HEADER_FOR_STANDALONE_MODE, false); public static final CachedFlag sAndroidWebAppLaunchHandler = newCachedFlag(ANDROID_WEB_APP_LAUNCH_HANDLER, false, true); - public static final CachedFlag sAndroidWebAppMenuButton = - newCachedFlag(ANDROID_WEB_APP_MENU_BUTTON, true); public static final CachedFlag sAndroidWindowControlsOverlay = newCachedFlag(ANDROID_WINDOW_CONTROLS_OVERLAY, true); public static final CachedFlag sAndroidWindowManagementWebApi = @@ -791,6 +791,8 @@ public abstract class ChromeFeatureList { newCachedFlag(ASYNC_NOTIFICATION_MANAGER, false, true); public static final CachedFlag sAsyncNotificationManagerForDownload = newCachedFlag(ASYNC_NOTIFICATION_MANAGER_FOR_DOWNLOAD, true); + public static final CachedFlag sAutoDocPipPermissionPromptAndroid = + newCachedFlag(AUTO_DOC_PIP_PERMISSION_PROMPT_ANDROID, false); public static final CachedFlag sAutomotiveBackButtonBarStreamline = newCachedFlag(AUTOMOTIVE_BACK_BUTTON_BAR_STREAMLINE, /* defaultValue= */ true); public static final CachedFlag sBackgroundThreadPoolFieldTrial = @@ -808,9 +810,7 @@ public abstract class ChromeFeatureList { newCachedFlag(CACHE_IS_MULTI_INSTANCE_API_31_ENABLED, true); public static final CachedFlag sCctAdaptiveButton = newCachedFlag( - CCT_ADAPTIVE_BUTTON, - /* defaultValue= */ false, - /* defaultValueInTests= */ true); + CCT_ADAPTIVE_BUTTON, /* defaultValue= */ true, /* defaultValueInTests= */ true); public static final CachedFlag sCctAuthTab = newCachedFlag(CCT_AUTH_TAB, true); public static final CachedFlag sCctAuthTabDisableAllExternalIntents = newCachedFlag(CCT_AUTH_TAB_DISABLE_ALL_EXTERNAL_INTENTS, false); @@ -848,6 +848,8 @@ public abstract class ChromeFeatureList { newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ENABLED_BY_EMBEDDER, true); public static final CachedFlag sCctRealtimeEngagementEventsInBackground = newCachedFlag(CCT_REALTIME_ENGAGEMENT_EVENTS_IN_BACKGROUND, true); + public static final CachedFlag sCctResetTimeoutAllowed = + newCachedFlag(CCT_RESET_TIMEOUT_ALLOWED, true); public static final CachedFlag sCctResetTimeoutEnabled = newCachedFlag(CCT_RESET_TIMEOUT_ENABLED, false); public static final CachedFlag sCctResizableForThirdParties = @@ -858,7 +860,7 @@ public abstract class ChromeFeatureList { public static final CachedFlag sChromeItemPickerUi = newCachedFlag(CHROME_ITEM_PICKER_UI, /* defaultValue= */ false); public static final CachedFlag sChromeNativeUrlOverriding = - newCachedFlag(CHROME_NATIVE_URL_OVERRIDING, /* defaultValue= */ false); + newCachedFlag(CHROME_NATIVE_URL_OVERRIDING, BuildConfig.IS_DESKTOP_ANDROID); public static final CachedFlag sClampAutomotiveScaling = newCachedFlag(CLAMP_AUTOMOTIVE_SCALING, true); public static final CachedFlag sClankStartupLatencyInjection = @@ -867,8 +869,6 @@ public abstract class ChromeFeatureList { newCachedFlag(CLEAR_INTENT_WHEN_RECREATED, /* defaultValue= */ false); public static final CachedFlag sCommandLineOnNonRooted = newCachedFlag(COMMAND_LINE_ON_NON_ROOTED, false); - public static final CachedFlag sContextMenuPictureInPictureAndroid = - newCachedFlag(CONTEXT_MENU_PICTURE_IN_PICTURE_ANDROID, false); public static final CachedFlag sCpaTabGroupingButton = newCachedFlag( CONTEXTUAL_PAGE_ACTION_TAB_GROUPING, @@ -876,6 +876,11 @@ public abstract class ChromeFeatureList { /* defaultValueInTests= */ true); public static final CachedFlag sCrossDeviceTabPaneAndroid = newCachedFlag(CROSS_DEVICE_TAB_PANE_ANDROID, false); + public static final CachedFlag sDefaultBrowserPromoEntryPoint = + newCachedFlag( + DEFAULT_BROWSER_PROMO_ENTRY_POINT, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sDesktopAndroidLinkCapturing = newCachedFlag(DESKTOP_ANDROID_LINK_CAPTURING, false); public static final CachedFlag sDesktopUAOnConnectedDisplay = @@ -899,10 +904,10 @@ public abstract class ChromeFeatureList { newCachedFlag(EDGE_TO_EDGE_USE_BACKUP_NAVBAR_INSETS, true); public static final CachedFlag sEducationalTipDefaultBrowserPromoCard = newCachedFlag(EDUCATIONAL_TIP_DEFAULT_BROWSER_PROMO_CARD, false, true); - public static final CachedFlag sEducationalTipModule = - newCachedFlag(EDUCATIONAL_TIP_MODULE, true); + public static final CachedFlag sEnableAndroidSidePanel = + newCachedFlag(ENABLE_ANDROID_SIDE_PANEL, false); public static final CachedFlag sEnableExclusiveAccessManager = - newCachedFlag(ENABLE_EXCLUSIVE_ACCESS_MANAGER, false, true); + newCachedFlag(ENABLE_EXCLUSIVE_ACCESS_MANAGER, true); public static final CachedFlag sEnableFullscreenToAnyScreenAndroid = newCachedFlag(ENABLE_FULLSCREEN_TO_ANY_SCREEN_ANDROID, false, true); public static final CachedFlag sEnableXAxisActivityTransition = @@ -952,7 +957,8 @@ public abstract class ChromeFeatureList { public static final CachedFlag sLockTopControlsOnLargeTabletsV2 = newCachedFlag( LOCK_TOP_CONTROLS_ON_LARGE_TABLETS_V2, - /* defaultValue= */ false); + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true); public static final CachedFlag sMaliciousApkDownloadCheck = newCachedFlag( @@ -971,8 +977,6 @@ public abstract class ChromeFeatureList { MOVE_TO_FRONT_IN_LAUNCH_INTENT_DISPATCHER, /* defaultValue= */ false, /* defaultValueInTests= */ true); - public static final CachedFlag sMultiInstanceApplicationStatusCleanup = - newCachedFlag(MULTI_INSTANCE_APPLICATION_STATUS_CLEANUP, false); public static final CachedFlag sMvcUpdateViewWhenModelChanged = newCachedFlag( MVC_UPDATE_VIEW_WHEN_MODEL_CHANGED, @@ -987,20 +991,24 @@ public abstract class ChromeFeatureList { public static final CachedFlag sNewTabPageCustomizationToolbarButton = newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON, false); public static final CachedFlag sNewTabPageCustomizationV2 = - newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_V2, false); + newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_V2, false, true); public static final CachedFlag sNotificationTrampoline = newCachedFlag(NOTIFICATION_TRAMPOLINE, false); + public static final CachedFlag sNotificationTrampolineNoNewTask = + newCachedFlag(NOTIFICATION_TRAMPOLINE_NO_NEW_TASK, false); public static final CachedFlag sPCctMinimumHeight = newCachedFlag(PCCT_MINIMUM_HEIGHT, true); public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); public static final CachedFlag sPersistAcrossReboots = newCachedFlag(PERSIST_ACROSS_REBOOTS, false); + public static final CachedFlag sPersistAcrossRebootsDebugLogs = + newCachedFlag(PERSIST_ACROSS_REBOOTS_DEBUG_LOGS, false); public static final CachedFlag sPostGetMyMemoryStateToBackground = newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, true); public static final CachedFlag sPowerSavingModeBroadcastReceiverInBackground = newCachedFlag(POWER_SAVING_MODE_BROADCAST_RECEIVER_IN_BACKGROUND, true); public static final CachedFlag sPriceChangeModule = newCachedFlag(PRICE_CHANGE_MODULE, true); public static final CachedFlag sProtectRecentlyVisibleTab = - newCachedFlag(PROTECT_RECENTLY_VISIBLE_TAB, false); + newCachedFlag(PROTECT_RECENTLY_VISIBLE_TAB, BuildConfig.IS_DESKTOP_ANDROID); public static final CachedFlag sReportNotificationContentDetectionData = newCachedFlag( REPORT_NOTIFICATION_CONTENT_DETECTION_DATA, @@ -1019,7 +1027,9 @@ public abstract class ChromeFeatureList { newCachedFlag(SEARCH_IN_CCT_ALTERNATE_TAP_HANDLING_IF_ENABLED_BY_EMBEDDER, true); public static final CachedFlag sSearchInCCTIfEnabledByEmbedder = newCachedFlag(SEARCH_IN_CCT_IF_ENABLED_BY_EMBEDDER, true); - public static final CachedFlag sSearchInSettings = newCachedFlag(SEARCH_IN_SETTINGS, false); + public static final CachedFlag sSearchInSettings = + newCachedFlag( + SEARCH_IN_SETTINGS, /* defaultValue= */ false, /* defaultValueInTests= */ true); public static final CachedFlag sSettingsMultiColumn = newCachedFlag( SETTINGS_MULTI_COLUMN, @@ -1048,8 +1058,6 @@ public abstract class ChromeFeatureList { /* defaultValueInTests= */ true); public static final CachedFlag sTabStripDensityChangeAndroid = newCachedFlag(TAB_STRIP_DENSITY_CHANGE_ANDROID, true); - public static final CachedFlag sTabStripIncognitoMigration = - newCachedFlag(TAB_STRIP_INCOGNITO_MIGRATION, BuildConfig.IS_DESKTOP_ANDROID, true); public static final CachedFlag sTabWindowManagerReportIndicesMismatch = newCachedFlag(TAB_WINDOW_MANAGER_REPORT_INDICES_MISMATCH, true); public static final CachedFlag sTestDefaultDisabled = @@ -1131,9 +1139,7 @@ public abstract class ChromeFeatureList { sAndroidThemeResourceProvider, sAndroidTwaOriginDisplay, sAndroidUseAdminsForEnterpriseInfo, - sAndroidWebAppHeaderForStandaloneMode, sAndroidWebAppLaunchHandler, - sAndroidWebAppMenuButton, sAndroidWindowControlsOverlay, sAndroidWindowManagementWebApi, sAndroidWindowPopupCustomTabUi, @@ -1143,6 +1149,7 @@ public abstract class ChromeFeatureList { sAppSpecificHistory, sAppSpecificHistoryViewIntent, sAsyncNotificationManager, + sAutoDocPipPermissionPromptAndroid, sAutomotiveBackButtonBarStreamline, sBackgroundThreadPoolFieldTrial, sBlockIntentsWhileLocked, @@ -1167,6 +1174,7 @@ public abstract class ChromeFeatureList { sCctOpenInBrowserButtonIfAllowedByEmbedder, sCctOpenInBrowserButtonIfEnabledByEmbedder, sCctRealtimeEngagementEventsInBackground, + sCctResetTimeoutAllowed, sCctResetTimeoutEnabled, sCctResizableForThirdParties, sCctTabModalDialog, @@ -1177,9 +1185,9 @@ public abstract class ChromeFeatureList { sClankStartupLatencyInjection, sClearIntentWhenRecreated, sCommandLineOnNonRooted, - sContextMenuPictureInPictureAndroid, sCpaTabGroupingButton, sCrossDeviceTabPaneAndroid, + sDefaultBrowserPromoEntryPoint, sDesktopAndroidLinkCapturing, sDesktopUAOnConnectedDisplay, sDocumentPictureInPictureAPI, @@ -1190,7 +1198,7 @@ public abstract class ChromeFeatureList { sEdgeToEdgeTablet, sEdgeToEdgeUseBackupNavbarInsets, sEducationalTipDefaultBrowserPromoCard, - sEducationalTipModule, + sEnableAndroidSidePanel, sEnableExclusiveAccessManager, sEnableFullscreenToAnyScreenAndroid, sEnableXAxisActivityTransition, @@ -1213,7 +1221,6 @@ public abstract class ChromeFeatureList { sMostVisitedTilesCustomization, sMostVisitedTilesReselect, sMoveToFrontInLaunchIntentDispatcher, - sMultiInstanceApplicationStatusCleanup, sMvcUpdateViewWhenModelChanged, sNavBarColorAnimation, sNewTabPageCustomization, @@ -1221,9 +1228,11 @@ public abstract class ChromeFeatureList { sNewTabPageCustomizationToolbarButton, sNewTabPageCustomizationV2, sNotificationTrampoline, + sNotificationTrampolineNoNewTask, sPCctMinimumHeight, sPaintPreviewDemo, sPersistAcrossReboots, + sPersistAcrossRebootsDebugLogs, sPostGetMyMemoryStateToBackground, sPowerSavingModeBroadcastReceiverInBackground, sPriceChangeModule, @@ -1244,7 +1253,6 @@ public abstract class ChromeFeatureList { sTabModelInitFixes, sTabStorageSqlitePrototype, sTabStripDensityChangeAndroid, - sTabStripIncognitoMigration, sTabWindowManagerReportIndicesMismatch, sToolbarPhoneAnimationRefactor, sToolbarSnapshotRefactor, @@ -1279,6 +1287,8 @@ public abstract class ChromeFeatureList { // keep-sorted start group_prefixes=["public static final MutableFlagWithSafeDefault"] public static final MutableFlagWithSafeDefault sAdaptiveButtonInTopToolbarCustomizationV2 = newMutableFlagWithSafeDefault(ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2, false); + public static final MutableFlagWithSafeDefault sAlwaysDrawCompositedToolbarHairline = + newMutableFlagWithSafeDefault(ALWAYS_DRAW_COMPOSITED_TOOLBAR_HAIRLINE, true); public static final MutableFlagWithSafeDefault sAndroidAppearanceSettings = newMutableFlagWithSafeDefault(ANDROID_APPEARANCE_SETTINGS, false); public static final MutableFlagWithSafeDefault sAndroidBookmarkBar = @@ -1288,17 +1298,17 @@ public abstract class ChromeFeatureList { public static final MutableFlagWithSafeDefault sAndroidContextMenuDuplicateTabs = newMutableFlagWithSafeDefault(ANDROID_CONTEXT_MENU_DUPLICATE_TABS, false); public static final MutableFlagWithSafeDefault sAndroidPinnedTabs = - newMutableFlagWithSafeDefault(ANDROID_PINNED_TABS, false); + newMutableFlagWithSafeDefault(ANDROID_PINNED_TABS, true); public static final MutableFlagWithSafeDefault sAndroidPinnedTabsTabletTabStrip = - newMutableFlagWithSafeDefault(ANDROID_PINNED_TABS_TABLET_TAB_STRIP, false); + newMutableFlagWithSafeDefault(ANDROID_PINNED_TABS_TABLET_TAB_STRIP, true); public static final MutableFlagWithSafeDefault sAndroidTabHighlighting = - newMutableFlagWithSafeDefault(ANDROID_TAB_HIGHLIGHTING, false); + newMutableFlagWithSafeDefault(ANDROID_TAB_HIGHLIGHTING, true); public static final MutableFlagWithSafeDefault sAndroidTipsNotifications = newMutableFlagWithSafeDefault(ANDROID_TIPS_NOTIFICATIONS, false); + public static final MutableFlagWithSafeDefault sAndroidTipsNotificationsV2 = + newMutableFlagWithSafeDefault(ANDROID_TIPS_NOTIFICATIONS_V2, false); public static final MutableFlagWithSafeDefault sBrowserControlsEarlyResize = newMutableFlagWithSafeDefault(BROWSER_CONTROLS_EARLY_RESIZE, false); - public static final MutableFlagWithSafeDefault sBrowserControlsInViz = - newMutableFlagWithSafeDefault(BROWSER_CONTROLS_IN_VIZ, true); public static final MutableFlagWithSafeDefault sBrowserControlsPersistsOnCvh = newMutableFlagWithSafeDefault(BROWSER_CONTROLS_PERSISTS_ON_CVH, true); // Default to false. The logic behind the flag is not relevant when native is not initialized. @@ -1316,8 +1326,8 @@ public abstract class ChromeFeatureList { newMutableFlagWithSafeDefault(ENABLE_SWIPE_TO_SWITCH_PANE, false); public static final MutableFlagWithSafeDefault sEscCancelDrag = newMutableFlagWithSafeDefault(ESC_CANCEL_DRAG, false); - public static final MutableFlagWithSafeDefault sHubBackButton = - newMutableFlagWithSafeDefault(HUB_BACK_BUTTON, false); + public static final MutableFlagWithSafeDefault sGlic = + newMutableFlagWithSafeDefault(GLIC, false); public static final MutableFlagWithSafeDefault sIncognitoNtpSmallIcon = newMutableFlagWithSafeDefault(INCOGNITO_NTP_SMALL_ICON, false); public static final MutableFlagWithSafeDefault sIncognitoScreenshot = @@ -1330,8 +1340,6 @@ public abstract class ChromeFeatureList { newMutableFlagWithSafeDefault(ANDROID_NO_VISIBLE_HINT_FOR_DIFFERENT_TLD, true); public static final MutableFlagWithSafeDefault sOmniboxAutofocusOnIncognitoNtp = newMutableFlagWithSafeDefault(OMNIBOX_AUTOFOCUS_ON_INCOGNITO_NTP, false); - public static final MutableFlagWithSafeDefault sReadAloudTapToSeek = - newMutableFlagWithSafeDefault(READALOUD_TAP_TO_SEEK, false); public static final MutableFlagWithSafeDefault sRecentlyClosedTabsAndWindows = newMutableFlagWithSafeDefault(RECENTLY_CLOSED_TABS_AND_WINDOWS, false); public static final MutableFlagWithSafeDefault sRecordIncognitoNtpTimeToFirstNavigationMetric = @@ -1342,7 +1350,7 @@ public abstract class ChromeFeatureList { public static final MutableFlagWithSafeDefault sRobustWindowManagement = newMutableFlagWithSafeDefault(ROBUST_WINDOW_MANAGEMENT, false); public static final MutableFlagWithSafeDefault sShowNewTabAnimations = - newMutableFlagWithSafeDefault(SHOW_NEW_TAB_ANIMATIONS, false); + newMutableFlagWithSafeDefault(SHOW_NEW_TAB_ANIMATIONS, true); public static final MutableFlagWithSafeDefault sShowTabListAnimations = newMutableFlagWithSafeDefault(SHOW_TAB_LIST_ANIMATIONS, false); public static final MutableFlagWithSafeDefault sSuppressToolbarCapturesAtGestureEnd = @@ -1350,7 +1358,7 @@ public abstract class ChromeFeatureList { public static final MutableFlagWithSafeDefault sTabBottomSheet = newMutableFlagWithSafeDefault(TAB_BOTTOM_SHEET, false); public static final MutableFlagWithSafeDefault sTabFreezingUsesDiscard = - newMutableFlagWithSafeDefault(TAB_FREEZING_USES_DISCARD, false); + newMutableFlagWithSafeDefault(TAB_FREEZING_USES_DISCARD, true); public static final MutableFlagWithSafeDefault sTabSwitcherGroupSuggestionsAndroid = newMutableFlagWithSafeDefault(TAB_SWITCHER_GROUP_SUGGESTIONS_ANDROID, false); public static final MutableFlagWithSafeDefault sTabSwitcherGroupSuggestionsTestModeAndroid = @@ -1513,7 +1521,11 @@ public abstract class ChromeFeatureList { false); public static final IntCachedFeatureParam sCctResetMinimumTimeoutMinutes = - newIntCachedFeatureParam(CCT_RESET_TIMEOUT_ENABLED, "minimum_reset_timeout_mins", 1); + newIntCachedFeatureParam(CCT_RESET_TIMEOUT_ENABLED, "minimum_reset_timeout_mins", 30); + + public static final IntCachedFeatureParam sCctResetMinimumTimeoutMinutesAllowed = + newIntCachedFeatureParam( + CCT_RESET_TIMEOUT_ALLOWED, "minimum_reset_timeout_mins_allowed", 30); public static final StringCachedFeatureParam sCctResizableForThirdPartiesAllowlistEntries = newStringCachedFeatureParam(CCT_RESIZABLE_FOR_THIRD_PARTIES, "allowlist_entries", ""); @@ -1531,6 +1543,14 @@ public abstract class ChromeFeatureList { newIntCachedFeatureParam( CLANK_STARTUP_LATENCY_INJECTION, "latency_injection_amount_millis", 0); + /* + A cached param that determines whether we show the menu item (entry point) in the app menu + (3-dot menu). + */ + public static final BooleanCachedFeatureParam sDefaultBrowserPromoEntryPointShowAppMenu = + newBooleanCachedFeatureParam( + DEFAULT_BROWSER_PROMO_ENTRY_POINT, "show_app_menu_item", true); + /** * Cached param whether we disable animations for color changes to the edge-to-edge bottom chin. */ @@ -1660,7 +1680,7 @@ public abstract class ChromeFeatureList { public static final IntCachedFeatureParam sReadAloudReadabilityDelayMsAfterPageLoad = newIntCachedFeatureParam( - READALOUD, "read_aloud_readability_delay_ms_after_page_load", 1500); + READALOUD, "read_aloud_readability_delay_ms_after_page_load", 500); public static final BooleanCachedFeatureParam sShouldConsiderLanguageInOverviewReadability = newBooleanCachedFeatureParam( @@ -1678,6 +1698,10 @@ public abstract class ChromeFeatureList { "start_surface_return_time_on_tablet_seconds", 14400); // 4 hours + public static final BooleanCachedFeatureParam sTabStorageSqlitePrototypeAllowFullMigration = + newBooleanCachedFeatureParam( + TAB_STORAGE_SQLITE_PROTOTYPE, "allow_full_migration", false); + public static final BooleanCachedFeatureParam sTabStorageSqlitePrototypeAuthoritativeReadSource = newBooleanCachedFeatureParam( @@ -1747,11 +1771,13 @@ public abstract class ChromeFeatureList { sCctGoogleBottomBarVariantLayoutsVariantLayout, sCctMinimizedEnabledByDefaultManufacturerExcludeList, sCctResetMinimumTimeoutMinutes, + sCctResetMinimumTimeoutMinutesAllowed, sCctResizableForThirdPartiesAllowlistEntries, sCctResizableForThirdPartiesDefaultPolicy, sCctResizableForThirdPartiesDenylistEntries, sClampAutomotiveScalingMaxScalingPercentage, sClankStartupLatencyInjectionAmountMs, + sDefaultBrowserPromoEntryPointShowAppMenu, sDesktopUAAllowedOnExternalDisplayForOem, sEdgeToEdgeBottomChinOemList, sEdgeToEdgeBottomChinOemMinVersions, @@ -1789,6 +1815,7 @@ public abstract class ChromeFeatureList { sShouldConsiderLanguageInOverviewReadability, sStartSurfaceReturnTimeTabletSecs, sTabGroupListContainment, + sTabStorageSqlitePrototypeAllowFullMigration, sTabStorageSqlitePrototypeAuthoritativeReadSource, sTabWindowManagerReportIndicesMismatchTimeDiffThresholdMs, sTopControlsRefactorNarrowWidthTransitionThreshold, @@ -1803,11 +1830,11 @@ public abstract class ChromeFeatureList { /* Alphabetical: */ public static final MutableBooleanParamWithSafeDefault sAndroidPinnedTabsSearchBoxMovement = - sAndroidPinnedTabs.newBooleanParam("search_box_movement", false); + sAndroidPinnedTabs.newBooleanParam("search_box_movement", true); public static final MutableBooleanParamWithSafeDefault sAndroidPinnedTabsSearchBoxSquishAnimation = - sAndroidPinnedTabs.newBooleanParam("search_box_squish_animation", false); + sAndroidPinnedTabs.newBooleanParam("search_box_squish_animation", true); public static final MutableIntParamWithSafeDefault sDisableInstanceLimitMemoryThresholdMb = sDisableInstanceLimit.newIntParam("max_instance_limit_memory_threshold_mb", 6500); @@ -1839,6 +1866,9 @@ public abstract class ChromeFeatureList { public static final MutableBooleanParamWithSafeDefault sAndroidTabHighlightingForceShiftClick = sAndroidTabHighlighting.newBooleanParam("force_shift_click", false); + public static final MutableBooleanParamWithSafeDefault sTabBottomSheetDontShowFusebox = + sTabBottomSheet.newBooleanParam("dont_show_fusebox", false); + public static final MutableBooleanParamWithSafeDefault sRobustWindowManagementBulkClose = sRobustWindowManagement.newBooleanParam("bulk_close", false); } 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 ac6bae96..868bfe15 100755 --- a/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc +++ b/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc @@ -11,6 +11,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" +#include "base/json/values_util.h" #include "base/time/time.h" #include "base/trace_event/trace_event.h" #include "build/android_buildflags.h" @@ -24,6 +25,7 @@ #include "chrome/browser/browser_process_impl.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/component_updater/component_updater_prefs.h" +#include "chrome/browser/contextual_cueing/contextual_cueing_prefs.h" #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/engagement/important_sites_util.h" #include "chrome/browser/enterprise/reporting/prefs.h" @@ -44,7 +46,6 @@ #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" #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/notifications/notification_display_service_impl.h" #include "chrome/browser/notifications/notifier_state_tracker.h" @@ -75,6 +76,7 @@ #include "chrome/browser/signin/chrome_signin_client.h" #include "chrome/browser/ssl/ssl_config_service_manager.h" #include "chrome/browser/subscription_eligibility/subscription_eligibility_prefs.h" +#include "chrome/browser/themes/theme_service.h" #include "chrome/browser/tracing/chrome_tracing_delegate.h" #include "chrome/browser/ui/browser_ui_prefs.h" #include "chrome/browser/ui/network_profile_bubble.h" @@ -82,6 +84,7 @@ #include "chrome/browser/ui/prefs/prefs_tab_helper.h" #include "chrome/browser/ui/safety_hub/safety_hub_prefs.h" #include "chrome/browser/ui/search_engines/keyword_editor_controller.h" +#include "chrome/browser/ui/tabs/projects/projects_prefs.h" #include "chrome/browser/ui/toolbar/chrome_labs/chrome_labs_prefs.h" #include "chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.h" #include "chrome/browser/ui/toolbar/toolbar_pref_names.h" @@ -182,7 +185,7 @@ #include "components/supervised_user/core/browser/supervised_user_preferences.h" #include "components/supervised_user/core/common/pref_names.h" #include "components/sync/base/pref_names.h" -#include "components/sync/service/device_statistics_tracker.h" +#include "components/sync/service/device_statistics_scheduler.h" #include "components/sync/service/glue/sync_transport_data_prefs.h" #include "components/sync/service/sync_prefs.h" #include "components/sync_device_info/device_info_prefs.h" @@ -257,7 +260,6 @@ #include "components/webapps/browser/android/install_prompt_prefs.h" #else // BUILDFLAG(IS_ANDROID) #include "chrome/browser/actor/ui/actor_ui_state_manager_prefs.h" -#include "chrome/browser/contextual_cueing/contextual_cueing_prefs.h" #include "chrome/browser/gcm/gcm_product_util.h" #include "chrome/browser/hid/hid_policy_allowed_devices.h" #include "chrome/browser/intranet_redirect_detector.h" @@ -533,14 +535,14 @@ #endif #if BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) -#include "chrome/browser/on_device_translation/pref_names.h" +#include "components/on_device_translation/public/pref_names.h" #endif // BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) #if BUILDFLAG(ENTERPRISE_DATA_CONTROLS) #include "components/enterprise/data_controls/core/browser/prefs.h" #endif -#if BUILDFLAG(ENABLE_GLIC) || BUILDFLAG(ENABLE_GLIC_ANDROID) +#if BUILDFLAG(ENABLE_GLIC) #include "chrome/browser/glic/glic_pref_names.h" #endif @@ -956,6 +958,28 @@ constexpr char kTPCDExperimentProfileState[] = "tpcd_experiment.profile_state"; constexpr char kDeviceName[] = "device_name"; #endif // BUILDFLAG(IS_CHROMEOS) +#if BUILDFLAG(IS_ANDROID) +// Deprecated 01/2026. +constexpr char kDSEGeolocationSettingDeprecated[] = "dse_geolocation_setting"; +constexpr char kDSEPermissionsSettings[] = "dse_permissions_settings"; +constexpr char kDSEWasDisabledByPolicy[] = "dse_was_disabled_by_policy"; +#endif // BUILDFLAG(IS_ANDROID) + +// Deprecated 01/2026. +constexpr char kCookieClearOnExitMigrationNoticeComplete[] = + "signin.cookie_clear_on_exit_migration_notice_complete"; + +// Deprecated 02/2026. +// Note that these were replaced by local state prefs of the same names and +// functions: those should not be removed. Only the profile prefs registered +// here are deprecated. +constexpr char kGlicGuestUrlPresetAutopush[] = "glic.guest_url_preset_autopush"; +constexpr char kGlicGuestUrlPresetPreprod[] = "glic.guest_url_preset_preprod"; +constexpr char kGlicGuestUrlPresetProd[] = "glic.guest_url_preset_prod"; + +// Deprecated 02/2026. +constexpr char kProfilesDeletedOld[] = "profiles.profiles_deleted"; + // Register local state used only for migration (clearing or moving to a new // key). void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { @@ -1077,13 +1101,14 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { // Deprecated 01/2026. registry->RegisterStringPref(kDeviceName, ""); #endif // BUILDFLAG(IS_CHROMEOS) + + // Deprecated 02/2026. + registry->RegisterListPref(kProfilesDeletedOld); } // Register prefs used only for migration (clearing or moving to a new key). void RegisterProfilePrefsForMigration( user_prefs::PrefRegistrySyncable* registry) { - chrome_browser_net::secure_dns::RegisterProbesSettingBackupPref(registry); - // Deprecated 01/2025. registry->RegisterBooleanPref(kCompactModeEnabled, false); @@ -1318,6 +1343,22 @@ void RegisterProfilePrefsForMigration( // Deprecated 12/2025. registry->RegisterBooleanPref(kCloudPrintProxyEnabled, true); registry->RegisterStringPref(kCloudPrintEmail, std::string()); + +#if BUILDFLAG(IS_ANDROID) + // Deprecated 01/2026. + registry->RegisterDictionaryPref(kDSEGeolocationSettingDeprecated); + registry->RegisterDictionaryPref(kDSEPermissionsSettings); + registry->RegisterBooleanPref(kDSEWasDisabledByPolicy, false); +#endif // BUILDFLAG(IS_ANDROID) + + // Deprecated 01/2026. + registry->RegisterBooleanPref(kCookieClearOnExitMigrationNoticeComplete, + false); + + // Deprecated 02/2026. + registry->RegisterStringPref(kGlicGuestUrlPresetAutopush, std::string()); + registry->RegisterStringPref(kGlicGuestUrlPresetPreprod, std::string()); + registry->RegisterStringPref(kGlicGuestUrlPresetProd, std::string()); } } // namespace @@ -1447,6 +1488,10 @@ void RegisterLocalState(PrefRegistrySimple* registry) { registry->RegisterIntegerPref(prefs::kLastWhatsNewVersion, 0); #endif // BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_EXTENSIONS) + extensions::ExtensionPrefs::RegisterBrowserPrefs(registry); +#endif + #if BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) on_device_translation::RegisterLocalStatePrefs(registry); #endif // BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) @@ -1561,6 +1606,11 @@ void RegisterLocalState(PrefRegistrySimple* registry) { MediaFoundationServiceMonitor::RegisterPrefs(registry); os_crypt_async::AppBoundEncryptionProviderWin::RegisterLocalPrefs(registry); webnn::RegisterLocalPrefs(registry); + registry->RegisterBooleanPref(prefs::kForegroundLaunchOnLogin, false); + registry->RegisterBooleanPref(prefs::kStartupLaunchInfobarAccepted, false); + registry->RegisterTimePref(prefs::kStartupLaunchInfobarLastDeclinedTime, + base::Time()); + registry->RegisterIntegerPref(prefs::kStartupLaunchInfobarDeclinedCount, 0); #endif // BUILDFLAG(IS_WIN) #if BUILDFLAG(ENABLE_DOWNGRADE_PROCESSING) @@ -1619,7 +1669,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { registry->RegisterIntegerPref(prefs::kChromeDataRegionSetting, 0); -#if BUILDFLAG(ENABLE_GLIC) || BUILDFLAG(ENABLE_GLIC_ANDROID) +#if BUILDFLAG(ENABLE_GLIC) glic::prefs::RegisterLocalStatePrefs(registry); #endif @@ -1630,6 +1680,12 @@ void RegisterLocalState(PrefRegistrySimple* registry) { registry->RegisterBooleanPref(prefs::kSilentPrintingEnabled, false); #endif // !BUILDFLAG(IS_ANDROID) + registry->RegisterListPref( + prefs::kManagedLocalNetworkAccessIpAddressSpaceOverrides); + registry->RegisterBooleanPref( + policy::policy_prefs::kLocalNetworkAccessPermissionsPolicyDefaultEnabled, + false); + // This is intentionally last. RegisterLocalStatePrefsForMigration(registry); } @@ -1655,6 +1711,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, chrome_browser_net::NetErrorTabHelper::RegisterProfilePrefs(registry); chrome_prefs::RegisterProfilePrefs(registry); collaboration::prefs::RegisterProfilePrefs(registry); + contextual_cueing::prefs::RegisterProfilePrefs(registry); commerce::RegisterProfilePrefs(registry); contextual_search::ContextualSearchService::RegisterProfilePrefs(registry); registry->RegisterIntegerPref(prefs::kContextualTasksNextPanelOpenCount, 0); @@ -1665,7 +1722,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, enterprise_reporting::RegisterProfilePrefs(registry); dom_distiller::DistilledPagePrefs::RegisterProfilePrefs(registry); DownloadPrefs::RegisterProfilePrefs(registry); -#if BUILDFLAG(ENABLE_GLIC) || BUILDFLAG(ENABLE_GLIC_ANDROID) +#if BUILDFLAG(ENABLE_GLIC) glic::prefs::RegisterProfilePrefs(registry); #endif permissions::PermissionHatsTriggerHelper::RegisterProfilePrefs(registry); @@ -1688,6 +1745,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, NotifierStateTracker::RegisterProfilePrefs(registry); ntp_tiles::CustomLinksManagerImpl::RegisterProfilePrefs(registry); ntp_tiles::MostVisitedSites::RegisterProfilePrefs(registry); +#if BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) + on_device_translation::RegisterProfilePrefs(registry); +#endif // BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) optimization_guide::prefs::RegisterProfilePrefs(registry); optimization_guide::model_execution::prefs::RegisterProfilePrefs(registry); PageColorsController::RegisterProfilePrefs(registry); @@ -1743,7 +1803,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, supervised_user::RegisterProfilePrefs(registry); sync_sessions::SessionSyncPrefs::RegisterProfilePrefs(registry); syncer::DeviceInfoPrefs::RegisterProfilePrefs(registry); - syncer::DeviceStatisticsTracker::RegisterProfilePrefs(registry); + syncer::DeviceStatisticsScheduler::RegisterProfilePrefs(registry); syncer::SyncPrefs::RegisterProfilePrefs(registry); syncer::SyncTransportDataPrefs::RegisterProfilePrefs(registry); TemplateURLPrepopulateData::RegisterProfilePrefs(registry); @@ -1785,7 +1845,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(ENABLE_PDF) registry->RegisterListPref(prefs::kPdfLocalFileAccessAllowedForDomains, - base::Value::List()); + base::ListValue()); registry->RegisterBooleanPref(prefs::kPdfUseSkiaRendererEnabled, true); #if BUILDFLAG(IS_CHROMEOS) registry->RegisterBooleanPref(prefs::kPdfXfaFormsEnabled, false); @@ -1826,7 +1886,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, captions::LiveTranslateController::RegisterProfilePrefs(registry); ChromeAuthenticatorRequestDelegate::RegisterProfilePrefs(registry); commerce::CommerceUiTabHelper::RegisterProfilePrefs(registry); - contextual_cueing::prefs::RegisterProfilePrefs(registry); DriveService::RegisterProfilePrefs(registry); first_run::RegisterProfilePrefs(registry); gcm::RegisterProfilePrefs(registry); @@ -1857,6 +1916,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, tab_organization_prefs::RegisterProfilePrefs(registry); tab_search_prefs::RegisterProfilePrefs(registry); ThemeColorPickerHandler::RegisterProfilePrefs(registry); + ThemeService::RegisterProfilePrefs(registry); toolbar::RegisterProfilePrefs(registry); UnifiedAutoplayConfig::RegisterProfilePrefs(registry); #endif // BUILDFLAG(IS_ANDROID) @@ -2039,6 +2099,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, CertificateManagerPageHandler::RegisterProfilePrefs(registry); actor::ui::RegisterProfilePrefs(registry); + + projects::RegisterProfilePrefs(registry); #endif // !BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(webauthn::pref_names::kAllowWithBrokenCerts, @@ -2084,8 +2146,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, registry->RegisterIntegerPref(prefs::kLensOverlayStartCount, 0); - registry->RegisterDictionaryPref(prefs::kReportingEndpoints); - registry->RegisterBooleanPref(prefs::kViewSourceLineWrappingEnabled, false); // TODO(crbug.com/442891187): Move these to appropriate manager files when @@ -2279,6 +2339,26 @@ void MigrateObsoleteLocalStatePrefs(PrefService* local_state) { local_state->ClearPref(kDeviceName); #endif // BUILDFLAG(IS_CHROMEOS) + // Added 02/2026. + if (local_state->HasPrefPath(kProfilesDeletedOld)) { + const base::ListValue& old_list = local_state->GetList(kProfilesDeletedOld); + if (!old_list.empty()) { + ScopedListPrefUpdate update(local_state, prefs::kProfilesDeleted); + for (const auto& value : old_list) { + std::optional path = base::ValueToFilePath(value); + if (path) { + base::FilePath basename = path->BaseName(); + // Avoid the edge case where the base name is the root, e.g `/` on + // linux. + if (!basename.IsAbsolute()) { + update->Append(base::FilePathToValue(basename)); + } + } + } + } + local_state->ClearPref(kProfilesDeletedOld); + } + // Please don't delete the following line. It is used by PRESUBMIT.py. // END_MIGRATE_OBSOLETE_LOCAL_STATE_PREFS @@ -2328,24 +2408,12 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, // Check MigrateDeprecatedAutofillPrefs() to see if this is safe to remove. autofill::prefs::MigrateDeprecatedAutofillPrefs(profile_prefs); - // Added 3/2020. - // TODO(crbug.com/40122991): Remove this once the privacy settings redesign - // is fully launched. - chrome_browser_net::secure_dns::MigrateProbesSettingToOrFromBackup( - profile_prefs); - // TODO(326079444): After experiment is over, update the deprecated date and // allow this to be cleaned up. #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) MigrateDefaultBrowserLastDeclinedPref(profile_prefs); #endif -#if !BUILDFLAG(IS_ANDROID) - // Added 01/2025. - password_manager::features_util::MigrateDefaultProfileStorePref( - profile_prefs); -#endif // !BUILDFLAG(IS_ANDROID) - // Added 01/2025. profile_prefs->ClearPref(kCompactModeEnabled); @@ -2563,6 +2631,21 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, profile_prefs->ClearPref(kCloudPrintProxyEnabled); profile_prefs->ClearPref(kCloudPrintEmail); +#if BUILDFLAG(IS_ANDROID) + // Added 01/2026. + profile_prefs->ClearPref(kDSEGeolocationSettingDeprecated); + profile_prefs->ClearPref(kDSEPermissionsSettings); + profile_prefs->ClearPref(kDSEWasDisabledByPolicy); +#endif // BUILDFLAG(IS_ANDROID) + + // Added 01/2026. + profile_prefs->ClearPref(kCookieClearOnExitMigrationNoticeComplete); + + // Added 02/2026. + profile_prefs->ClearPref(kGlicGuestUrlPresetAutopush); + profile_prefs->ClearPref(kGlicGuestUrlPresetPreprod); + profile_prefs->ClearPref(kGlicGuestUrlPresetProd); + // 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 562d5196..3eef5403 100755 --- a/tools/under-control/src/chrome/browser/ui/tab_helpers.cc +++ b/tools/under-control/src/chrome/browser/ui/tab_helpers.cc @@ -4,7 +4,9 @@ #include "chrome/browser/ui/tab_helpers.h" +#include #include +#include #include #include "base/command_line.h" @@ -44,8 +46,9 @@ #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h" +#include "chrome/browser/page_content_annotations/multi_source_page_context_fetcher.h" #include "chrome/browser/page_content_annotations/page_content_annotations_service_factory.h" -#include "chrome/browser/page_content_annotations/page_content_annotations_web_contents_observer.h" +#include "chrome/browser/page_content_annotations/page_content_extraction_service_factory.h" #include "chrome/browser/page_info/about_this_site_tab_helper.h" #include "chrome/browser/page_info/page_info_features.h" #include "chrome/browser/page_load_metrics/page_load_metrics_initialize.h" @@ -75,7 +78,6 @@ #include "chrome/browser/sync/sessions/sync_sessions_web_contents_router_factory.h" #include "chrome/browser/tab_contents/navigation_metrics_recorder.h" #include "chrome/browser/task_manager/web_contents_tags.h" -#include "chrome/browser/tpcd/http_error_observer/http_error_tab_helper.h" #include "chrome/browser/tpcd/metadata/devtools_observer.h" #include "chrome/browser/translate/chrome_translate_client.h" #include "chrome/browser/trusted_vault/trusted_vault_encryption_keys_tab_helper.h" @@ -85,7 +87,6 @@ #include "chrome/browser/ui/focus_tab_after_navigation_helper.h" #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.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" #include "chrome/browser/ui/safety_hub/revoked_permissions_service.h" #include "chrome/browser/ui/safety_hub/revoked_permissions_service_factory.h" @@ -121,10 +122,11 @@ #include "components/javascript_dialogs/tab_modal_dialog_manager.h" #include "components/metrics/content/metrics_services_web_contents_observer.h" #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_content_annotations/content/page_content_annotations_web_contents_observer.h" +#include "components/page_content_annotations/core/page_content_extraction_types.h" #include "components/page_info/core/features.h" #include "components/password_manager/core/browser/password_manager.h" #include "components/performance_manager/embedder/performance_manager_registry.h" @@ -148,7 +150,6 @@ #include "content/public/common/buildflags.h" #include "extensions/buildflags/buildflags.h" #include "media/base/media_switches.h" -#include "net/base/features.h" #include "pdf/buildflags.h" #include "printing/buildflags/buildflags.h" #include "rlz/buildflags/buildflags.h" @@ -162,10 +163,10 @@ #include "chrome/browser/android/persisted_tab_data/language_persisted_tab_data_android.h" #include "chrome/browser/android/persisted_tab_data/sensitivity_persisted_tab_data_android.h" #include "chrome/browser/android/policy/policy_auditor_bridge.h" +#include "chrome/browser/android/tab_android.h" #include "chrome/browser/banners/android/chrome_app_banner_manager_android.h" #include "chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.h" #include "chrome/browser/facilitated_payments/ui/chrome_facilitated_payments_client.h" -#include "chrome/browser/fast_checkout/fast_checkout_tab_helper.h" #include "chrome/browser/flags/android/chrome_feature_list.h" #include "chrome/browser/loader/from_gws_navigation_and_keep_alive_request_tab_helper.h" #include "chrome/browser/net/http_auth_cache_status.h" @@ -268,10 +269,6 @@ #include "chrome/browser/rlz/chrome_rlz_tracker_web_contents_observer.h" #endif -#if BUILDFLAG(ENABLE_REPORTING) -#include "components/tpcd/enterprise_reporting/enterprise_reporting_tab_helper.h" -#endif - #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) #include "chrome/browser/safe_browsing/chrome_password_reuse_detection_manager_client.h" #include "chrome/browser/safe_browsing/chrome_safe_browsing_tab_observer_delegate.h" @@ -289,6 +286,17 @@ namespace { const char kTabContentsAttachedTabHelpersUserDataKey[] = "TabContentsAttachedTabHelpers"; +std::optional GetPageContentAnnotationsTabId( + content::WebContents* web_contents) { +#if BUILDFLAG(IS_ANDROID) + if (TabAndroid* tab = TabAndroid::FromWebContents(web_contents)) { + return tab->GetAndroidId(); + } +#endif + // TODO(crbug.com/440643544): Implement a usable tab ID for other platforms. + return std::nullopt; +} + } // namespace // static @@ -424,13 +432,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { web_contents, std::make_unique(web_contents)); CoreTabHelper::CreateForWebContents(web_contents); -#if BUILDFLAG(ENABLE_REPORTING) - if (base::FeatureList::IsEnabled( - net::features::kReportingApiEnableEnterpriseCookieIssues)) { - tpcd::enterprise_reporting::EnterpriseReportingTabHelper:: - CreateForWebContents(web_contents); - } -#endif ExternalProtocolObserver::CreateForWebContents(web_contents); favicon::CreateContentFaviconDriverForWebContents(web_contents); FileSystemAccessPermissionRequestManager::CreateForWebContents(web_contents); @@ -469,7 +470,12 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { PageContentAnnotationsServiceFactory::GetForProfile(profile); if (page_content_annotations_service) { page_content_annotations::PageContentAnnotationsWebContentsObserver:: - CreateForWebContents(web_contents); + CreateForWebContents( + web_contents, *page_content_annotations_service, + page_content_annotations::PageContentExtractionServiceFactory:: + GetForProfile(profile), + base::BindRepeating(&page_content_annotations::FetchPageContext), + base::BindRepeating(&GetPageContentAnnotationsTabId)); #if BUILDFLAG(IS_ANDROID) // If enabled, save sensitivity data for each non-incognito android tab. @@ -499,15 +505,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { performance_manager::PerformanceManagerRegistry::GetInstance()) { pm_registry->SetPageType(web_contents, performance_manager::PageType::kTab); } - // The tab interface is only needed on Desktop to support Split View. - tabs::TabInterface* desktop_tab_interface = -#if BUILDFLAG(IS_ANDROID) - nullptr; -#else - tabs::TabInterface::MaybeGetFromContents(web_contents); -#endif // BUILDFLAG(IS_ANDROID) - permissions::PermissionRequestManager::CreateForWebContents( - web_contents, desktop_tab_interface); + permissions::PermissionRequestManager::CreateForWebContents(web_contents); permissions::PermissionRecoverySuccessRateTracker::CreateForWebContents( web_contents); // The PopupBlockerTabHelper has an implicit dependency on @@ -586,7 +584,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { SupervisedUserNavigationObserver::CreateForWebContents(web_contents); } #endif - HttpErrorTabHelper::CreateForWebContents(web_contents); tasks::TaskTabHelper::CreateForWebContents(web_contents); tpcd::metadata::TpcdMetadataDevtoolsObserver::CreateForWebContents( web_contents); @@ -620,7 +617,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { *web_contents)); } ContextMenuHelper::CreateForWebContents(web_contents); - FastCheckoutTabHelper::CreateForWebContents(web_contents); if (base::FeatureList::IsEnabled( page_load_metrics::features::kBeaconLeakageLogging)) { @@ -660,9 +656,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { std::make_unique( web_contents)); ManagePasswordsUIController::CreateForWebContents(web_contents); - if (PrivacySandboxPromptHelper::ProfileRequiresPrompt(profile)) { - PrivacySandboxPromptHelper::CreateForWebContents(web_contents); - } if (SearchEngineChoiceTabHelper::IsHelperNeeded()) { SearchEngineChoiceTabHelper::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 66bcdcde..f01c9040 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 @@ -158,6 +158,7 @@ namespace autofillPrivate { FLIGHT_RESERVATION_DEPARTURE_AIRPORT, FLIGHT_RESERVATION_ARRIVAL_AIRPORT, FLIGHT_RESERVATION_DEPARTURE_DATE, + ADDRESS_HOME_ZIP_AND_CITY, MAX_VALID_FIELD_TYPE }; @@ -416,6 +417,10 @@ namespace autofillPrivate { DOMString guid; // The nickname of the entity instance. DOMString nickname; + // Whether the user should be authenticated to view the entity instance. + boolean? shouldAuthenticateToView; + // Whether the entity is (or should be) stored in Google Wallet servers. + boolean? storedInWallet; }; // Contains the minimum amount of information needed to display an entity @@ -466,15 +471,15 @@ namespace autofillPrivate { callback GetCreditCardCallback = void(optional CreditCardEntry card); callback CheckForDeviceAuthCallback = void(boolean isDeviceAuthAvailable); callback LoadEntityInstancesCallback = void(EntityInstanceWithLabels[] entries); - callback GetEntityInstanceByGuid = void(EntityInstance entityInstance); + callback GetEntityInstanceByGuid = void(optional EntityInstance entityInstance); callback GetWritableEntityTypesCallback = void(EntityType[] entityTypes); - callback GetAllAttributeTypesForEntityTypeNameCallback = - void(AttributeType[] attributeTypes); + callback GetAttributeTypesCallback = void(AttributeType[] attributeTypes); callback GetAutofillAiOptInStatusCallback = void(boolean optedIn); callback SetAutofillAiOptInStatusCallback = void(boolean success); callback GetWalletablePassDetectionOptInStatusCallback = void(boolean optedIn); callback SetWalletablePassDetectionOptInStatusCallback = void(boolean success); callback GetPayOverTimeIssuerListCallback = void(PayOverTimeIssuerEntry[] entries); + callback AuthenticateUserBeforeViewingEntityDataCallback = void(boolean success); interface Functions { // Gets currently signed-in user profile info, no value is returned if @@ -571,6 +576,15 @@ namespace autofillPrivate { // will then flip the mandatory auth toggle. static void authenticateUserAndFlipMandatoryAuthToggle(); + // Authenticates the user before viewing entity data. Returns true if + // authentication was successful or if no authentication was required. + static void authenticateUserBeforeViewingEntityData( + AuthenticateUserBeforeViewingEntityDataCallback callback); + + // Authenticates the user before updating the reauth requirement when + // viewing sensitive entity information. + static void toggleAutofillAiReauthRequirement(); + // Returns the local card based on the `guid` provided. The user could // also be challenged with a reauth if that is enabled. For a successful // auth, the local card is returned otherwise return a null object. @@ -603,7 +617,8 @@ namespace autofillPrivate { // Returns all of the user's entity instances with labels. static void loadEntityInstances(LoadEntityInstancesCallback callback); - // Returns the entity instance by its guid. + // Returns the entity instance by its guid or null if authentication is required to + // view the entity and the attempted Reauth was unsuccessful. static void getEntityInstanceByGuid( DOMString guid, GetEntityInstanceByGuid callback); @@ -616,7 +631,15 @@ namespace autofillPrivate { // adding/editing a new entity instance. static void getAllAttributeTypesForEntityTypeName( long entityTypeName, - GetAllAttributeTypesForEntityTypeNameCallback callback); + GetAttributeTypesCallback callback); + + // Returns the list of attributes satisfying the entity type's import + // requirements. The list represents a disjunction: presenting any one + // attribute is sufficient. Returns an empty list if there are no + // requirements. + static void getRequiredAttributeTypesForEntityTypeName( + long entityTypeName, + GetAttributeTypesCallback callback); // Gets the AutofillAI opt-in status for the current user. static void getAutofillAiOptInStatus( diff --git a/tools/under-control/src/chrome/common/extensions/api/developer_private.idl b/tools/under-control/src/chrome/common/extensions/api/developer_private.idl index 0a9e404c..de49ac2a 100755 --- a/tools/under-control/src/chrome/common/extensions/api/developer_private.idl +++ b/tools/under-control/src/chrome/common/extensions/api/developer_private.idl @@ -210,10 +210,6 @@ namespace developerPrivate { // Only populated for extensions that can be affected by the runtime host // permissions feature. RuntimeHostPermissions? runtimeHostPermissions; - - // True if the extension can access site data through host permissions or - // API permissions such as activeTab. - boolean canAccessSiteData; }; dictionary ExtensionInfo { diff --git a/tools/under-control/src/chrome/common/extensions/api/downloads.idl b/tools/under-control/src/chrome/common/extensions/api/downloads.idl index a5e3b08d..295aaddc 100755 --- a/tools/under-control/src/chrome/common/extensions/api/downloads.idl +++ b/tools/under-control/src/chrome/common/extensions/api/downloads.idl @@ -149,7 +149,12 @@ namespace downloads { // For use by the Secure Enterprise Browser extension. When required, Chrome // will block the download to disc and download the file directly to Google // Drive. - forceSaveToGdrive + forceSaveToGdrive, + + // For use by the Secure Enterprise Browser extension. When required, Chrome + // will block the download to disc and download the file directly to + // OneDrive. + forceSaveToOnedrive }; //
in_progress
diff --git a/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl b/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl index fe6e3b18..dde3cbce 100755 --- a/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl +++ b/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl @@ -372,7 +372,7 @@ namespace passwordsPrivate { callback ExceptionListCallback = void(ExceptionEntry[] exceptions); callback ExportProgressStatusCallback = void(ExportProgressStatus status); callback VoidCallback = void(); - callback IsAccountStorageEnabledCallback = void(boolean enabled); + callback IsAccountStorageActiveCallback = void(boolean enabled); callback ShouldShowAccountStorageSettingToggleCallback = void(boolean show); callback PasswordCheckStatusCallback = void(PasswordCheckStatus status); callback ImportPasswordsCallback = void(ImportResults results); @@ -508,9 +508,9 @@ namespace passwordsPrivate { static void requestExportProgressStatus( ExportProgressStatusCallback callback); - // Requests the account-storage enabled state of the current user. - static void isAccountStorageEnabled( - IsAccountStorageEnabledCallback callback); + // Requests the account-storage active state of the current user. + static void isAccountStorageActive( + IsAccountStorageActiveCallback callback); // Triggers the enabling / disabling flow for the account storage. static void setAccountStorageEnabled(boolean enabled); @@ -621,9 +621,9 @@ namespace passwordsPrivate { // |status|: The progress status and an optional UI message. static void onPasswordsFileExportProgress(PasswordExportProgress status); - // Fired when the enabled state for the account-scoped storage has changed. - // |enabled|: The new enabled state. - static void onAccountStorageEnabledStateChanged(boolean enabled); + // Fired when the active state for the account-scoped storage has changed. + // |enabled|: The new active state. + static void onAccountStorageActiveStateChanged(boolean enabled); // Fired when the visibility of the account storage toggle in Settings // should change. diff --git a/tools/under-control/src/chrome/common/extensions/api/side_panel.idl b/tools/under-control/src/chrome/common/extensions/api/side_panel.idl index 08f9b615..afc66fce 100755 --- a/tools/under-control/src/chrome/common/extensions/api/side_panel.idl +++ b/tools/under-control/src/chrome/common/extensions/api/side_panel.idl @@ -87,8 +87,11 @@ namespace sidePanel { long? windowId; // The tab in which to close the side panel. If a tab-specific side panel - // is open in the specified tab, it will be closed for that tab. - // At least one of this or windowId must be provided. + // is open in the specified tab, it will be closed for that tab. If only the + // global side panel is open, the promise returned by the call to + // close() will reject with an error. This behavior was changed + // in Chrome 145, with prior versions falling back to closing the global + // panel. At least one of this or windowId must be provided. long? tabId; }; @@ -179,7 +182,7 @@ namespace sidePanel { // |options|: Specifies the context in which to close the side panel. // |callback|: Returns a Promise which resolves when the side panel has been // closed. - [nodoc] static void close( + static void close( CloseOptions options, VoidCallback callback); }; diff --git a/tools/under-control/src/chrome/common/extensions/api/webrtc_logging_private.idl b/tools/under-control/src/chrome/common/extensions/api/webrtc_logging_private.idl index fca8e3dd..b48fa55e 100755 --- a/tools/under-control/src/chrome/common/extensions/api/webrtc_logging_private.idl +++ b/tools/under-control/src/chrome/common/extensions/api/webrtc_logging_private.idl @@ -103,14 +103,6 @@ namespace webrtcLoggingPrivate { DOMString logId, GenericDoneCallback callback); - // Uploads a previously kept log that was stored via a call to store(). - // The caller needs to know the logId as was originally provided in the - // call to store(). - static void uploadStored(RequestInfo request, - DOMString securityOrigin, - DOMString logId, - UploadDoneCallback callback); - // Uploads the log and the RTP dumps, if they exist. Logging and RTP dumping // must be stopped before this function is called. static void upload(RequestInfo request, 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 1a0da18e..a9d53bb5 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 @@ -119,6 +119,7 @@ #include "components/subresource_filter/content/renderer/subresource_filter_agent.h" #include "components/subresource_filter/content/renderer/unverified_ruleset_dealer.h" #include "components/subresource_filter/core/common/common_features.h" +#include "components/surface_embed/buildflags/buildflags.h" #include "components/variations/net/variations_http_headers.h" #include "components/variations/variations_switches.h" #include "components/version_info/version_info.h" @@ -225,9 +226,9 @@ #include "third_party/blink/public/web/web_settings.h" #endif // BUIDFLAG(ENABLE_EXTENSIONS_CORE) -#if BUILDFLAG(ENABLE_GUEST_VIEW) +#if BUILDFLAG(ENABLE_EXTENSIONS) && BUILDFLAG(ENABLE_GUEST_VIEW) #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.h" -#endif // BUILDFLAG(ENABLE_GUEST_VIEW) +#endif // BUILDFLAG(ENABLE_EXTENSIONS) && BUILDFLAG(ENABLE_GUEST_VIEW) #if BUILDFLAG(ENABLE_PDF) #include "components/pdf/renderer/internal_plugin_renderer_helpers.h" @@ -256,6 +257,11 @@ #endif // BUILDFLAG(HAS_SPELLCHECK_PANEL) #endif // BUILDFLAG(ENABLE_SPELLCHECK) +#if BUILDFLAG(ENABLE_SURFACE_EMBED) +#include "components/surface_embed/common/features.h" +#include "components/surface_embed/renderer/create_plugin.h" +#endif // BUILDFLAG(ENABLE_SURFACE_EMBED) + #if BUILDFLAG(ENABLE_LIBRARY_CDMS) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) #include "chrome/renderer/media/chrome_key_systems.h" #endif @@ -693,13 +699,13 @@ void ChromeContentRendererClient::RenderFrameCreated( associated_interfaces); } -#if BUILDFLAG(ENABLE_GUEST_VIEW) +#if BUILDFLAG(ENABLE_EXTENSIONS) && BUILDFLAG(ENABLE_GUEST_VIEW) associated_interfaces ->AddInterface( base::BindRepeating( &extensions::MimeHandlerViewContainerManager::BindReceiver, base::Unretained(render_frame))); -#endif +#endif // BUILDFLAG(ENABLE_EXTENSIONS) && BUILDFLAG(ENABLE_GUEST_VIEW) // Owned by |render_frame|. new page_load_metrics::MetricsRenderFrameObserver(render_frame); @@ -811,7 +817,7 @@ bool ChromeContentRendererClient::IsPluginHandledExternally( mime_type, &plugin_info); // TODO(ekaramad): Not continuing here due to a disallowed status should take // us to CreatePlugin. See if more in depths investigation of |status| is - // necessary here (see https://crbug.com/965747). For now, returning false + // necessary here (see https://crbug.com/41460326). For now, returning false // should take us to CreatePlugin after HTMLPlugInElement which is called // through HTMLPlugInElement::LoadPlugin code path. if (plugin_info->status != chrome::mojom::PluginStatus::kAllowed) { @@ -842,10 +848,6 @@ bool ChromeContentRendererClient::IsPluginHandledExternally( } bool ChromeContentRendererClient::IsDomStorageDisabled() const { - if (!base::FeatureList::IsEnabled(features::kPdfEnforcements)) { - return false; - } - #if BUILDFLAG(ENABLE_PDF) && BUILDFLAG(ENABLE_EXTENSIONS) // PDF renderers shouldn't need to access DOM storage interfaces. Note that // it's still possible to access localStorage or sessionStorage in a PDF @@ -877,6 +879,19 @@ bool ChromeContentRendererClient::OverrideCreatePlugin( const WebPluginParams& params, WebPlugin** plugin) { std::string orig_mime_type = params.mime_type.Utf8(); + +#if BUILDFLAG(ENABLE_SURFACE_EMBED) + if (base::FeatureList::IsEnabled(surface_embed::features::kSurfaceEmbed)) { + GURL url = render_frame->GetWebFrame()->GetDocument().Url(); + if (url.SchemeIs(content::kChromeUIScheme) && + url.host() == chrome::kChromeUIWebuiBrowserHost) { + if (surface_embed::MaybeCreatePlugin(render_frame, params, plugin)) { + return true; + } + } + } +#endif // BUILDFLAG(ENABLE_SURFACE_EMBED) + #if BUILDFLAG(ENABLE_EXTENSIONS) // Used for plugins. if (!extensions::ExtensionsRendererClient::Get()->OverrideCreatePlugin( 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 295deafc..8a583243 100755 --- a/tools/under-control/src/components/policy/resources/templates/policies.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policies.yaml @@ -1285,7 +1285,7 @@ policies: 1284: SystemShortcutBehavior 1285: DeletingUndecryptablePasswordsEnabled 1286: StandardizedBrowserZoomEnabled - 1287: ReportingEndpoints + 1287: '' 1288: PrintingLPACSandboxEnabled 1289: ShowGeminiIntroScreenEnabled 1290: DeviceRestrictionSchedule @@ -1403,7 +1403,7 @@ policies: 1402: GeminiActOnWebSettings 1403: LocalAuthFactorsComplexity 1404: ProxyOverrideRules - 1405: LocalAuthFactors + 1405: AllowedLocalAuthFactors 1406: EnableProxyOverrideRulesForAllUsers 1407: DefaultIdleDetectionSetting 1408: IdleDetectionAllowedForUrls @@ -1416,13 +1416,21 @@ policies: 1415: DeviceLoginScreenPreferSlowCiphers 1416: SearchContentSharingSettings 1417: StaticStorageQuotaEnabled - 1418: SaaSReportDomainUrlsForBrowser - 1419: SaaSReportDomainUrlsForProfile + 1418: SaasUsageReportingDomainUrlsForBrowsers + 1419: SaasUsageReportingDomainUrlsForProfiles 1420: GeminiActOnWebAllowedForURLs 1421: GeminiActOnWebBlockedForURLs 1422: WebAppInstallByUserEnabled - 1423: '' + 1423: LocalNetworkAccessIpAddressSpaceOverrides 1424: RestrictPdfSaveToGoogleDriveAccountsToPattern + 1425: LocalNetworkAllowedForUrls + 1426: LocalNetworkBlockedForUrls + 1427: LoopbackNetworkAllowedForUrls + 1428: LoopbackNetworkBlockedForUrls + 1429: XSLTEnabled + 1430: LocalNetworkAccessPermissionsPolicyDefaultEnabled + 1431: ForceForegroundPriorityForAllTabs + 1432: WebRtcDiagnosticLogCollectionAllowedForOrigins atomic_groups: 1: Homepage @@ -1478,7 +1486,7 @@ atomic_groups: 51: WebPrintingSettings 52: DirectSocketsSettings 53: SkyVaultSettings - 54: BrowserEventReporting + 54: '' 55: SmartCardConnectSettings 56: WebRtc 57: ControlledFrameSettings diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveCaptionEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveCaptionEnabled.yaml index ded06db0..ad37db79 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveCaptionEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveCaptionEnabled.yaml @@ -29,5 +29,6 @@ schema: type: boolean supported_on: - chrome.*:140- +- chrome_os:145- tags: [] type: main \ No newline at end of file diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveTranslateEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveTranslateEnabled.yaml index 2dbcefdb..09440ca8 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveTranslateEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/LiveTranslateEnabled.yaml @@ -31,5 +31,6 @@ schema: type: boolean supported_on: - chrome.*:133- +- chrome_os:145- tags: [] type: main \ No newline at end of file diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/.group.details.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/.group.details.yaml deleted file mode 100755 index 04362d2c..00000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/.group.details.yaml +++ /dev/null @@ -1,2 +0,0 @@ -caption: Browser Event Reporting -desc: Controls settings for Browser Event Reporting. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/ReportingEndpoints.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/ReportingEndpoints.yaml deleted file mode 100755 index 095f59fb..00000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/ReportingEndpoints.yaml +++ /dev/null @@ -1,26 +0,0 @@ -caption: Reporting Endpoints -default: {} -desc: |- - Allows you to configure the list of Reporting API Endpoints[1] where - enterprise reports can be sent. - - [1] https://www.w3.org/TR/reporting-1/#endpoint -example_value: - endpoint-1: https://example.com - reporting-endpoint: https://reporting.example/cookie-issues -features: - dynamic_refresh: true - per_profile: true -owners: -- sandormajor@chromium.org -- selya@google.com -schema: - type: object - additionalProperties: - type: string -future_on: -- android -- chrome.* -- chrome_os -tags: [] -type: dict diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/policy_atomic_groups.yaml deleted file mode 100755 index f8aeadc8..00000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/BrowserEventReporting/policy_atomic_groups.yaml +++ /dev/null @@ -1,4 +0,0 @@ -BrowserEventReporting: - caption: Browser Event Reporting - policies: - - ReportingEndpoints diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForBrowser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForBrowsers.yaml similarity index 95% rename from tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForBrowser.yaml rename to tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForBrowsers.yaml index db48b5d4..545093bc 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForBrowser.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForBrowsers.yaml @@ -2,7 +2,7 @@ caption: Specifies a list of SaaS domains that will be reported for managed brow desc: |- This policy controls $1Google Chrome reporting of SaaS domain visits and content transfers for a managed browser. - When the policy is set, the URLs matching SaaS domains will be used to generate report and uploaded. Unmatched URLs will be ignored. + When the policy is set, the URLs matching SaaS domains will be used to generate report. Unmatched URLs will be ignored. When the policy is not set or set to an empty list, no report will be generated. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForProfile.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForProfiles.yaml similarity index 95% rename from tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForProfile.yaml rename to tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForProfiles.yaml index 3d3e3a72..e86565e8 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForProfile.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForProfiles.yaml @@ -2,7 +2,7 @@ caption: Specifies a list of SaaS domains that will be reported for managed prof desc: |- This policy controls $1Google Chrome reporting of SaaS domain visits and content transfers for a managed profile. - When the policy is set, the URLs matching SaaS domains will be used to generate report and uploaded. Unmatched URLs will be ignored. + When the policy is set, the URLs matching SaaS domains will be used to generate report. Unmatched URLs will be ignored. When the policy is not set or set to an empty list, no report will be generated. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenAllowedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenAllowedForUrls.yaml index 624471a5..b70741a0 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenAllowedForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenAllowedForUrls.yaml @@ -24,6 +24,7 @@ features: dynamic_refresh: true per_profile: true future_on: +- android - fuchsia owners: - file://third_party/blink/renderer/core/fullscreen/OWNERS diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenBlockedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenBlockedForUrls.yaml index d0ca728b..e4ef15ad 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenBlockedForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutomaticFullscreenBlockedForUrls.yaml @@ -24,6 +24,7 @@ features: dynamic_refresh: true per_profile: true future_on: +- android - fuchsia owners: - file://third_party/blink/renderer/core/fullscreen/OWNERS diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultIdleDetectionSetting.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultIdleDetectionSetting.yaml index b92bdc20..7802ce99 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultIdleDetectionSetting.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultIdleDetectionSetting.yaml @@ -25,10 +25,10 @@ label: Idle detection owners: - pastarmovj@chromium.org - zmin@chromium.org -future_on: -- chrome.* -- chrome_os -- android +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- tags: - website-sharing type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultThirdPartyStoragePartitioningSetting.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultThirdPartyStoragePartitioningSetting.yaml index 94e745c3..e8069709 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultThirdPartyStoragePartitioningSetting.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/DefaultThirdPartyStoragePartitioningSetting.yaml @@ -9,7 +9,7 @@ desc: |- Use ThirdPartyStoragePartitioningBlockedForOrigins to disable third-party storage partitioning for specific top-level origins. For detailed information on third-party storage partitioning, please see https://developers.google.com/privacy-sandbox/cookies/storage-partitioning. - This will be removed in Chrome 145, and the requestStorageAccess method is recommended for use instead: https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess. Feedback can be left at https://crbug.com/425248669. + This was removed in Chrome 145, and the requestStorageAccess method is recommended for use instead: https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess. Feedback can be left at https://crbug.com/425248669. example_value: 1 features: dynamic_refresh: true @@ -32,9 +32,9 @@ schema: - 2 type: integer supported_on: -- android:113- -- chrome.*:113- -- chrome_os:113- +- android:113-145 +- chrome.*:113-145 +- chrome_os:113-145 deprecated: true tags: [] type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionAllowedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionAllowedForUrls.yaml index 8fec768d..cb16a667 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionAllowedForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionAllowedForUrls.yaml @@ -19,10 +19,10 @@ schema: type: array items: type: string -future_on: -- chrome.* -- chrome_os -- android +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- tags: - website-sharing type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionBlockedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionBlockedForUrls.yaml index 24d6e928..d17edc68 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionBlockedForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/IdleDetectionBlockedForUrls.yaml @@ -19,10 +19,10 @@ schema: type: array items: type: string -future_on: -- chrome.* -- chrome_os -- android +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- tags: - website-sharing type: list 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 211f5605..de8ac4a9 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 @@ -7,11 +7,6 @@ desc: |- If this policy is set to Enabled or not set, Blob URLs will be partitioned. If this policy is set to Disabled, Blob URLs won't be partitioned. - If storage partitioning is disabled for a given top-level origin by either - ThirdPartyStoragePartitioningBlockedForOrigins - or DefaultThirdPartyStoragePartitioningSetting, - then Blob URLs will also not be partitioned. - 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 diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ThirdPartyStoragePartitioningBlockedForOrigins.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ThirdPartyStoragePartitioningBlockedForOrigins.yaml index 02b9811e..b8ebe8d5 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ThirdPartyStoragePartitioningBlockedForOrigins.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ThirdPartyStoragePartitioningBlockedForOrigins.yaml @@ -8,7 +8,7 @@ desc: |- For detailed information on third-party storage partitioning, please see https://developers.google.com/privacy-sandbox/cookies/storage-partitioning. - This will be removed in Chrome 145, and the requestStorageAccess method is recommended for use instead: https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess. Feedback can be left at https://crbug.com/425248669. + This was removed in Chrome 145, and the requestStorageAccess method is recommended for use instead: https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess. Feedback can be left at https://crbug.com/425248669. example_value: - www.example.com - '[*.]example.edu' @@ -25,9 +25,9 @@ schema: type: string type: array supported_on: -- android:113- -- chrome.*:113- -- chrome_os:113- +- android:113-145 +- chrome.*:113-145 +- chrome_os:113-145 deprecated: true tags: [] type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/policy_atomic_groups.yaml index 17483223..83f86ac9 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/policy_atomic_groups.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/policy_atomic_groups.yaml @@ -59,11 +59,6 @@ SensorsSettings: - DefaultSensorsSetting - SensorsAllowedForUrls - SensorsBlockedForUrls -ThirdPartyStoragePartitioningSettings: - caption: Third-party storage partitioning settings - policies: - - DefaultThirdPartyStoragePartitioningSetting - - ThirdPartyStoragePartitioningBlockedForOrigins WebUsbSettings: caption: Web USB settings policies: diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowCiphers.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowCiphers.yaml index fa8b4a21..efb9c73e 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowCiphers.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowCiphers.yaml @@ -33,8 +33,8 @@ items: owners: - file://crypto/OWNERS - trusty-transport@chromium.org -future_on: -- chrome_os +supported_on: +- chrome_os:146- schema: enum: - cnsa diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowKexAlgorithms.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowKexAlgorithms.yaml index 1cbb95b4..b3de60e6 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowKexAlgorithms.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/DeviceLoginScreenPreferSlowKexAlgorithms.yaml @@ -35,8 +35,8 @@ items: owners: - file://crypto/OWNERS - trusty-transport@chromium.org -future_on: -- chrome_os +supported_on: +- chrome_os:146- schema: enum: - cnsa2 diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowCiphers.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowCiphers.yaml index f53f2a0a..94c6e19a 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowCiphers.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowCiphers.yaml @@ -30,10 +30,10 @@ items: owners: - file://crypto/OWNERS - trusty-transport@chromium.org -future_on: -- android -- chrome.* -- chrome_os +supported_on: +- android:146- +- chrome.*:146- +- chrome_os:146- schema: enum: - cnsa diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowKexAlgorithms.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowKexAlgorithms.yaml index bb825026..253d9cc1 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowKexAlgorithms.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CryptographyCompliance/PreferSlowKexAlgorithms.yaml @@ -32,10 +32,10 @@ items: owners: - file://crypto/OWNERS - trusty-transport@chromium.org -future_on: -- android -- chrome.* -- chrome_os +supported_on: +- android:146- +- chrome.*:146- +- chrome_os:146- schema: enum: - cnsa2 diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/DeviceUpdate/DeviceExtendedAutoUpdateEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/DeviceUpdate/DeviceExtendedAutoUpdateEnabled.yaml index ed268961..bdede29c 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/DeviceUpdate/DeviceExtendedAutoUpdateEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/DeviceUpdate/DeviceExtendedAutoUpdateEnabled.yaml @@ -1,5 +1,5 @@ owners: -- artyomchen@chromium.org +- vsavu@google.com - chromeos-commercial-remote-management@google.com caption: Enable/disable Extended Automatic Updates diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml index e0bd24e4..703da088 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml @@ -9,12 +9,12 @@ desc: |- External extensions and their installation are documented at https://developer.chrome.com/docs/extensions/how-to/distribute/install-extensions. + Note: This policy only applies to platforms that support extensions. + example_value: true features: dynamic_refresh: false per_profile: true -future_on: -- android items: - caption: Block installation of external extensions value: true @@ -27,5 +27,6 @@ schema: type: boolean supported_on: - chrome.*:80- +- android:146- tags: [] type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml index a5d7038e..04ffb101 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml @@ -2,34 +2,35 @@ caption: Configure allowed app/extension types desc: |- Setting the policy controls which apps and extensions may be installed in $1Google Chrome, which hosts they can interact with, and limits runtime access. - Leaving the policy unset results in no restrictions on the acceptable extension and app types. + Leaving the policy unset results in no restrictions on the acceptable extension and app types. - Extensions and apps which have a type that's not on the list won't be installed. Each value should be one of these strings: + Extensions and apps which have a type that's not on the list won't be installed. Each value should be one of these strings: - * "extension" + * "extension" - * "theme" + * "theme" - * "user_script" + * "user_script" - * "hosted_app" + * "hosted_app" - * "legacy_packaged_app" + * "legacy_packaged_app" - * "platform_app" + * "platform_app" - See the $1Google Chrome extensions documentation for more information on these types. + See the $1Google Chrome extensions documentation for more information on these types. - Versions earlier than 75 that use multiple comma separated extension IDs aren't supported and are skipped. The rest of the policy applies. + Versions earlier than 75 that use multiple comma separated extension IDs aren't supported and are skipped. The rest of the policy applies. + + Note: This policy also affects extensions and apps to be force-installed using ExtensionInstallForcelist. + + Note: This policy only applies to platforms that support extensions. - Note: This policy also affects extensions and apps to be force-installed using ExtensionInstallForcelist. example_value: - hosted_app features: dynamic_refresh: true per_profile: true -future_on: -- android items: - caption: Extension name: extension @@ -57,5 +58,6 @@ schema: supported_on: - chrome.*:25- - chrome_os:25- +- android:146- tags: [] type: string-enum-list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionDeveloperModeSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionDeveloperModeSettings.yaml index 63537016..3f37e043 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionDeveloperModeSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionDeveloperModeSettings.yaml @@ -8,9 +8,12 @@ desc: |- If this policy is set, DeveloperToolsAvailability can no longer control extensions developer mode. + Note: This policy only applies to platforms that support extensions. + supported_on: - chrome.*:128- - chrome_os:128- +- android:146- features: dynamic_refresh: true per_profile: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallAllowlist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallAllowlist.yaml index 68d09b62..b9058852 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallAllowlist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallAllowlist.yaml @@ -2,17 +2,18 @@ caption: Configure extension installation allow list desc: |- Setting the policy specifies which extensions are not subject to the blocklist. - A blocklist value of * means all extensions are blocked and users can only install extensions listed in the allow list. + A blocklist value of * means all extensions are blocked and users can only install extensions listed in the allow list. + + By default, all extensions are allowed. But, if you prohibited extensions by policy, use the list of allowed extensions to change that policy. + + Note: This policy only applies to platforms that support extensions. - By default, all extensions are allowed. But, if you prohibited extensions by policy, use the list of allowed extensions to change that policy. example_value: - extension_id1 - extension_id2 features: dynamic_refresh: true per_profile: true -future_on: -- android label: Extension IDs to exempt from the blocklist owners: - rdevlin.cronin@chromium.org @@ -24,5 +25,6 @@ schema: supported_on: - chrome.*:86- - chrome_os:86- +- android:146- tags: [] type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallBlocklist.yaml index 771d0455..25c22baf 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallBlocklist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallBlocklist.yaml @@ -2,17 +2,18 @@ caption: Configure extension installation blocklist desc: |- Allows you to specify which extensions the users can NOT install. Extensions already installed will be disabled if blocked, without a way for the user to enable them. Once an extension disabled due to the blocklist is removed from it, it will automatically get re-enabled. - A blocklist value of '*' means all extensions are blocked by default. Extensions that are explicitly listed in the allowlist are allowed if they are signed (packed). All unpacked extensions are blocked. + A blocklist value of '*' means all extensions are blocked by default. Extensions that are explicitly listed in the allowlist are allowed if they are signed (packed). All unpacked extensions are blocked. + + If this policy is left not set the user can install any extension in $1Google Chrome. + + Note: This policy only applies to platforms that support extensions. - If this policy is left not set the user can install any extension in $1Google Chrome. example_value: - extension_id1 - extension_id2 features: dynamic_refresh: true per_profile: true -future_on: -- android label: Extension IDs the user should be prevented from installing (or * for all) owners: - lazyboy@chromium.org @@ -24,5 +25,6 @@ schema: supported_on: - chrome.*:86- - chrome_os:86- +- android:146- tags: [] type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallForcelist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallForcelist.yaml index 4bc3f295..658261ae 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallForcelist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallForcelist.yaml @@ -19,14 +19,15 @@ desc: |- On macOS instances, apps and extensions from outside the Chrome Web Store can only be force installed if the instance is managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. Note: This policy doesn't apply to Incognito mode. Read about hosting extensions ( https://developer.chrome.com/extensions/hosting ). + + Note: This policy only applies to platforms that support extensions. + example_value: - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;https://clients2.google.com/service/update2/crx - abcdefghijklmnopabcdefghijklmnop features: dynamic_refresh: true per_profile: true -future_on: -- android label: Extension/App IDs and update URLs to be silently installed owners: - karandeepb@chromium.org @@ -38,6 +39,7 @@ schema: supported_on: - chrome.*:9- - chrome_os:11- +- android:146- tags: - full-admin-access type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml index 6233a889..e32140bc 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml @@ -2,16 +2,17 @@ caption: Configure extension, app, and user script install sources desc: |- Setting the policy specifies which URLs may install extensions, apps, and themes. Before $1Google Chrome 21, users could click on a link to a *.crx file, and $1Google Chrome would offer to install the file after a few warnings. Afterwards, such files must be downloaded and dragged to the $1Google Chrome settings page. This setting allows specific URLs to have the old, easier installation flow. - Each item in this list is an extension-style match pattern (see https://developer.chrome.com/extensions/match_patterns). Users can easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (the referrer) must be allowed by these patterns. + Each item in this list is an extension-style match pattern (see https://developer.chrome.com/extensions/match_patterns). Users can easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (the referrer) must be allowed by these patterns. + + ExtensionInstallBlocklist takes precedence over this policy. That is, an extension on the blocklist won't be installed, even if it happens from a site on this list. + + Note: This policy only applies to platforms that support extensions. - ExtensionInstallBlocklist takes precedence over this policy. That is, an extension on the blocklist won't be installed, even if it happens from a site on this list. example_value: - https://corp.mycompany.com/* features: dynamic_refresh: true per_profile: true -future_on: -- android label: URL patterns to allow extension, app, and user script installs from owners: - dbertoni@chromium.org @@ -21,6 +22,7 @@ schema: supported_on: - chrome.*:21- - chrome_os:21- +- android:146- tags: - full-admin-access - system-security diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionSettings.yaml index f16b6bb8..a3cb2205 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionSettings.yaml @@ -7,6 +7,9 @@ desc: |- On Microsoft® Windows® instances, apps and extensions from outside the Chrome Web Store can only be forced installed if the instance is joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. On macOS instances, apps and extensions from outside the Chrome Web Store can only be force installed if the instance is managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. + + Note: This policy only applies to platforms that support extensions. + example_value: '*': allowed_types: @@ -60,8 +63,6 @@ example_value: features: dynamic_refresh: true per_profile: true -future_on: -- android owners: - finnur@chromium.org - file://extensions/OWNERS @@ -144,6 +145,7 @@ schema: supported_on: - chrome.*:62- - chrome_os:62- +- android:146- tags: [] type: dict url_schema: https://www.chromium.org/administrators/policy-list-3/extension-settings-full diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml index 9cff845f..60ed5e2a 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml @@ -7,7 +7,7 @@ desc: |- Each set in the browser's list of First-Party Sets must meet the requirements of a First-Party Set. A First-Party Set must contain a primary site and one or more member sites. A set can also contain a list of service sites that it owns, as well as a map from a site to all of its ccTLD variants. - See https://github.com/WICG/first-party-sets for more information on First-Party Sets are used by $1Google Chrome. + See https://github.com/WICG/first-party-sets for more information on how First-Party Sets are used by $1Google Chrome. All sites in a First-Party Set must be a registrable domain served over HTTPS. Each site in a First-Party Set must also be unique, meaning a site cannot be listed more than once in a First-Party Set. @@ -33,10 +33,6 @@ desc: |- All sets provided by the policy must be valid First-Party Sets, if they aren't then an appropriate error will be outputted. - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. - This is the equivalent of the RelatedWebsiteSetsOverrides policy. Either policy may be used with the same effect on the browser's behavior. Both these policies are deprecated following Related Website Sets feature deprecation in $1Google Chrome version 144. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml index daa80d7c..d12f30fe 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml @@ -19,9 +19,10 @@ example_value: - https://server:8080/path - .exact.hostname.com future_on: -- chrome.* -- chrome_os - android +supported_on: +- chrome.*:146- +- chrome_os:146- features: dynamic_refresh: true per_profile: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml index de788674..64e798a6 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml @@ -19,9 +19,10 @@ example_value: - https://server:8080/path - .exact.hostname.com future_on: -- chrome.* -- chrome_os - android +supported_on: +- chrome.*:146- +- chrome_os:146- features: dynamic_refresh: true per_profile: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAILocalFoundationalModelSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAILocalFoundationalModelSettings.yaml index 91867884..2c1e0021 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAILocalFoundationalModelSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAILocalFoundationalModelSettings.yaml @@ -5,7 +5,7 @@ desc: |- When the policy is set to Allowed (0) or not set, the model is downloaded automatically, and used for inference. - When the policy is set to Disabled (1), the model will not be downloaded. + When the policy is set to Disabled (1), the model will not be downloaded, and the existing model (if already downloaded) will be deleted. On desktop platforms, model downloading can also be disabled by ComponentUpdatesEnabled. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAiDefaultSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAiDefaultSettings.yaml index c67818d5..fae584b2 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAiDefaultSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GenAiDefaultSettings.yaml @@ -3,14 +3,14 @@ caption: Set the default policy value for $1Google C desc: |- This policy defines the default setting for all covered generative AI features. For example, if this policy is set to value 1, then 1 will be the default setting for all covered generative AI features. It will not impact any manually set policy values. This setting will define the defaults for covered generative AI features in Chrome. See https://support.google.com/chrome/a?p=generative_ai_settings for the list of covered features. + Some policies, e.g. GeminiSettings, only support the states Allowed and Do not allow. In this case, if GenAiDefaultSettings is set to 0 or 1, this feature will be enabled. If GenAiDefaultSettings is set to 2, this feature will be disabled. The documentation for each feature contains more details about how it interacts with values in this policy (e.g. Gemini in Chrome - https://support.google.com/chrome/a/?p=gemini_in_chrome). This applies to the following features: Gemini in Chrome, Google Lens, and AI Mode as they are subject to their own guarantees and/or terms of service (https://support.google.com/chrome/a/?p=genai_features_chrome). + 0 = Allow the feature to be used, while allowing Google to use relevant data to improve its AI models. Relevant data may include prompts, inputs, outputs, source materials, and written feedback, depending on the feature. It may also be reviewed by humans to improve AI models. 0 is the default value, except when noted below. 1 = Allow the feature to be used, but does not allow Google to improve models using users' content (including prompts, inputs, outputs, source materials, and written feedback). 1 is the default value for Enterprise users managed by Google Admin console and for Education accounts managed by Google Workspace. 2 = Do not allow the feature. - If a covered Chrome feature does not have an equivalent policy value, the closest higher value will be used. Some policies, e.g. GeminiSettings, only support the states Allowed and Not Allowed. If GenAiDefaultSettings policy is set to 0 or 1, this feature will be allowed. If policy is set to 2, this feature will not be allowed. Please review documentation for each feature for more details about how it interacts with values in this policy. - For more information on data handling for generative AI features, please see https://support.google.com/chrome/a?p=generative_ai_settings. default: 0 diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml index 74946466..71daf346 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml @@ -7,7 +7,7 @@ desc: |- 0/unset = users can share page or file content with Google AI Mode. - 1 = users cannot share page or file content with Google AI Mode. The entry points for sharing context will be disabled or hidden. + 1 = users cannot share page or file content with Google AI Mode. The entry points for sharing context and the side panel will be disabled or hidden. This policy will be ignored when Google Search is not users' default search engine as the feature is disabled. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessAllowedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessAllowedForUrls.yaml index 5cd234a7..e43aa9a5 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessAllowedForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessAllowedForUrls.yaml @@ -3,12 +3,10 @@ owners: - cthomp@chromium.org - chrome-secure-web-and-net@chromium.org -caption: Allow sites to make requests to local network endpoints. +caption: Allow sites to make network requests to local devices and local network endpoints. desc: |- - List of URL patterns. Requests initiated from websites served by matching origins are not subject to Local Network Access checks. - - If an origin is covered by both this policy and by LocalNetworkAccessBlockedForUrls, LocalNetworkAccessBlockedForUrls takes precedence. + List of URL patterns. Network requests initiated from websites served by matching origins are not subject to Local Network Access checks. For origins not covered by the patterns specified here, the user's personal configuration will apply. @@ -17,6 +15,15 @@ desc: |- See https://wicg.github.io/local-network-access/ for Local Network Access restrictions. + There are multiple policies listing origins that impact requests to local device and local network endpoints. If an origin is matched by more than one of the following policies, the policies take precedence in the following order: + + - LocalNetworkBlockedForUrls + - LocalNetworkAllowedForUrls + - LoopbackNetworkAccessBlockedForUrls + - LoopbackNetworkAccessAllowedForUrls + - LocalNetworkAccessBlockedForUrls + - LocalNetworkAccessAllowedForUrls + example_value: - http://www.example.com:8080 - '[*.]example.edu' diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessBlockedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessBlockedForUrls.yaml index 96004980..26739918 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessBlockedForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessBlockedForUrls.yaml @@ -3,14 +3,10 @@ owners: - cthomp@chromium.org - chrome-secure-web-and-net@chromium.org -caption: Block sites from making requests to local network endpoints. +caption: Block sites from making network requests to local devices and local network endpoints. desc: |- - List of URL patterns. Requests initiated from websites served by matching origins are blocked from issuing Local Network Access requests. - - If an origin is covered by both this policy and by LocalNetworkAccessAllowedForUrls, this policy takes precedence. - - Depending on the stage of the rollout of Local Network Access, LocalNetworkAccessRestrictionsEnabled may also need to be enabled for this policy to block Local Network Access requests. + List of URL patterns. Network requests initiated from websites served by matching origins are blocked from issuing Local Network Access requests. For origins not covered by the patterns specified here, the user's personal configuration will apply. @@ -19,6 +15,15 @@ desc: |- See https://wicg.github.io/local-network-access/ for Local Network Access restrictions. + There are multiple policies listing origins that impact requests to local device and local network endpoints. If an origin is matched by more than one of the following policies, the policies take precedence in the following order: + + - LocalNetworkBlockedForUrls + - LocalNetworkAllowedForUrls + - LoopbackNetworkAccessBlockedForUrls + - LoopbackNetworkAccessAllowedForUrls + - LocalNetworkAccessBlockedForUrls + - LocalNetworkAccessAllowedForUrls + example_value: - http://www.example.com:8080 - '[*.]example.edu' diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessIpAddressSpaceOverrides.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessIpAddressSpaceOverrides.yaml new file mode 100755 index 00000000..89984c4f --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessIpAddressSpaceOverrides.yaml @@ -0,0 +1,50 @@ +owners: +- cthomp@chromium.org +- hchao@chromium.org +- chrome-swan@google.com + +caption: Override IP address space mappings + +desc: |- + This can be used to treat certain internal address ranges as "public" and thus not subject to Local Network Access checks. Conversely, this can be used to treat certain public address ranges that might be used internally as "local" so that they are protected by Local Network Access checks. + + IP address space overrides have two forms: + + [cidr]=[public|local|loopback] + + where [cidr] is a IP address range in CIDR notation (see section 3.1 of https://tools.ietf.org/html/rfc4632 for IPv4 and section 2.3 of https://tools.ietf.org/html/rfc4291 for IPv6). IPv6 addresses must be specified in URL-safe (bracketed) format. CIDR overrides apply to all ports. + + or + + [ip-address]:[port]=[public|local|loopback] + + For more information on Local Network Access, see https://wicg.github.io/local-network-access/ and https://developer.chrome.com/blog/local-network-access. + + This policy does not support dynamic refresh. + + Overrides from the command-line switch --ip-address-space-overrides take precedence over overrides set by this policy. + +example_value: +- '100.64.0.0/10=public' +- '[2001:db8::]/32=local' +- '192.168.0.1:8000=public' +- '[2001:DB8::8:800:200C:417A]:8080=local' + +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- + +features: + dynamic_refresh: false + per_profile: false + +type: list + +schema: + items: + type: string + type: array + +tags: +- system-security diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessPermissionsPolicyDefaultEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessPermissionsPolicyDefaultEnabled.yaml new file mode 100755 index 00000000..afe62448 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessPermissionsPolicyDefaultEnabled.yaml @@ -0,0 +1,46 @@ +owners: +- cthomp@chromium.org +- hchao@chromium.org +- chrome-swan@google.com + +caption: Allow Local Network Access (LNA) requests in subframes without explicit delegation + +desc: |- + By default, the permissions for Local Network Access (LNA) are only allowed to be requested in cross-origin subframes if they are explicitly delegated. This policy can be used to override this default behavior so that LNA permissions are default inherited into subframes, unless explicitly denied in permissions policy. + + If this policy is set to enabled, then subframes are by default delegated all LNA permissions policy features and can make local network requests (triggering the permission prompt). + + If this policy is set to disabled or not set, then subframes must be explicitly delegated the permissions policy feature in order make local network requests and trigger the permission prompt. + + This policy applies to the permissions policy features "local-network-access", "loopback-network", and "local-network". + + For more information on Local Network Access, see https://wicg.github.io/local-network-access/ and https://developer.chrome.com/blog/local-network-access. + + For more information on permissions policy, see https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Permissions_Policy. + +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- + +features: + dynamic_refresh: false + per_profile: false + +items: +- caption: Allow LNA requests in subframes without explicit delegation + value: true +- caption: Do not allow LNA requests in subframes without explicit delegation + value: false + +type: main + +schema: + type: boolean + +default: false + +example_value: true + +tags: +- system-security diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAllowedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAllowedForUrls.yaml new file mode 100755 index 00000000..9d54809e --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAllowedForUrls.yaml @@ -0,0 +1,47 @@ +owners: +- hchao@chromium.org +- cthomp@chromium.org +- chrome-secure-web-and-net@chromium.org + +caption: Allow sites to make network requests to local network endpoints. + +desc: |- + List of URL patterns. Network requests initiated from websites served by matching origins to local network endpoints are not subject to Local Network Access checks. + + For origins not covered by the patterns specified here, the user's personal configuration will apply. + + For detailed information on valid URL patterns, please see https://chromeenterprise.google/policies/url-patterns/. + + See https://wicg.github.io/local-network-access/ for Local Network Access restrictions. + + There are multiple policies listing origins that impact requests to local network endpoints. If an origin is matched by more than one of the following policies, the policies take precedence in the following order: + + - LocalNetworkBlockedForUrls + - LocalNetworkAllowedForUrls + - LocalNetworkAccessBlockedForUrls + - LocalNetworkAccessAllowedForUrls + +example_value: +- http://www.example.com:8080 +- '[*.]example.edu' +- '*' + +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- + +features: + dynamic_refresh: true + per_profile: true + +type: list + +schema: + items: + type: string + type: array + +tags: +- system-security diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkBlockedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkBlockedForUrls.yaml new file mode 100755 index 00000000..f1ae5a17 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkBlockedForUrls.yaml @@ -0,0 +1,47 @@ +owners: +- hchao@chromium.org +- cthomp@chromium.org +- chrome-secure-web-and-net@chromium.org + +caption: Block sites from making network requests to local network endpoints. + +desc: |- + List of URL patterns. Network requests initiated from websites served by matching origins to local network endpoints are blocked from issuing Local Network Access requests. + + For origins not covered by the patterns specified here, the user's personal configuration will apply. + + For detailed information on valid URL patterns, please see https://chromeenterprise.google/policies/url-patterns/. + + See https://wicg.github.io/local-network-access/ for Local Network Access restrictions. + + There are multiple policies listing origins that impact requests to local network endpoints. If an origin is matched by more than one of the following policies, the policies take precedence in the following order: + + - LocalNetworkBlockedForUrls + - LocalNetworkAllowedForUrls + - LocalNetworkAccessBlockedForUrls + - LocalNetworkAccessAllowedForUrls + + +example_value: +- http://www.example.com:8080 +- '[*.]example.edu' +- '*' + +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- + +features: + dynamic_refresh: true + per_profile: true + +type: list + +schema: + items: + type: string + type: array + +tags: [] diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LoopbackNetworkAllowedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LoopbackNetworkAllowedForUrls.yaml new file mode 100755 index 00000000..ade05c16 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LoopbackNetworkAllowedForUrls.yaml @@ -0,0 +1,47 @@ +owners: +- hchao@chromium.org +- cthomp@chromium.org +- chrome-secure-web-and-net@chromium.org + +caption: Allow sites to make network requests to the local device. + +desc: |- + List of URL patterns. Network requests initiated from websites served by matching origins to the local device are not subject to Local Network Access checks. + + For origins not covered by the patterns specified here, the user's personal configuration will apply. + + For detailed information on valid URL patterns, please see https://chromeenterprise.google/policies/url-patterns/. + + See https://wicg.github.io/local-network-access/ for Local Network Access restrictions. + + There are multiple policies listing origins that impact requests to the local device. If an origin is matched by more than one of the following policies, the policies take precedence in the following order: + + - LoopbackNetworkBlockedForUrls + - LoopbackNetworkAllowedForUrls + - LocalNetworkAccessBlockedForUrls + - LocalNetworkAccessAllowedForUrls + +example_value: +- http://www.example.com:8080 +- '[*.]example.edu' +- '*' + +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- + +features: + dynamic_refresh: true + per_profile: true + +type: list + +schema: + items: + type: string + type: array + +tags: +- system-security diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LoopbackNetworkBlockedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LoopbackNetworkBlockedForUrls.yaml new file mode 100755 index 00000000..9982873f --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LoopbackNetworkBlockedForUrls.yaml @@ -0,0 +1,46 @@ +owners: +- hchao@chromium.org +- cthomp@chromium.org +- chrome-secure-web-and-net@chromium.org + +caption: Block sites from making network requests to the local device. + +desc: |- + List of URL patterns. Network requests initiated from websites served by matching origins to the local device are blocked from issuing Local Network Access requests. + + For origins not covered by the patterns specified here, the user's personal configuration will apply. + + For detailed information on valid URL patterns, please see https://chromeenterprise.google/policies/url-patterns/. + + See https://wicg.github.io/local-network-access/ for Local Network Access restrictions. + + There are multiple policies listing origins that impact requests to the local device. If an origin is matched by more than one of the following policies, the policies take precedence in the following order: + + - LoopbackNetworkBlockedForUrls + - LoopbackNetworkAllowedForUrls + - LocalNetworkAccessBlockedForUrls + - LocalNetworkAccessAllowedForUrls + +example_value: +- http://www.example.com:8080 +- '[*.]example.edu' +- '*' + +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- + +features: + dynamic_refresh: true + per_profile: true + +type: list + +schema: + items: + type: string + type: array + +tags: [] diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/policy_atomic_groups.yaml index 3bbda7fb..f088b793 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/policy_atomic_groups.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/policy_atomic_groups.yaml @@ -3,5 +3,11 @@ LocalNetworkAccessSettings: policies: - LocalNetworkAccessAllowedForUrls - LocalNetworkAccessBlockedForUrls + - LocalNetworkAccessIpAddressSpaceOverrides + - LocalNetworkAllowedForUrls + - LocalNetworkBlockedForUrls - LocalNetworkAccessRestrictionsEnabled - LocalNetworkAccessRestrictionsTemporaryOptOut + - LoopbackNetworkAllowedForUrls + - LoopbackNetworkBlockedForUrls + - LocalNetworkAccessPermissionsPolicyDefaultEnabled diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoOpenFileTypes.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoOpenFileTypes.yaml index 9a7b2905..88b59157 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoOpenFileTypes.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoOpenFileTypes.yaml @@ -5,8 +5,6 @@ desc: |- Files with types that should be automatically opened will still be subject to the enabled safe browsing checks and won't be opened if they fail those checks. If this policy isn't set, only file types that a user has already specified to automatically be opened will do so when downloaded. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. example_value: - exe - txt diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserLabsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserLabsEnabled.yaml index be6609eb..66c7cf0b 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserLabsEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserLabsEnabled.yaml @@ -18,7 +18,6 @@ items: - caption: Disable browser experimental features toolbar entrypoint value: false owners: -- elainechien@chromium.org - labs-on-chrome@google.com schema: type: boolean diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CacheEncryptionEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CacheEncryptionEnabled.yaml index 5c72c994..860c0dcc 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CacheEncryptionEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CacheEncryptionEnabled.yaml @@ -12,9 +12,10 @@ owners: - valadkevich@google.com - cbe-cep-eng@google.com future_on: -- chrome.* -- chrome_os - android +supported_on: +- chrome.*:146- +- chrome_os:146- features: dynamic_refresh: true per_profile: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CameraSaveLocation.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CameraSaveLocation.yaml index 22a2f08d..9841a2f2 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CameraSaveLocation.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CameraSaveLocation.yaml @@ -12,7 +12,7 @@ desc: |- example_value: ${google_drive}/Camera features: can_be_recommended: false - dynamic_refresh: true + dynamic_refresh: false per_profile: false owners: - file://components/policy/OWNERS @@ -21,8 +21,8 @@ owners: - orko@igalia.com schema: type: string -future_on: -- chrome_os +supported_on: +- chrome_os:146- tags: - local-data-access type: string diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CommandLineFlagSecurityWarningsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CommandLineFlagSecurityWarningsEnabled.yaml index cf368390..c480ffaf 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CommandLineFlagSecurityWarningsEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/CommandLineFlagSecurityWarningsEnabled.yaml @@ -4,10 +4,6 @@ desc: |- Setting the policy to Enabled or leaving it unset means security warnings appear when potentially dangerous command-line flags are used to launch Chrome. Setting the policy to Disabled prevents security warnings from appearing when Chrome is launched with potentially dangerous command-line flags. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. example_value: true features: dynamic_refresh: false diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseCustomLabelForBrowser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseCustomLabelForBrowser.yaml index 525d0ce0..ed177fa6 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseCustomLabelForBrowser.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseCustomLabelForBrowser.yaml @@ -4,10 +4,6 @@ desc: |- This policy controls a custom label used to indicate a managed browser. For managed browsers, this label will be shown in a management disclaimer on a footer on the New Tab page. The custom label will not be translated. Note that this policy is only applied for managed browsers, so it will have no effect for managed users on unmanaged browsers. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. example_value: Chromium features: dynamic_refresh: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseLogoUrlForBrowser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseLogoUrlForBrowser.yaml index bb505435..57f3b65a 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseLogoUrlForBrowser.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseLogoUrlForBrowser.yaml @@ -6,10 +6,6 @@ desc: |- It is recommended to use the favicon (example https://www.google.com/favicon.ico) or an icon no smaller than 48 x 48 px. Note that this policy is only applied for managed browsers, so it will have no effect for managed users on unmanaged browsers. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. example_value: https://example.com/image.png features: dynamic_refresh: true 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 b0eca795..0eb3bfc2 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 @@ -17,11 +17,6 @@ desc: |- The icon_url field specifies the URL to an image that will be used on the search suggestions. A default icon will be used when this field is not set. It's recommended to use a favicon (example https://www.google.com/favicon.ico). Supported image file formats: JPEG, PNG, and ICO. The require_shortcut field specifies whether the address bar shortcut is required to see search recommendations. If required, suggestions will not be shown in the search box on the New Tab page, but will continue to be shown in the omnibox (address bar) in scoped search mode. If this field is not set, the address bar shortcut is not required. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. - example_value: name: My Search Aggregator shortcut: work diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ForceForegroundPriorityForAllTabs.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ForceForegroundPriorityForAllTabs.yaml new file mode 100755 index 00000000..f3fbd7b7 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ForceForegroundPriorityForAllTabs.yaml @@ -0,0 +1,39 @@ +caption: Force foreground priority for all tabs +desc: |- + This policy controls whether background web content is forced to run at + foreground priority. + + By default, the browser optimizes resources by deprioritizing content in + background tabs. Enabling this policy overrides that behavior, causing + background tabs to be scheduled the same way as the active tab. + + Note that forcing background content to run at foreground priority may + slightly impact the responsiveness of the active tab. + + If this policy is set to Enabled, all web content runs at foreground priority + regardless of its visibility state. + + If this policy is set to Disabled or not set, the browser determines priority + based on standard heuristics (e.g., deprioritizing content that is not + visible, not playing audio, not participating in video calls...). + +owners: +- mdanowski@google.com +- file://components/policy/OWNERS +supported_on: +- chrome.*:146- +- chrome_os:146- +features: + dynamic_refresh: false + per_profile: false +type: main +schema: + type: boolean +items: +- caption: Force foreground priority for all tabs + value: true +- caption: Use standard tab prioritization + value: false +default: false +example_value: true +tags: [] \ No newline at end of file diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml index b591368c..ec05fa69 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml @@ -8,6 +8,8 @@ desc: |- If 'Forced' is selected, pages may be opened ONLY in Incognito mode. Note that 'Forced' does not work for Android-on-Chrome + The IncognitoModeUrlAllowlist policy takes precedence over this policy and can re-enable Incognito mode for specific URLs. When Incognito mode is disabled by this policy when an allowlist is provided, Incognito mode is available only for URLs matching the allowlist, while all other pages are blocked. + Note: On iOS, if the policy is changed during a session, it will only take effect on relaunch. default: 0 example_value: 1 diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml index 7843f412..af218bbf 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml @@ -1,10 +1,18 @@ caption: Allow access to a list of URLs in Incognito mode. desc: |- - Setting the policy provides access to the listed URLs in Incognito mode, as exceptions to IncognitoModeUrlBlocklist. For example, setting IncognitoModeUrlBlocklist to * will block all requests in Incognito mode, and you can use this policy to allow access to a limited list of URLs. Use it to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths, using the format specified at ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ). The IncognitoModeUrlAllowlist policy takes precedence over IncognitoModeUrlBlocklist. This policy is limited to 1,000 entries. + Setting the policy provides access to the listed URLs in Incognito mode. Use it to open exceptions to certain URL patterns defined in IncognitoModeUrlBlocklist, using the format specified at ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ). - Leaving the policy unset allows no exceptions to IncognitoModeUrlBlocklist. + If both this policy and IncognitoModeUrlBlocklist are set, the allowlist takes precedence. If a URL matches a pattern on the allowlist, it will be allowed. If it matches a pattern on the blocklist (but not the allowlist), it will be blocked. If a URL matches neither, the general URLBlocklist/URLAllowlist policies will be used as a fallback. + + If this policy is set and IncognitoModeUrlBlocklist is not, any URL not on the allowlist will be blocked in Incognito mode. + + If IncognitoModeAvailability is set to disallow (value 1), but this policy is configured, Incognito mode will be available only for the URLs matching the allowlist. + + Leaving the policy unset allows no exceptions to IncognitoModeUrlBlocklist and IncognitoModeAvailability. This policy only affects Incognito mode. To allow URLs for all user profiles, please use the URLAllowlist policy. + + This policy is limited to 1000 entries. example_value: - example.com - https://ssl.server.com diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlBlocklist.yaml index ee342f40..36c0798a 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlBlocklist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlBlocklist.yaml @@ -1,8 +1,16 @@ caption: Block access to a list of URLs in Incognito mode. desc: |- - Setting the IncognitoModeUrlBlocklist policy stops web pages with prohibited URLs from loading in Incognito mode. Administrators can specify the list of URL patterns to be blocked. If left unset, no URLs are blocked in the Incognito mode. Up to 1,000 exceptions can be defined in IncognitoModeUrlAllowlist. See how to format a URL pattern ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ). + Setting the IncognitoModeUrlBlocklist policy stops web pages with prohibited URLs from loading in Incognito mode. Administrators can specify the list of URL patterns to be blocked. See how to format a URL pattern ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ). + + If both this and the IncognitoModeUrlAllowlist are set, the allowlist takes precedence. If a URL matches a pattern on the allowlist, it will be allowed. If it matches a pattern on the blocklist but not the allowlist, it will be blocked. If a URL matches neither, the general URLBlocklist/URLAllowlist policies will be used as a fallback. + + If the IncognitoModeUrlAllowlist policy is set and this policy is not, any URL not on the allowlist will be blocked in Incognito mode. + + If IncognitoModeAvailability is set to disallow (value 1), but the IncognitoModeUrlAllowlist policy is configured, Incognito mode will be available only for the URLs matching the allowlist. This policy only affects Incognito mode. To block URLs for all user profiles, please use the URLBlocklist policy. + + This policy is limited to 1000 entries. example_value: - example.com - https://ssl.server.com diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensCameraAssistedSearchEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensCameraAssistedSearchEnabled.yaml index 95b937ac..9555e0ff 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensCameraAssistedSearchEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensCameraAssistedSearchEnabled.yaml @@ -6,6 +6,9 @@ desc: Leaving the policy unset or setting it to Enabled allows users to search w the policy to Disabled means users can't see the Google Lens button in the search box when Google Lens camera assisted search is supported. + + Starting in $1Google Chrome 147, this policy will be deprecated. IT Admins can use SearchContentSharingSettings to control this feature going forward. + example_value: true features: dynamic_refresh: false diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MetricsReportingEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MetricsReportingEnabled.yaml index a27f3514..31df634c 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MetricsReportingEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MetricsReportingEnabled.yaml @@ -7,10 +7,6 @@ desc: |- When this policy is not set, users can choose the anonymous reporting behavior at installation or first run, and can change this setting later. - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. - (For $2Google ChromeOS, see DeviceMetricsReportingEnabled.) example_value: true features: diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPCustomBackgroundEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPCustomBackgroundEnabled.yaml index 65383b1a..b312e530 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPCustomBackgroundEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPCustomBackgroundEnabled.yaml @@ -11,6 +11,7 @@ features: per_profile: true future_on: - fuchsia +- android items: - caption: Users can customize the New Tab page background value: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterManagementNoticeEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterManagementNoticeEnabled.yaml index 6e664238..982ae1a1 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterManagementNoticeEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterManagementNoticeEnabled.yaml @@ -8,10 +8,6 @@ desc: |- If this policy is set to false, the management notice will be hidden. Note that this policy is only applied for managed browsers, so it will have no effect for managed users on unmanaged browsers. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. example_value: true features: dynamic_refresh: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/OnFileDownloadedEnterpriseConnector.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/OnFileDownloadedEnterpriseConnector.yaml index 0d271a44..f85d9f7d 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/OnFileDownloadedEnterpriseConnector.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/OnFileDownloadedEnterpriseConnector.yaml @@ -71,7 +71,6 @@ future_on: - fuchsia owners: - cbe-cep-eng@google.com -- drubery@chromium.org - domfc@chromium.org schema: items: @@ -155,6 +154,8 @@ schema: type: object type: object type: array +future_on: +- android supported_on: - chrome.*:84- - chrome_os:84- diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml index e2f76b27..7de83c78 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml @@ -16,6 +16,7 @@ owners: schema: type: string supported_on: +- chrome_os:146- - chrome.*:145- tags: [] type: string diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SafeBrowsingForTrustedSourcesEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SafeBrowsingForTrustedSourcesEnabled.yaml index 2b5d6314..12622a84 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SafeBrowsingForTrustedSourcesEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SafeBrowsingForTrustedSourcesEnabled.yaml @@ -6,8 +6,6 @@ desc: |- Setting the policy to Disabled means downloaded files won't be sent to be analyzed by Safe Browsing when it's from a trusted source. These restrictions apply to downloads triggered from webpage content, as well as the Download link menu option. These restrictions don't apply to the save or download of the currently displayed page or to saving as PDF from the printing options. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. example_value: false features: dynamic_refresh: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ShowFullUrlsInAddressBar.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ShowFullUrlsInAddressBar.yaml index 8242e27c..09c24361 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ShowFullUrlsInAddressBar.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ShowFullUrlsInAddressBar.yaml @@ -14,6 +14,7 @@ features: per_profile: true future_on: - fuchsia +- android items: - caption: Display the full URL value: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SiteSearchSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SiteSearchSettings.yaml index fc52d1f0..b103b673 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SiteSearchSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SiteSearchSettings.yaml @@ -17,11 +17,6 @@ desc: |- Users cannot create new site search entries with a shortcut previously created via this policy unless allow_user_override is set to true for the site search entry. In case of a conflict with a shortcut previously created by the user, the user setting takes precedence. However, users can still trigger the option created by the policy by typing "@" in the search bar. For example, if the user already defined "work" as a shortcut to URL1 and the policy defines "work" as a shortcut to URL2, then typing "work" in the search bar will trigger a search to URL1, but typing "@work" in the search bar will trigger a search to URL2. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. - example_value: - featured: true name: Google Wikipedia diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/XSLTEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/XSLTEnabled.yaml new file mode 100755 index 00000000..06771090 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/XSLTEnabled.yaml @@ -0,0 +1,31 @@ +caption: Control the availability of the XSLT feature +default: null +desc: |- + This policy controls the availability of the XSLT feature (the XSLTProcessor Javascript API and the XSL processing instruction). + If this policy is set to Enabled, XSLT will be available, regardless of the default state of the feature in the browser. + If this policy is set to Disabled, XSLT will be unavailable, regardless of the default state of the feature in the browser. + If this policy is left unset, XSLT availability will be determined by the browser's default settings and field trials. + This policy is a temporary measure, and will be removed in M164. +example_value: true +features: + dynamic_refresh: true + per_profile: true +items: +- caption: 'Enabled: XSLT is explicitly enabled.' + value: true +- caption: 'Disabled: XSLT is explicitly disabled.' + value: false +- caption: 'Default: XSLT availability will be determined by browser defaults and field trials.' + value: null +owners: +- masonf@chromium.org +- dom-dev@google.com +schema: + type: boolean +supported_on: +- chrome.*:146- +- chrome_os:146- +- android:146- +- webview_android:146- +tags: [] +type: main \ No newline at end of file diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/DeviceHostnameUserConfigurable.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/DeviceHostnameUserConfigurable.yaml index 80a2b92c..28285e98 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/DeviceHostnameUserConfigurable.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/DeviceHostnameUserConfigurable.yaml @@ -1,6 +1,9 @@ caption: Allow user to configure their device hostname default: false +deprecated: true desc: |- + Deprecated: The host name setting feature was removed in M145. The Administrator can still control the hostname using the DeviceHostnameTemplate policy. + Determine whether a user is allowed to configure the device hostname. If DeviceHostnameTemplate is set, the admininistrator sets hostname and the user cannot choose regardless of what this policy is set to. @@ -23,7 +26,7 @@ owners: schema: type: boolean supported_on: -- chrome_os:97- +- chrome_os:97-144 tags: [] type: main generate_device_proto: False diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PowerManagement/DevicePowerAdaptiveChargingEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PowerManagement/DevicePowerAdaptiveChargingEnabled.yaml index 30db2a88..6febf626 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PowerManagement/DevicePowerAdaptiveChargingEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PowerManagement/DevicePowerAdaptiveChargingEnabled.yaml @@ -2,7 +2,6 @@ caption: Enable adaptive charging model to hold charging process to extend batte life deprecated: true default: true -default_for_enterprise_users: false desc: |- Specifies whether an adaptive charging model is allowed to hold charging process to extend battery life. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactors.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/AllowedLocalAuthFactors.yaml similarity index 95% rename from tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactors.yaml rename to tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/AllowedLocalAuthFactors.yaml index 6661a0ad..f48a8698 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactors.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/AllowedLocalAuthFactors.yaml @@ -1,4 +1,4 @@ -caption: Configure allowed local auth factors +caption: Configure allowed local authentication factors desc: |- Setting the policy controls which local authentication factors can be used for both login and reauthentication on $2Google ChromeOS. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml index f4e30c70..fed57ca9 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml @@ -15,6 +15,7 @@ features: per_profile: true future_on: - fuchsia +- android label: New Tab page URL owners: - chrome-desktop-ntp@google.com diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartup.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartup.yaml index 1a6dfcaf..aecf48f3 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartup.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartup.yaml @@ -7,10 +7,6 @@ desc: |- Setting this policy to RestoreOnStartupIsLastSession or RestoreOnStartupIsLastSessionAndURLs turns off some settings that rely on sessions or that perform actions on exit, such as clearing browsing data on exit or session-only cookies. If this policy is set to RestoreOnStartupIsLastSessionAndURLs, browser will restore previous session and open a separate window to show URLs that are set from RestoreOnStartupURLs. Note that users can choose to keep those URLs open and they will also be restored in the future session. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. - - On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core. default: null example_value: 4 features: diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartupURLs.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartupURLs.yaml index 817d081f..bebfb5fa 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartupURLs.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/RestoreOnStartupURLs.yaml @@ -3,8 +3,6 @@ desc: |- If RestoreOnStartup is set to RestoreOnStartupIsURLs, then setting RestoreOnStartupURLs to a list of URLs specify which URLs open. If not set, the New Tab page opens on start up. - - On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core. example_value: - https://example.com - https://www.chromium.org diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/WebRtc/WebRtcDiagnosticLogCollectionAllowedForOrigins.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/WebRtc/WebRtcDiagnosticLogCollectionAllowedForOrigins.yaml new file mode 100755 index 00000000..1ed826e3 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/WebRtc/WebRtcDiagnosticLogCollectionAllowedForOrigins.yaml @@ -0,0 +1,32 @@ +caption: Enable WebRTC diagnostic log collection for specific origins +default: null +desc: |- + This policy allows enabling diagnostic log collection for WebRTC for specific origins. + + For detailed information on valid input patterns, please see https://chromeenterprise.google/policies/url-patterns. * is not an accepted value for this policy. This policy only matches based on origin, so any path in the URL pattern is ignored. Scheme and subdomains are supported. + + If the policy is set, diagnostic log collection will be enabled for the origins matched by the patterns in the list. + + If the policy is not set, diagnostic log collection will be disabled by default. +example_value: +- https://www.example.com +- example.com +- '[*.]example.com' +- '*://example.edu:*/' +- https://example.com:8080 +features: + dynamic_refresh: true + per_profile: true +owners: +- file://third_party/blink/renderer/modules/peerconnection/OWNERS +- agpalak@chromium.org +- guidou@chromium.org +schema: + items: + type: string + type: array +future_on: +- chrome.* +- chrome_os +tags: [] +type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/WebRtc/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/WebRtc/policy_atomic_groups.yaml index 1488ef58..0f870ab1 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/WebRtc/policy_atomic_groups.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/WebRtc/policy_atomic_groups.yaml @@ -3,4 +3,5 @@ WebRtc: policies: - WebRtcIPHandling - WebRtcIPHandlingUrl - - WebRtcPostQuantumKeyAgreement \ No newline at end of file + - WebRtcPostQuantumKeyAgreement + - WebRtcDiagnosticLogCollectionAllowedForOrigins \ No newline at end of file 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 395ba8bf..345951d7 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 @@ -21,7 +21,6 @@ #include "base/base_switches.h" #include "base/check_op.h" #include "base/command_line.h" -#include "base/containers/contains.h" #include "base/containers/flat_set.h" #include "base/debug/crash_logging.h" #include "base/feature_list.h" @@ -73,7 +72,6 @@ #include "content/browser/browser_plugin/browser_plugin_embedder.h" #include "content/browser/browser_plugin/browser_plugin_guest.h" #include "content/browser/btm/btm_bounce_detector.h" -#include "content/browser/btm/btm_navigation_flow_detector.h" #include "content/browser/child_process_security_policy_impl.h" #include "content/browser/closewatcher/close_listener_manager.h" #include "content/browser/compositor/surface_utils.h" @@ -93,6 +91,7 @@ #include "content/browser/host_zoom_map_impl.h" #include "content/browser/media/audio_stream_monitor.h" #include "content/browser/media/media_web_contents_observer.h" +#include "content/browser/memory/scheduler_loop_quarantine_web_contents_observer.h" #include "content/browser/permissions/permission_controller_impl.h" #include "content/browser/permissions/permission_util.h" #include "content/browser/preloading/prefetch/prefetch_request.h" @@ -1052,7 +1051,7 @@ void WebContentsImpl::WebContentsTreeNode::DetachInnerWebContents( 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); + return std::ranges::contains(unowned_inner_web_contents_, inner_web_contents); } void WebContentsImpl::WebContentsTreeNode::DetachUnownedInnerWebContents( @@ -3135,8 +3134,6 @@ void WebContentsImpl::SetPrimaryPageImportance( base::android::ScopedServiceBindingBatch scoped_service_binding_batch; if (base::FeatureList::IsEnabled(features::kSubframeImportance)) { - CHECK( - base::FeatureList::IsEnabled(features::kSubframePriorityContribution)); if (subframe_importance != primary_subframe_importance_) { primary_subframe_importance_ = subframe_importance; ApplyPrimaryPageSubframeImportance(); @@ -3796,9 +3793,6 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences( prefs.strict_mixed_content_checking = command_line.HasSwitch(switches::kEnableStrictMixedContentChecking); - prefs.strict_powerful_feature_restrictions = command_line.HasSwitch( - switches::kEnableStrictPowerfulFeatureRestrictions); - const std::string blockable_mixed_content_group = base::FieldTrialList::FindFullName("BlockableMixedContent"); prefs.strictly_block_blockable_mixed_content = @@ -4086,16 +4080,6 @@ void WebContentsImpl::OnVibrate(RenderFrameHostImpl* rfh) { observers_.NotifyObservers(&WebContentsObserver::VibrationRequested); } -std::optional -WebContentsImpl::GetPermissionsPolicyForIsolatedWebApp( - RenderFrameHostImpl* source) { - WebExposedIsolationInfo weii = - source->GetSiteInstance()->GetWebExposedIsolationInfo(); - CHECK(weii.is_isolated_application()); - return GetContentClient()->browser()->GetPermissionsPolicyForIsolatedWebApp( - this, weii.origin()); -} - void WebContentsImpl::Stop() { TRACE_EVENT0("content", "WebContentsImpl::Stop"); ForEachFrameTree([](FrameTree& frame_tree) { frame_tree.StopLoading(); }); @@ -4231,9 +4215,9 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params, AttributionHost::CreateForWebContents(this); } + SchedulerLoopQuarantineWebContentsObserver::MaybeCreateForWebContents(this); RedirectChainDetector::CreateForWebContents(this); BtmWebContentsObserver::MaybeCreateForWebContents(this); - BtmNavigationFlowDetector::CreateForWebContents(this); RedirectHeuristicTabHelper::CreateForWebContents(this); OpenerHeuristicTabHelper::CreateForWebContents(this); @@ -4567,6 +4551,23 @@ bool WebContentsImpl::PreHandleGestureEvent( const blink::WebGestureEvent& event) { OPTIONAL_TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("content.verbose"), "WebContentsImpl::PreHandleGestureEvent"); + if (ignore_zoom_gestures_) { + if (event.GetType() == blink::WebInputEvent::Type::kGestureDoubleTap) { + return true; + } + + // Disable pinch zooming in app windows. + if (blink::WebInputEvent::IsPinchGestureEventType(event.GetType())) { + // Only suppress pinch events that cause a scale change. We still + // allow synthetic wheel events for touchpad pinch to go to the page. + return !(event.SourceDevice() == blink::WebGestureDevice::kTouchpad && + event.NeedsWheelEvent()); + } + } + + // TODO(crbug.com/475836809) + // Remove this delegate method. It exposes Blink types to the embedder. Since + // zoom blocking is now handled natively, we should audit remaining consumers. return delegate_ && delegate_->PreHandleGestureEvent(this, event); } @@ -4820,6 +4821,13 @@ void WebContentsImpl::Restore() { } GetDelegate()->RestoreFromWebAPI(); } + +void WebContentsImpl::SetResizable(bool resizable) { + if (!GetDelegate()) { + return; + } + GetDelegate()->SetResizableFromWebAPI(resizable); +} #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) // TODO(laurila, crbug.com/1466855): Map into new `ui::DisplayState` enum @@ -5521,8 +5529,7 @@ FrameTree* WebContentsImpl::CreateNewWindow( ? NavigationController::UA_OVERRIDE_TRUE : NavigationController::UA_OVERRIDE_FALSE; load_params->download_policy = params.download_policy; - load_params->initiator_activation_and_ad_status = - params.initiator_activation_and_ad_status; + load_params->started_by_ad = params.started_by_ad; if (delegate_ && !is_guest && !delegate_->ShouldResumeRequestsForCreatedWindow()) { @@ -6025,7 +6032,7 @@ std::string WebContentsImpl::DumpAccessibilityTree( // This only runs during integration tests, or if a developer is // using an inspection tool, e.g. chrome://accessibility. ui::AXTreeManager::AlwaysFailFast(); - DCHECK(base::Contains(AXInspectFactory::SupportedApis(), api_type)); + DCHECK(std::ranges::contains(AXInspectFactory::SupportedApis(), api_type)); std::unique_ptr formatter = AXInspectFactory::CreateFormatter(api_type); @@ -6060,7 +6067,7 @@ void WebContentsImpl::RecordAccessibilityEvents( ax_mgr->GetBrowserAccessibilityRoot() ->GetTargetForNativeAccessibilityEvent(); - DCHECK(base::Contains(AXInspectFactory::SupportedApis(), api_type)); + DCHECK(std::ranges::contains(AXInspectFactory::SupportedApis(), api_type)); event_recorder_ = content::AXInspectFactory::CreateRecorder( api_type, ax_mgr, pid, ui::AXTreeSelector(widget)); event_recorder_->ListenToEvents(*callback); @@ -6946,6 +6953,10 @@ void WebContentsImpl::SetPageScale(float scale_factor) { scale_factor); } +void WebContentsImpl::SetIgnoreZoomGestures(bool ignore) { + ignore_zoom_gestures_ = ignore; +} + gfx::Size WebContentsImpl::GetPreferredSize() { return IsBeingCaptured() ? preferred_size_for_capture_ : preferred_size_; } @@ -11905,10 +11916,6 @@ void WebContentsImpl::CancelPreviewByMojoBinderPolicy( } } -void WebContentsImpl::OnWebApiWindowResizableChanged() { - delegate_->OnWebApiWindowResizableChanged(); -} - FrameTreeNodeId WebContentsImpl::GetOuterDelegateFrameTreeNodeId() { return node_.outer_contents_frame_tree_node_id(); } diff --git a/tools/under-control/src/content/child/runtime_features.cc b/tools/under-control/src/content/child/runtime_features.cc index 7a04e274..b89d7bb5 100755 --- a/tools/under-control/src/content/child/runtime_features.cc +++ b/tools/under-control/src/content/child/runtime_features.cc @@ -219,6 +219,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() { raw_ref(features::kFedCmIdPRegistration), kDefault}, {wf::EnableFedCmLightweightMode, raw_ref(features::kFedCmLightweightMode), kDefault}, + {wf::EnableFedCmNavigationInterception, + raw_ref(features::kFedCmNavigationInterception), kDefault}, {wf::EnableFedCmErrorAttribute, raw_ref(features::kFedCmErrorAttribute), kDefault}, {wf::EnableFedCmNonStringToken, @@ -278,8 +280,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() { raw_ref(device::kWebAuthnAmbientSignin)}, {wf::EnableWebAuthenticationImmediateGet, raw_ref(device::kWebAuthnImmediateGet), kSetOnlyIfOverridden}, - {wf::EnableWebAuthenticationConditionalCreate, - raw_ref(device::kWebAuthnPasskeyUpgrade)}, {wf::EnableWebBluetooth, raw_ref(features::kWebBluetooth), kSetOnlyIfOverridden}, {wf::EnableWebBluetoothGetDevices, @@ -310,12 +310,13 @@ void SetRuntimeFeaturesFromChromiumFeatures() { raw_ref(device::features::kWebXRIncubations)}, {wf::EnableWebXRLayers, raw_ref(device::features::kWebXRLayers)}, {wf::EnableWebXRPlaneDetection, - raw_ref(device::features::kWebXRIncubations)}, + raw_ref(device::features::kWebXRPlaneDetection)}, {wf::EnableWebXRPoseMotionData, raw_ref(device::features::kWebXRIncubations)}, {wf::EnableWebXRSpecParity, raw_ref(device::features::kWebXRIncubations)}, #endif + {wf::EnableXSLT, raw_ref(blink::features::kXSLT)}, {wf::EnablePermissions, raw_ref(features::kWebPermissionsApi), kSetOnlyIfOverridden}, }; @@ -531,8 +532,6 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs( ui::NativeTheme::GetInstanceForWeb()->use_overlay_scrollbar()); #endif WebRuntimeFeatures::EnableFluentScrollbars(ui::IsFluentScrollbarEnabled()); - WebRuntimeFeatures::EnableFluentOverlayScrollbars( - ui::IsFluentOverlayScrollbarEnabled()); // TODO(rodneyding): This is a rare case for a stable feature // Need to investigate more to determine whether to refactor it. @@ -716,6 +715,12 @@ void SetRuntimeFeaturesDefaultsAndUpdateFromArgs( WebRuntimeFeatures::EnableFeatureFromString(feature, false); } + if (command_line.HasSwitch(blink::switches::kXSLTEnabledPolicy)) { + std::string value = + command_line.GetSwitchValueASCII(blink::switches::kXSLTEnabledPolicy); + WebRuntimeFeatures::EnableXSLT(value == "true"); + } + ResolveInvalidConfigurations(); } 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 e6bd8b31..d6b69893 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 @@ -189,7 +189,7 @@ bool ContentBrowserClient:: BrowserContext* browser_context, const GURL& site_instance_original_url) { DCHECK(browser_context); - return true; + return false; } bool ContentBrowserClient::ShouldAllowProcessPerSiteForMultipleMainFrames( @@ -227,10 +227,6 @@ bool ContentBrowserClient::ShouldLockProcessToSite( return true; } -bool ContentBrowserClient::ShouldEnforceNewCanCommitUrlChecks() { - return true; -} - bool ContentBrowserClient::DoesWebUIUrlRequireProcessLock(const GURL& url) { return true; } @@ -323,11 +319,11 @@ size_t ContentBrowserClient::GetProcessCountToIgnoreForLimit() { return 0; } -std::optional +std::optional> ContentBrowserClient::GetPermissionsPolicyForIsolatedWebApp( - WebContents* web_contents, - const url::Origin& app_origin) { - return network::ParsedPermissionsPolicy(); + BrowserContext* browser_context, + const url::Origin& iwa_origin) { + return std::nullopt; } bool ContentBrowserClient::ShouldTryToUseExistingProcessHost( @@ -1082,6 +1078,13 @@ bool ContentBrowserClient::ShouldRestrictCoreSharingOnRenderer() { return false; } +std::optional +ContentBrowserClient::GetWindowsSecurityAttributeName() const { + // Embedders should override this method and return the name of the security + // attribute previously assigned to the browser's process token. + return std::nullopt; +} + #endif // BUILDFLAG(IS_WIN) std::vector> @@ -1223,8 +1226,8 @@ ContentBrowserClient::GetNetworkContextsParentDirectory() { return {}; } -base::Value::Dict ContentBrowserClient::GetNetLogConstants() { - return base::Value::Dict(); +base::DictValue ContentBrowserClient::GetNetLogConstants() { + return base::DictValue(); } #if BUILDFLAG(IS_ANDROID) @@ -1576,6 +1579,12 @@ void ContentBrowserClient::IsClipboardCopyAllowedByPolicy( std::move(callback).Run(metadata.format_type, data, std::nullopt); } +bool ContentBrowserClient::IsDragAllowedByPolicy( + const ClipboardEndpoint& source, + const DropData& drop_data) { + return true; +} + #if BUILDFLAG(ENABLE_VR) XrIntegrationClient* ContentBrowserClient::GetXrIntegrationClient() { return nullptr; @@ -1599,11 +1608,11 @@ void ContentBrowserClient::GrantAdditionalRequestPrivilegesToWorkerProcess( int child_id, const GURL& script_url) {} -ContentBrowserClient::PrivateNetworkRequestPolicyOverride -ContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy( +ContentBrowserClient::LocalNetworkAccessRequestPolicyOverride +ContentBrowserClient::ShouldOverrideLocalNetworkAccessRequestPolicy( BrowserContext* browser_context, const url::Origin& origin) { - return PrivateNetworkRequestPolicyOverride::kDefault; + return LocalNetworkAccessRequestPolicyOverride::kDefault; } bool ContentBrowserClient::IsJitDisabledForSite(BrowserContext* browser_context, @@ -1749,12 +1758,6 @@ bool ContentBrowserClient::AreIsolatedWebAppsEnabled( return false; } -bool ContentBrowserClient::IsThirdPartyStoragePartitioningAllowed( - content::BrowserContext*, - const url::Origin&) { - return true; -} - bool ContentBrowserClient::AreDeprecatedAutomaticBeaconCredentialsAllowed( content::BrowserContext* browser_context, const GURL& destination_url, @@ -1965,13 +1968,14 @@ bool ContentBrowserClient::IsRendererProcessPriorityEnabled() { return true; } -std::unique_ptr +std::vector> ContentBrowserClient::MaybeCreateKeepAliveRequestTracker( const network::ResourceRequest& request, std::optional ukm_source_id, + content::BrowserContext* browser_context, KeepAliveRequestTracker::IsContextDetachedCallback is_context_detached_callback) { - return nullptr; + return {}; } std::optional> @@ -2017,4 +2021,16 @@ std::string ContentBrowserClient::GetDnsTxtResolverUrlPrefix() { return std::string(); } +bool ContentBrowserClient::ShouldAllowPrefetchRedirection( + content::BrowserContext& browser_context, + const GURL& url, + const std::string& embedder_histogram_suffix) { + return true; +} + +bool ContentBrowserClient::OriginSupportsConcreteCrossOriginIsolation( + const url::Origin& origin) { + return true; +} + } // namespace content diff --git a/tools/under-control/src/extensions/common/api/automation_internal.idl b/tools/under-control/src/extensions/common/api/automation_internal.idl deleted file mode 100755 index 85ef3ab0..00000000 --- a/tools/under-control/src/extensions/common/api/automation_internal.idl +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This is the implementation layer of the chrome.automation API, and is -// essentially a translation of the internal accessibility tree update system -// into an extension API. -namespace automationInternal { - // Data for an accessibility event and/or an atomic change to an accessibility - // tree. See ui/accessibility/ax_tree_update.h for an extended explanation of - // the tree update format. - [nocompile] dictionary AXEventParams { - // The tree id of the web contents that this update is for. - DOMString treeID; - - // ID of the node that the event applies to. - long targetID; - - // The type of event that this update represents. - DOMString eventType; - - // The source of this event. - DOMString eventFrom; - - // The mouse coordinates when this event fired. - double mouseX; - double mouseY; - - - // ID of an action request resulting in this event. - long actionRequestID; - }; - - dictionary AXTextLocationParams { - DOMString treeID; - long nodeID; - boolean result; - long left; - long top; - long width; - long height; - long requestID; - }; - - // Arguments required for all actions supplied to performAction. - dictionary PerformActionRequiredParams { - DOMString treeID; - long automationNodeID; - - // This can be either automation::ActionType or - // automation_internal::ActionTypePrivate. - DOMString actionType; - - long? requestID; - }; - - // Arguments for the customAction action. Those args are passed to - // performAction as opt_args. - dictionary PerformCustomActionParams { - long customActionID; - }; - - // Arguments for the setSelection action supplied to performAction. - dictionary SetSelectionParams { - // Reuses ActionRequiredParams automationNodeID to mean anchor node id, - // and treeID to apply to both anchor and focus node ids. - long focusNodeID; - long anchorOffset; - long focusOffset; - }; - - // Arguments for the replaceSelectedText action supplied to performAction. - dictionary ReplaceSelectedTextParams { - DOMString value; - }; - - // Arguments for the setValue action supplied to performAction. - dictionary SetValueParams { - DOMString value; - }; - - - // Arguments for the scrollToPoint action supplied to performAction. - dictionary ScrollToPointParams { - long x; - long y; - }; - - // Arguments for the scrollToPositionAtRowColumn action supplied to performAction. - dictionary ScrollToPositionAtRowColumnParams { - long row; - long column; - }; - - // Arguments for the SetScrollOffset action supplied to performAction. - dictionary SetScrollOffsetParams { - long x; - long y; - }; - - // Arguments for the getImageData action. - dictionary GetImageDataParams { - long maxWidth; - long maxHeight; - }; - - // Arguments for the hitTest action. - dictionary HitTestParams { - long x; - long y; - DOMString eventToFire; - }; - - // Arguments for getTextLocation action. - dictionary GetTextLocationDataParams { - long startIndex; - long endIndex; - }; - - // Callback called when enableDesktop() returns. Returns the accessibility - // tree id of the desktop tree. - callback EnableDesktopCallback = void(DOMString tree_id); - - // Callback called when disableDesktop() returns. It is safe to clear - // accessibility api state at that point. - callback DisableDesktopCallback = void(); - - interface Functions { - // Enable automation of the tree with the given id. - static void enableTree(DOMString tree_id); - - // Enables desktop automation. - static void enableDesktop( - EnableDesktopCallback callback); - - // Disables desktop automation. - static void disableDesktop(DisableDesktopCallback callback); - - // Performs an action on an automation node. - static void performAction(PerformActionRequiredParams args, - object opt_args); - }; - - interface Events { - // Fired when an accessibility event occurs - static void onAccessibilityEvent(AXEventParams update); - - static void onAccessibilityTreeDestroyed(DOMString treeID); - - static void onGetTextLocationResult(AXTextLocationParams params); - - static void onTreeChange(long observerID, - DOMString treeID, - long nodeID, - DOMString changeType); - - static void onChildTreeID(DOMString treeID); - - static void onNodesRemoved(DOMString treeID, long[] nodeIDs); - - static void onAccessibilityTreeSerializationError(DOMString treeID); - - static void onActionResult(DOMString treeID, long requestID, boolean result); - - static void onAllAutomationEventListenersRemoved(); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/feedback_private.idl b/tools/under-control/src/extensions/common/api/feedback_private.idl deleted file mode 100755 index a8a98eaf..00000000 --- a/tools/under-control/src/extensions/common/api/feedback_private.idl +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright 2013 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Use the chrome.feedbackPrivate API to provide Chrome [OS] -// feedback to the Google Feedback servers. -namespace feedbackPrivate { - - dictionary AttachedFile { - DOMString name; - [instanceOf=Blob] object? data; - }; - - dictionary LogsMapEntry { - DOMString key; - DOMString value; - }; - - // Supported feedback flows. - enum FeedbackFlow { - // Flow for regular user. This is the default. - regular, - - // Flow on the ChromeOS login screen. URL entry, file attaching and landing - // page is disabled for this flow. - login, - - // Flow when the feedback is requested from the sad tab ("Aw, Snap!") page - // when the renderer crashes. - sadTabCrash, - - // Flow for internal Google users. - googleInternal, - - // Flow for AI features. - ai - }; - - dictionary FeedbackInfo { - // File to attach to the feedback report. - AttachedFile? attachedFile; - - // An optional tag to label what type this feedback is. - DOMString? categoryTag; - - // The feedback text describing the user issue. - DOMString description; - - // The placeholder text that will be shown in the description field when - // it's empty. - DOMString? descriptionPlaceholder; - - // The e-mail of the user that initiated this feedback. - DOMString? email; - - // The URL of the page that this issue was being experienced on. - DOMString? pageUrl; - - // Optional product ID to override the Chrome [OS] product id that is - // usually passed to the feedback server. - long? productId; - - // Screenshot to send with this feedback. - [instanceOf=Blob] object? screenshot; - - // Optional id for performance trace data that can be included in this - // report. - long? traceId; - - // An array of key/value pairs providing system information for this - // feedback report. - LogsMapEntry[]? systemInformation; - - // True if we have permission to add histograms to this feedback report. - boolean? sendHistograms; - - // Optional feedback UI flow. Default is the regular user flow. - FeedbackFlow? flow; - - // TODO(rkc): Remove these once we have bindings to send blobs to Chrome. - // Used internally to store the blob uuid after parameter customization. - DOMString? attachedFileBlobUuid; - DOMString? screenshotBlobUuid; - - // Whether to use the system-provided window frame or custom frame controls. - boolean? useSystemWindowFrame; - - // Whether or not to send bluetooth logs with this report. - boolean? sendBluetoothLogs; - - // Whether or not to send tab titles with this report. - boolean? sendTabTitles; - - // Whether or not to send Assistant feedback to Assistant server. - boolean? assistantDebugInfoAllowed; - - // Whether or not triggered from Assistant. - boolean? fromAssistant; - - // Whether or not to include bluetooth logs. - boolean? includeBluetoothLogs; - - // Whether to show questionnaire in the report description based on detected - // domain-related keywords (crbug/1241169). - boolean? showQuestionnaire; - - // Whether or not triggered for Autofill. - boolean? fromAutofill; - - // A JSON formatted string containing autofill metadata for this - // feedback report. - DOMString? autofillMetadata; - - // Whether or not |autofillMetadata| should be included in the feedback - // report. - boolean? sendAutofillMetadata; - - // Whether or not the content is offensive or unsafe. - boolean? isOffensiveOrUnsafe; - - // A JSON formatted string containing ai metadata. - DOMString? aiMetadata; - }; - - // Possible statuses that can result from sending feedback. - enum Status {success, delayed}; - - // Landing page types that can be shown after sending feedback. - enum LandingPageType {normal, techstop, noLandingPage}; - - // Result returned from a $(ref:sendFeedback) call. - dictionary SendFeedbackResult { - // Status of the sending of a feedback report. - Status status; - - // The type of landing page shown to the use when the feedback report is - // successfully sent, if one should be shown. - LandingPageType landingPageType; - }; - - // Allowed log sources on Chrome OS. - enum LogSource { - // Chrome OS system messages. - messages, - - // Latest Chrome OS UI logs. - uiLatest, - - // Info about display connectors and connected displays from DRM subsystem. - drmModetest, - - // USB device list and connectivity graph. - lsusb, - - // Logs from daemon for Atrus device. - atrusLog, - - // Network log. - netLog, - - // Log of system events. - eventLog, - - // Update engine log. - updateEngineLog, - - // Log of the current power manager session. - powerdLatest, - - // Log of the previous power manager session. - powerdPrevious, - - // Info about system PCI buses devices. - lspci, - - // Info about system network interface. - ifconfig, - - // Info about system uptime. - uptime - }; - - // Source of the feedback. - enum FeedbackSource {quickoffice}; - - // Input parameters for a readLogSource() call. - dictionary ReadLogSourceParams { - // The log source from which to read. - LogSource source; - - // For file-based log sources, read from source without closing the file - // handle. The next time $(ref:readLogSource) is called, the file read will - // continue where it left off. $(ref:readLogSource) can be called with - // incremental=true repeatedly. To subsequently close the file - // handle, pass in incremental=false. - boolean incremental; - - // To read from an existing file handle, set this to a valid - // readerId value that was returned from a previous - // $(ref:readLogSource) call. The reader must previously have been created - // for the same value of source. If no readerId is - // provided, $(ref:readLogSource) will attempt to open a new log source - // reader handle. - long? readerId; - }; - - // Result returned from a $(ref:readLogSource) call. - dictionary ReadLogSourceResult { - // The ID of the log source reader that was created to read from the log - // source. If the reader was destroyed at the end of a read by passing in - // incremental=false, this is always set to 0. If the call was - // to use an existing reader with an existing ID, this will be set to the - // same readerId that was passed into $(ref:readLogSource). - long readerId; - - // Each DOMString in this array represents one line of logging that was - // fetched from the log source. - DOMString[] logLines; - }; - - callback GetUserEmailCallback = void(DOMString email); - callback GetSystemInformationCallback = - void(LogsMapEntry[] systemInformation); - callback SendFeedbackCallback = void(SendFeedbackResult result); - callback ReadLogSourceCallback = void (ReadLogSourceResult result); - - interface Functions { - // Returns the email of the currently active or logged in user. - static void getUserEmail(GetUserEmailCallback callback); - - // Returns the system information dictionary. - static void getSystemInformation(GetSystemInformationCallback callback); - - // Opens the feedback report window. - static void openFeedback(FeedbackSource source); - - // Sends a feedback report. - // |loadSystemInfo|: Optional flag when present and is true, the backend - // should load system information before sending the report. This is added - // to reduce user's wait time when sending reports because loading system - // information is slow. - // |formOpenTime|: The epoch time when the feedback form was opened. This is - // used for metrics. - static void sendFeedback( - FeedbackInfo feedback, - optional boolean loadSystemInfo, - optional double formOpenTime, - SendFeedbackCallback callback); - - // Reads from a log source indicated by source. - //

If incremental is false: - //

    - //
  • Returns the entire contents of the log file.
  • - //
  • Returns readerId value of 0 to callback.
  • - //
- // If incremental is true, and no readerId is - // provided: - //
    - //
  • Returns the entire contents of the log file.
  • - //
  • Starts tracking the file read handle, which is returned as a - // nonzero readerId value in the callback. - //
  • - //
  • If can't create a new file handle, returns readerId - // value of 0 in the callback. - //
  • - //
- // If incremental is true, and a valid non-zero - // readerId is provided: - //
    - //
  • Returns new lines written to the file since the last time this - // function was called for the same file and readerId. - //
  • - //
  • Returns the same readerId value to the callback.
  • - //
- static void readLogSource( - ReadLogSourceParams params, - ReadLogSourceCallback callback); - - }; - - interface Events { - // Fired when the a user requests the launch of the feedback UI. We're - // using an event for this versus using the override API since we want - // to be invoked, but not showing a UI, so the feedback extension can - // take a screenshot of the user's desktop. - static void onFeedbackRequested(FeedbackInfo feedback); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/media_perception_private.idl b/tools/under-control/src/extensions/common/api/media_perception_private.idl deleted file mode 100755 index 7463178a..00000000 --- a/tools/under-control/src/extensions/common/api/media_perception_private.idl +++ /dev/null @@ -1,609 +0,0 @@ -// Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Private API for receiving real-time media perception information. -[platforms=("chromeos")] -namespace mediaPerceptionPrivate { - enum Status { - // The media analytics process is waiting to be launched. - UNINITIALIZED, - - // The analytics process is running and the media processing pipeline is - // started, but it is not yet receiving image frames. This is a - // transitional state between SUSPENDED and - // RUNNING for the time it takes to warm up the media - // processing pipeline, which can take anywhere from a few seconds to a - // minute. - // Note: STARTED is the initial reply to SetState - // RUNNING. - STARTED, - - // The analytics process is running and the media processing pipeling is - // injesting image frames. At this point, MediaPerception signals should - // be coming over D-Bus. - RUNNING, - - // Analytics process is running and the media processing pipeline is ready - // to be set to state RUNNING. The D-Bus communications - // are enabled but the media processing pipeline is suspended. - SUSPENDED, - - // Enum for restarting the media analytics process using Upstart. - // Calling setState RESTARTING will restart the media process - // to the SUSPENDED state. The app has to set the state to - // RUNNING in order to start receiving media perception - // information again. - RESTARTING, - - // Stops the media analytics process via Upstart. - STOPPED, - - // Indicates that a ServiceError has occurred. - SERVICE_ERROR - }; - - enum ServiceError { - // The media analytics process could not be reached. This is likely due to - // a faulty comms configuration or that the process crashed. - SERVICE_UNREACHABLE, - - // The media analytics process is not running. The MPP API knows that the - // process has not been started yet. - SERVICE_NOT_RUNNING, - - // The media analytics process is busy launching. Wait for setState - // RUNNING or setState RESTARTING callback. - SERVICE_BUSY_LAUNCHING, - - // The component is not installed properly. - SERVICE_NOT_INSTALLED, - - // Failed to establish a Mojo connection to the service. - MOJO_CONNECTION_FAILURE - }; - - enum Feature { - AUTOZOOM, - HOTWORD_DETECTION, - OCCUPANCY_DETECTION, - EDGE_EMBEDDINGS, - SOFTWARE_CROPPING - }; - - dictionary NamedTemplateArgument { - DOMString? name; - (DOMString or double)? value; - }; - - enum ComponentType { - // The smaller component with limited functionality (smaller size and - // limited models). - LIGHT, - // The fully-featured component with more functionality (larger size and - // more models). - FULL - }; - - // The status of the media analytics process component on the device. - enum ComponentStatus { - UNKNOWN, - // The component is successfully installed and the image is mounted. - INSTALLED, - // The component failed to download, install or load. - FAILED_TO_INSTALL - }; - - // Error code associated with a failure to install the media analytics - // component. - enum ComponentInstallationError { - // Component requested does not exist. - UNKNOWN_COMPONENT, - - // The update engine fails to install component. - INSTALL_FAILURE, - - // Component can not be mounted. - MOUNT_FAILURE, - - // The component is not compatible with the device. - COMPATIBILITY_CHECK_FAILED, - - // The component was not found - reported for load requests with kSkip - // update policy. - NOT_FOUND - }; - - dictionary Component { - ComponentType type; - }; - - // The state of the media analytics downloadable component. - dictionary ComponentState { - ComponentStatus status; - - // The version string for the current component. - DOMString? version; - - // If the component installation failed, the encountered installation - // error. Not set if the component installation succeeded. - ComponentInstallationError? installationErrorCode; - }; - - // ------------------- Start of process management definitions. ------------ - // New interface for managing the process state of the media perception - // service with the intention of eventually phasing out the setState() call. - enum ProcessStatus { - // The component process state is unknown, for example, if the process is - // waiting to be launched. This is the initial state before - // $(ref:setComponentProcessState) is first called. - UNKNOWN, - - // The component process has been started. - // This value can only be passed to $(ref:setComponentProcessState) if the - // process is currently in state STOPPED or - // UNKNOWN. - STARTED, - - // The component process has been stopped. - // This value can only be passed to $(ref:setComponentProcessState) if the - // process is currently in state STARTED. - // Note: the process is automatically stopped when the Chrome process - // is closed. - STOPPED, - - // Indicates that a ServiceError has occurred. - SERVICE_ERROR - }; - - dictionary ProcessState { - ProcessStatus? status; - - // Return parameter for $(ref:setComponentProcessState) that - // specifies the error type for failure cases. - ServiceError? serviceError; - }; - // ------------------- End of process management definitions. -------------- - - // The parameters for processing a particular video stream. - dictionary VideoStreamParam { - // Identifies the video stream described by these parameters. - DOMString? id; - - // Frame width in pixels. - long? width; - - // Frame height in pixels. - long? height; - - // The frame rate at which this video stream would be processed. - long? frameRate; - }; - - dictionary Point { - // The horizontal distance from the top left corner of the image. - double? x; - - // The vertical distance from the top left corner of the image. - double? y; - }; - - // The parameters for a whiteboard in the image frame. Corners are given in - // pixel coordinates normalized to the size of the image frame (i.e. in the - // range [(0.0, 0.0), (1.0, 1.0)]. The aspectRatio is the physical aspect - // ratio of the whiteboard (e.g. for a 1m high and 2m wide whiteboard, the - // aspect ratio would be 2). - dictionary Whiteboard { - // The top left corner of the whiteboard in the image frame. - Point? topLeft; - - // The top right corner of the whiteboard in the image frame. - Point? topRight; - - // The bottom left corner of the whiteboard in the image frame. - Point? bottomLeft; - - // The bottom right corner of the whiteboard in the image frame. - Point? bottomRight; - - // The physical aspect ratio of the whiteboard. - double? aspectRatio; - }; - - // The system and configuration state of the analytics process. - dictionary State { - Status status; - - // Optional $(ref:setState) parameter. Specifies the video device the media - // analytics process should open while the media processing pipeline is - // starting. To set this parameter, status has to be RUNNING. - DOMString? deviceContext; - - // Return parameter for $(ref:setState) or $(ref:getState) that - // specifies the error type for failure cases. - ServiceError? serviceError; - - // A list of video streams processed by the analytics process. To set this - // parameter, status has to be RUNNING. - VideoStreamParam[]? videoStreamParam; - - // Media analytics configuration. It can only be used when setting state to - // RUNNING. - DOMString? configuration; - - // Corners and aspect ratio of the whiteboard in the image frame. Should - // only be set when setting state to RUNNING and configuration - // to whiteboard. - Whiteboard? whiteboard; - - // A list of enabled media perception features. - Feature[]? features; - - // A list of named parameters to be substituted at start-up. Will - // only have effect when setting state to RUNNING. - NamedTemplateArgument[]? namedTemplateArguments; - }; - - dictionary BoundingBox { - // Specifies whether the points are normalized to the size of the image. - boolean? normalized; - - // The two points that define the corners of a bounding box. - Point? topLeft; - Point? bottomRight; - }; - - enum DistanceUnits { - UNSPECIFIED, - METERS, - PIXELS - }; - - // Generic dictionary to encapsulate a distance magnitude and units. - dictionary Distance { - // This field provides flexibility to report depths or distances of - // different entity types with different units. - DistanceUnits? units; - - double? magnitude; - }; - - enum EntityType { - UNSPECIFIED, - FACE, - PERSON, - MOTION_REGION, - LABELED_REGION - }; - - enum FramePerceptionType { - UNKNOWN_TYPE, - FACE_DETECTION, - PERSON_DETECTION, - MOTION_DETECTION - }; - - dictionary Entity { - // A unique id associated with the detected entity, which can be used to - // track the entity over time. - long? id; - - EntityType? type; - - // Label for this entity. - DOMString? entityLabel; - - // Minimum box which captures entire detected entity. - BoundingBox? boundingBox; - - // A value for the quality of this detection. - double? confidence; - - // The estimated depth of the entity from the camera. - Distance? depth; - }; - - dictionary PacketLatency { - // Label for this packet. - DOMString? packetLabel; - - // Packet processing latency in microseconds. - long? latencyUsec; - }; - - // Type of lighting conditions. - enum LightCondition { - UNSPECIFIED, - - // No noticeable change occurred. - NO_CHANGE, - - // Light was switched on in the room. - TURNED_ON, - - // Light was switched off in the room. - TURNED_OFF, - - // Light gradually got dimmer (for example, due to a sunset). - DIMMER, - - // Light gradually got brighter (for example, due to a sunrise). - BRIGHTER, - - // Black frame was detected - the current frame contains only noise. - BLACK_FRAME - }; - - // Detection of human presence close to the camera. - dictionary VideoHumanPresenceDetection { - // Indicates a probability in [0, 1] interval that a human is present in - // the video frame. - double? humanPresenceLikelihood; - - // Indicates a probability in [0, 1] that motion has been detected in the - // video frame. - double? motionDetectedLikelihood; - - // Indicates lighting condition in the video frame. - LightCondition? lightCondition; - - // Indicates a probablity in [0, 1] interval that - // lightCondition value is correct. - double? lightConditionLikelihood; - }; - - // The set of computer vision metadata for an image frame. - dictionary FramePerception { - long? frameId; - - long? frameWidthInPx; - long? frameHeightInPx; - - // The timestamp associated with the frame (when its recieved by the - // analytics process). - double? timestamp; - - // The list of entities detected in this frame. - Entity[]? entities; - - // Processing latency for a list of packets. - PacketLatency[]? packetLatency; - - // Human presence detection results for a video frame. - VideoHumanPresenceDetection? videoHumanPresenceDetection; - - // Indicates what types of frame perception were run. - FramePerceptionType[]? framePerceptionTypes; - }; - - // An estimate of the direction that the sound is coming from. - dictionary AudioLocalization { - // An angle in radians in the horizontal plane. It roughly points to the - // peak in the probability distribution of azimuth defined below. - double? azimuthRadians; - - // A probability distribution for the current snapshot in time that shows - // the likelihood of a sound source being at a particular azimuth. For - // example, azimuthScores = [0.1, 0.2, 0.3, 0.4] means that - // the probability that the sound is coming from an azimuth of 0, pi/2, pi, - // 3*pi/2 is 0.1, 0.2, 0.3 and 0.4, respectively. - double[]? azimuthScores; - }; - - // Spectrogram of an audio frame. - dictionary AudioSpectrogram { - double[]? values; - }; - - // Detection of human presence close to the microphone. - dictionary AudioHumanPresenceDetection { - // Indicates a probability in [0, 1] interval that a human has caused a - // sound close to the microphone. - double? humanPresenceLikelihood; - - // Estimate of the noise spectrogram. - AudioSpectrogram? noiseSpectrogram; - - // Spectrogram of an audio frame. - AudioSpectrogram? frameSpectrogram; - }; - - enum HotwordType { - UNKNOWN_TYPE, - OK_GOOGLE - }; - - // A hotword detected in the audio stream. - dictionary Hotword { - // Unique identifier for the hotword instance. Note that a single hotword - // instance can span more than one audio frame. In that case a single - // hotword instance can be reported in multiple Hotword or HotwordDetection - // results. Hotword results associated with the same hotword instance will - // have the same id. - long? id; - - // Indicates the type of this hotword. - HotwordType? type; - - // Id of the audio frame in which the hotword was detected. - long? frameId; - - // Indicates the start time of this hotword in the audio frame. - long? startTimestampMs; - - // Indicates the end time of this hotword in the audio frame. - long? endTimestampMs; - - // Indicates a probability in [0, 1] interval that this hotword is present - // in the audio frame. - double? confidence; - }; - - // Detection of hotword in the audio stream. - dictionary HotwordDetection { - Hotword[]? hotwords; - }; - - // Audio perception results for an audio frame. - dictionary AudioPerception { - // A timestamp in microseconds attached when this message was generated. - double? timestampUs; - - // Audio localization results for an audio frame. - AudioLocalization? audioLocalization; - - // Audio human presence detection results for an audio frame. - AudioHumanPresenceDetection? audioHumanPresenceDetection; - - // Hotword detection results. - HotwordDetection? hotwordDetection; - }; - - // Detection of human presence based on both audio and video inputs. - dictionary AudioVisualHumanPresenceDetection { - // Indicates a probability in [0, 1] interval that a human is present. - double? humanPresenceLikelihood; - }; - - // Perception results based on both audio and video inputs. - dictionary AudioVisualPerception { - // A timestamp in microseconds attached when this message was generated. - double? timestampUs; - - // Human presence detection results. - AudioVisualHumanPresenceDetection? audioVisualHumanPresenceDetection; - }; - - // Stores metadata such as version of media perception features. - dictionary Metadata { - DOMString? visualExperienceControllerVersion; - }; - - dictionary MediaPerception { - // The time the media perception data was emitted by the media processing - // pipeline. This value will be greater than the timestamp stored within - // the FramePerception dictionary and the difference between them can be - // viewed as the processing time for a single frame. - double? timestamp; - - // An array of framePerceptions. - FramePerception[]? framePerceptions; - - // An array of audio perceptions. - AudioPerception[]? audioPerceptions; - - // An array of audio-visual perceptions. - AudioVisualPerception[]? audioVisualPerceptions; - - // Stores metadata such as version of media perception features. - Metadata? metadata; - }; - - enum ImageFormat { - // Image represented by RGB data channels. - RAW, - PNG, - JPEG - }; - - dictionary ImageFrame { - long? width; - long? height; - - ImageFormat? format; - - long? dataLength; - - // The bytes of the image frame. - ArrayBuffer? frame; - }; - - dictionary PerceptionSample { - // The video analytics FramePerception for the associated image frame - // data. - FramePerception? framePerception; - - // The image frame data for the associated FramePerception object. - ImageFrame? imageFrame; - - // The audio perception results for an audio frame. - AudioPerception? audioPerception; - - // Perception results based on both audio and video inputs. - AudioVisualPerception? audioVisualPerception; - - // Stores metadata such as version of media perception features. - Metadata? metadata; - }; - - dictionary Diagnostics { - // Return parameter for $(ref:getDiagnostics) that specifies the error - // type for failure cases. - ServiceError? serviceError; - - // A buffer of image frames and the associated video analytics information - // that can be used to diagnose a malfunction. - PerceptionSample[]? perceptionSamples; - }; - - callback StateCallback = void(State state); - - callback DiagnosticsCallback = void(Diagnostics diagnostics); - - callback ComponentStateCallback = void(ComponentState componentState); - - callback ProcessStateCallback = void(ProcessState processState); - - interface Functions { - // Gets the status of the media perception process. - // |callback| : The current state of the system. - static void getState(StateCallback callback); - - // Sets the desired state of the system. - // |state| : A dictionary with the desired new state. The only settable - // states are RUNNING, SUSPENDED, and - // RESTARTING. - // |callback| : Invoked with the State of the system after setting it. Can - // be used to verify the state was set as desired. - static void setState( - State state, - StateCallback callback); - - // Get a diagnostics buffer out of the video analytics process. - // |callback| : Returns a Diagnostics dictionary object. - static void getDiagnostics(DiagnosticsCallback callback); - - // Attempts to download and load the media analytics component. This - // function should be called every time a client starts using this API. If - // the component is already loaded, the callback will simply return that - // information. The process must be STOPPED for this function - // to succeed. - // Note: If a different component type is desired, this function can - // be called with the new desired type and the new component will be - // downloaded and installed. - // |component| : The desired component to install and load. - // |callback| : Returns the state of the component. - static void setAnalyticsComponent( - Component component, - ComponentStateCallback callback); - - // Manages the lifetime of the component process. This function should - // only be used if the component is installed. It will fail if the - // component is not installed. - // |processState| : The desired state for the component process. - // |callback| : Reports the new state of the process, which is expected to - // be the same as the desired state, unless something goes wrong. - static void setComponentProcessState( - ProcessState processState, - ProcessStateCallback callback); - }; - - interface Events { - // Fired when media perception information is received from the media - // analytics process. - // |mediaPerception| : The dictionary which contains a dump of everything - // the analytics process has detected or determined from the incoming media - // streams. - static void onMediaPerception(MediaPerception mediaPerception); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/mojo_private.idl b/tools/under-control/src/extensions/common/api/mojo_private.idl deleted file mode 100755 index 358456f8..00000000 --- a/tools/under-control/src/extensions/common/api/mojo_private.idl +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// The chrome.mojoPrivate API provides access to the mojo modules. -namespace mojoPrivate { - interface Functions { - // Returns a promise that will resolve to an asynchronously - // loaded module. - [nocompile] static any requireAsync(DOMString name); - }; - -}; diff --git a/tools/under-control/src/extensions/common/api/networking_onc.idl b/tools/under-control/src/extensions/common/api/networking_onc.idl deleted file mode 100755 index 0c8cf224..00000000 --- a/tools/under-control/src/extensions/common/api/networking_onc.idl +++ /dev/null @@ -1,1037 +0,0 @@ -// Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -//

-// The chrome.networking.onc API is used for configuring -// network connections (Cellular, Ethernet, VPN or WiFi). -// This API is available in auto-launched Chrome OS kiosk sessions. -//

-//

-// Network connection configurations are specified following -// -// Open Network Configuration (ONC) specification. -//

-//

-// NOTE: Most dictionary properties and enum values use UpperCamelCase -// to match the ONC specification instead of the JavaScript lowerCamelCase -// convention. -//

-namespace networking.onc { - enum ActivationStateType { - Activated, Activating, NotActivated, PartiallyActivated - }; - - enum CaptivePortalStatus { - Unknown, Offline, Online, Portal, ProxyAuthRequired - }; - - enum ClientCertificateType { - Ref, Pattern - }; - - enum ConnectionStateType { - Connected, Connecting, NotConnected - }; - - enum DeviceStateType { - // Device is available but not initialized. - Uninitialized, - // Device is initialized but not enabled. - Disabled, - // Enabled state has been requested but has not completed. - Enabling, - // Device is enabled. - Enabled, - // Device is prohibited. - Prohibited - }; - - enum IPConfigType { - DHCP, Static - }; - - enum NetworkType { - All, Cellular, Ethernet, Tether, VPN, Wireless, WiFi - }; - - enum ProxySettingsType { - Direct, Manual, PAC, WPAD - }; - - dictionary ManagedBoolean { - // The active value currently used by the network configuration manager - // (e.g. Shill). - boolean? Active; - // The source from which the effective property value was determined. - DOMString? Effective; - // The property value provided by the user policy. - boolean? UserPolicy; - // The property value provided by the device policy. - boolean? DevicePolicy; - // The property value set by the logged in user. Only provided if - // |UserEditable| is true. - boolean? UserSetting; - // The value set for all users of the device. Only provided if - // |DeviceEditiable| is true. - boolean? SharedSetting; - // Whether a UserPolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? UserEditable; - // Whether a DevicePolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? DeviceEditable; - }; - - dictionary ManagedLong { - // The active value currently used by the network configuration manager - // (e.g. Shill). - long? Active; - // The source from which the effective property value was determined. - DOMString? Effective; - // The property value provided by the user policy. - long? UserPolicy; - // The property value provided by the device policy. - long? DevicePolicy; - // The property value set by the logged in user. Only provided if - // |UserEditable| is true. - long? UserSetting; - // The value set for all users of the device. Only provided if - // |DeviceEditiable| is true. - long? SharedSetting; - // Whether a UserPolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? UserEditable; - // Whether a DevicePolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? DeviceEditable; - }; - - dictionary ManagedDOMString { - // The active value currently used by the network configuration manager - // (e.g. Shill). - DOMString? Active; - // The source from which the effective property value was determined. - DOMString? Effective; - // The property value provided by the user policy. - DOMString? UserPolicy; - // The property value provided by the device policy. - DOMString? DevicePolicy; - // The property value set by the logged in user. Only provided if - // |UserEditable| is true. - DOMString? UserSetting; - // The value set for all users of the device. Only provided if - // |DeviceEditiable| is true. - DOMString? SharedSetting; - // Whether a UserPolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? UserEditable; - // Whether a DevicePolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? DeviceEditable; - }; - - dictionary ManagedDOMStringList { - // The active value currently used by the network configuration manager - // (e.g. Shill). - DOMString[]? Active; - // The source from which the effective property value was determined. - DOMString? Effective; - // The property value provided by the user policy. - DOMString[]? UserPolicy; - // The property value provided by the device policy. - DOMString[]? DevicePolicy; - // The property value set by the logged in user. Only provided if - // |UserEditable| is true. - DOMString[]? UserSetting; - // The value set for all users of the device. Only provided if - // |DeviceEditiable| is true. - DOMString[]? SharedSetting; - // Whether a UserPolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? UserEditable; - // Whether a DevicePolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? DeviceEditable; - }; - - dictionary ManagedIPConfigType { - // The active value currently used by the network configuration manager - // (e.g. Shill). - IPConfigType? Active; - // The source from which the effective property value was determined. - DOMString? Effective; - // The property value provided by the user policy. - IPConfigType? UserPolicy; - // The property value provided by the device policy. - IPConfigType? DevicePolicy; - // The property value set by the logged in user. Only provided if - // |UserEditable| is true. - IPConfigType? UserSetting; - // The value set for all users of the device. Only provided if - // |DeviceEditiable| is true. - IPConfigType? SharedSetting; - // Whether a UserPolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? UserEditable; - // Whether a DevicePolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? DeviceEditable; - }; - - dictionary ManagedProxySettingsType { - // The active value currently used by the network configuration manager - // (e.g. Shill). - ProxySettingsType? Active; - // The source from which the effective property value was determined. - DOMString? Effective; - // The property value provided by the user policy. - ProxySettingsType? UserPolicy; - // The property value provided by the device policy. - ProxySettingsType? DevicePolicy; - // The property value set by the logged in user. Only provided if - // |UserEditable| is true. - ProxySettingsType? UserSetting; - // The value set for all users of the device. Only provided if - // |DeviceEditiable| is true. - ProxySettingsType? SharedSetting; - // Whether a UserPolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? UserEditable; - // Whether a DevicePolicy for the property exists and allows the property to - // be edited (i.e. the policy set recommended property value). - // Defaults to false. - boolean? DeviceEditable; - }; - - // Sub-dictionary types. - - dictionary CellularProviderProperties { - // The operator name. - DOMString Name; - // Cellular network ID as a simple concatenation of the network's - // MCC (Mobile Country Code) and MNC (Mobile Network Code). - DOMString Code; - // The two-letter country code. - DOMString? Country; - }; - - dictionary IssuerSubjectPattern { - // If set, the value against which to match the certificate subject's - // common name. - DOMString? CommonName; - // If set, the value against which to match the certificate subject's - // common location. - DOMString? Locality; - // If set, the value against which to match the certificate subject's - // organizations. At least one organization should match the value. - DOMString? Organization; - // If set, the value against which to match the certificate subject's - // organizational units. At least one organizational unit should match the - // value. - DOMString? OrganizationalUnit; - }; - - dictionary CertificatePattern { - // List of URIs to which the user can be directed in case no certificates - // that match this pattern are found. - DOMString[]? EnrollmentURI; - // If set, pattern against which X.509 issuer settings should be matched. - IssuerSubjectPattern? Issuer; - // List of certificate issuer CA certificates. A certificate must be signed - // by one of them in order to match this pattern. - DOMString[]? IssuerCARef; - // If set, pattern against which X.509 subject settings should be matched. - IssuerSubjectPattern? Subject; - }; - - dictionary EAPProperties { - DOMString? AnonymousIdentity; - CertificatePattern? ClientCertPattern; - DOMString? ClientCertPKCS11Id; - DOMString? ClientCertProvisioningProfileId; - DOMString? ClientCertRef; - ClientCertificateType ClientCertType; - DOMString? Identity; - DOMString? Inner; - // The outer EAP type. Required by ONC, but may not be provided when - // translating from Shill. - DOMString? Outer; - DOMString? Password; - boolean? SaveCredentials; - DOMString[]? ServerCAPEMs; - DOMString[]? ServerCARefs; - ManagedDOMString? SubjectMatch; - boolean? UseProactiveKeyCaching; - boolean? UseSystemCAs; - }; - - dictionary FoundNetworkProperties { - // Network availability. - DOMString Status; - // Network ID. - DOMString NetworkId; - // Access technology used by the network. - DOMString Technology; - // The network operator's short-format name. - DOMString? ShortName; - // The network operator's long-format name. - DOMString? LongName; - }; - - dictionary IPConfigProperties { - // Gateway address used for the IP configuration. - DOMString? Gateway; - // The IP address for a connection. Can be IPv4 or IPv6 address, depending - // on value of Type. - DOMString? IPAddress; - // Array of IP blocks in CIDR notation, see onc_spec.md for details. - DOMString[]? ExcludedRoutes; - // Array of IP blocks in CIDR notation, see onc_spec.md for details. - DOMString[]? IncludedRoutes; - // Array of addresses used for name servers. - DOMString[]? NameServers; - // Array of strings for name resolution, see onc_spec.md for details. - DOMString[]? SearchDomains; - // The routing prefix. - long? RoutingPrefix; - // The IP configuration type. Can be IPv4 or IPv6. - DOMString? Type; - // The URL for WEb Proxy Auto-Discovery, as reported over DHCP. - DOMString? WebProxyAutoDiscoveryUrl; - }; - - dictionary ManagedIPConfigProperties { - // See $(ref:IPConfigProperties.Gateway). - ManagedDOMString? Gateway; - // See $(ref:IPConfigProperties.IPAddress). - ManagedDOMString? IPAddress; - // See $(ref:IPConfigProperties.NameServers). - ManagedDOMStringList? NameServers; - // See $(ref:IPConfigProperties.RoutingPrefix). - ManagedLong? RoutingPrefix; - // See $(ref:IPConfigProperties.Type). - ManagedDOMString? Type; - // See $(ref:IPConfigProperties.WebProxyAutoDiscoveryUrl). - ManagedDOMString? WebProxyAutoDiscoveryUrl; - }; - - dictionary PaymentPortal { - // The HTTP method to use for the payment portal. - DOMString Method; - // The post data to send to the payment portal. Ignored unless - // Method is POST. - DOMString? PostData; - // The payment portal URL. - DOMString? Url; - }; - - dictionary ProxyLocation { - // The proxy IP address host. - DOMString Host; - // The port to use for the proxy. - long Port; - }; - - dictionary ManagedProxyLocation { - // See $(ref:ProxyLocation.Host). - ManagedDOMString Host; - // See $(ref:ProxyLocation.Port). - ManagedLong Port; - }; - - dictionary ManualProxySettings { - // Settings for HTTP proxy. - ProxyLocation? HTTPProxy; - // Settings for secure HTTP proxy. - ProxyLocation? SecureHTTPProxy; - // Settings for FTP proxy. - ProxyLocation? FTPProxy; - // Settings for SOCKS proxy. - ProxyLocation? SOCKS; - }; - - dictionary ManagedManualProxySettings { - // See $(ref:ManualProxySettings.HTTPProxy). - ManagedProxyLocation? HTTPProxy; - // See $(ref:ManualProxySettings.SecureHTTPProxy). - ManagedProxyLocation? SecureHTTPProxy; - // See $(ref:ManualProxySettings.FTPProxy). - ManagedProxyLocation? FTPProxy; - // See $(ref:ManualProxySettings.SOCKS). - ManagedProxyLocation? SOCKS; - }; - - dictionary ProxySettings { - // The type of proxy settings. - ProxySettingsType Type; - // Manual proxy settings - used only for Manual proxy settings. - ManualProxySettings? Manual; - // Domains and hosts for which manual proxy settings are excluded. - DOMString[]? ExcludeDomains; - // URL for proxy auto-configuration file. - DOMString? PAC; - }; - - dictionary ManagedProxySettings { - // See $(ref:ProxySettings.Type). - ManagedProxySettingsType Type; - // See $(ref:ProxySettings.Manual). - ManagedManualProxySettings? Manual; - // See $(ref:ProxySettings.ExcludeDomains). - ManagedDOMStringList? ExcludeDomains; - // See $(ref:ProxySettings.PAC). - ManagedDOMString? PAC; - }; - - dictionary SIMLockStatus { - // The status of SIM lock - possible values are 'sim-pin', - // 'sim-puk' and ''. - DOMString LockType; - // Whether SIM lock is enabled. - boolean LockEnabled; - // Number of PIN lock tries allowed before PUK is required to unlock the - // SIM. - long? RetriesLeft; - }; - - dictionary ThirdPartyVPNProperties { - // ID of the third-party VPN provider extension. - DOMString ExtensionID; - // The VPN provider name. - DOMString? ProviderName; - }; - - dictionary ManagedThirdPartyVPNProperties { - // See $(ref:ThirdPartyVPNProperties.ExtensionID). - ManagedDOMString ExtensionID; - // See $(ref:ThirdPartyVPNProperties.ProviderName). - DOMString? ProviderName; - }; - - // Network type dictionary types. - - dictionary CellularProperties { - // Whether the cellular network should be connected automatically (when - // in range). - boolean? AutoConnect; - // The cellular network activation type. - DOMString? ActivationType; - // Carrier account activation state. - ActivationStateType? ActivationState; - // Whether roaming is allowed for the network. - boolean? AllowRoaming; - // Cellular device technology family - CDMA or - // GSM. - DOMString? Family; - // The firmware revision loaded in the cellular modem. - DOMString? FirmwareRevision; - // The list of networks found during the most recent network scan. - FoundNetworkProperties[]? FoundNetworks; - // The cellular modem hardware revision. - DOMString? HardwareRevision; - // Information about the operator that issued the SIM card currently - // installed in the modem. - CellularProviderProperties? HomeProvider; - // The cellular modem manufacturer. - DOMString? Manufacturer; - // The cellular modem model ID. - DOMString? ModelID; - // If the modem is registered on a network, the network technology - // currently in use. - DOMString? NetworkTechnology; - // Online payment portal a user can use to sign-up for or modify a mobile - // data plan. - PaymentPortal? PaymentPortal; - // The roaming state of the cellular modem on the current network. - DOMString? RoamingState; - // True when a cellular network scan is in progress. - boolean? Scanning; - // Information about the operator on whose network the modem is currently - // registered. - CellularProviderProperties? ServingOperator; - // The state of SIM lock for GSM family networks. - SIMLockStatus? SIMLockStatus; - // Whether a SIM card is present. - boolean? SIMPresent; - // The current network signal strength. - long? SignalStrength; - // Whether the cellular network supports scanning. - boolean? SupportNetworkScan; - }; - - dictionary ManagedCellularProperties { - // See $(ref:CellularProperties.AutoConnect). - ManagedBoolean? AutoConnect; - // See $(ref:CellularProperties.ActivationType). - DOMString? ActivationType; - // See $(ref:CellularProperties.ActivationState). - ActivationStateType? ActivationState; - // See $(ref:CellularProperties.AllowRoaming). - boolean? AllowRoaming; - // See $(ref:CellularProperties.Family). - DOMString? Family; - // See $(ref:CellularProperties.FirmwareRevision). - DOMString? FirmwareRevision; - // See $(ref:CellularProperties.FoundNetworks). - FoundNetworkProperties[]? FoundNetworks; - // See $(ref:CellularProperties.HardwareRevision). - DOMString? HardwareRevision; - // See $(ref:CellularProperties.HomeProvider). - CellularProviderProperties[]? HomeProvider; - // See $(ref:CellularProperties.Manufacturer). - DOMString? Manufacturer; - // See $(ref:CellularProperties.ModelID). - DOMString? ModelID; - // See $(ref:CellularProperties.NetworkTechnology). - DOMString? NetworkTechnology; - // See $(ref:CellularProperties.PaymentPortal). - PaymentPortal? PaymentPortal; - // See $(ref:CellularProperties.RoamingState). - DOMString? RoamingState; - // See $(ref:CellularProperties.Scanning). - boolean? Scanning; - // See $(ref:CellularProperties.ServingOperator). - CellularProviderProperties? ServingOperator; - // See $(ref:CellularProperties.SIMLockStatus). - SIMLockStatus? SIMLockStatus; - // See $(ref:CellularProperties.SIMPresent). - boolean? SIMPresent; - // See $(ref:CellularProperties.SignalStrength). - long? SignalStrength; - // See $(ref:CellularProperties.SupportNetworkScan). - boolean? SupportNetworkScan; - }; - - dictionary CellularStateProperties { - // See $(ref:CellularProperties.ActivationState). - ActivationStateType? ActivationState; - // See $(ref:CellularProperties.NetworkTechnology). - DOMString? NetworkTechnology; - // See $(ref:CellularProperties.RoamingState). - DOMString? RoamingState; - // See $(ref:CellularProperties.SIMPresent). - boolean? SIMPresent; - // See $(ref:CellularProperties.SignalStrength). - long? SignalStrength; - }; - - dictionary EthernetProperties { - // Whether the Ethernet network should be connected automatically. - boolean? AutoConnect; - // The authentication used by the Ethernet network. Possible values are - // None and 8021X. - DOMString? Authentication; - // Network's EAP settings. Required for 8021X authentication. - EAPProperties? EAP; - }; - - dictionary ManagedEthernetProperties { - // See $(ref:EthernetProperties.AutoConnect). - ManagedBoolean? AutoConnect; - // See $(ref:EthernetProperties.Authentication). - ManagedDOMString? Authentication; - }; - - dictionary EthernetStateProperties { - // See $(ref:EthernetProperties.Authentication). - DOMString Authentication; - }; - - dictionary VPNProperties { - // Whether the VPN network should be connected automatically. - boolean? AutoConnect; - // The VPN host. - DOMString? Host; - // The VPN type. This cannot be an enum because of 'L2TP-IPSec'. - // This is optional for NetworkConfigProperties which is passed to - // setProperties which may be used to set only specific properties. - DOMString? Type; - }; - - dictionary ManagedVPNProperties { - // See $(ref:VPNProperties.AutoConnect). - ManagedBoolean? AutoConnect; - // See $(ref:VPNProperties.Host). - ManagedDOMString? Host; - // See $(ref:VPNProperties.Type). - ManagedDOMString? Type; - }; - - dictionary VPNStateProperties { - // See $(ref:VPNProperties.Type). - DOMString Type; - }; - - dictionary WiFiProperties { - [deprecated="Removed in M131. There is no active ARP polling now."] - boolean? AllowGatewayARPPolling; - // Whether the WiFi network should be connected automatically when in range. - boolean? AutoConnect; - // The BSSID of the associated access point.. - DOMString? BSSID; - // The network EAP properties. Required for WEP-8021X and - // WPA-EAP networks. - EAPProperties? EAP; - // The WiFi service operating frequency in MHz. For connected networks, the - // current frequency on which the network is connected. Otherwise, the - // frequency of the best available BSS. - long? Frequency; - // Contains all operating frequency recently seen for the WiFi network. - long[]? FrequencyList; - // HEX-encoded copy of the network SSID. - DOMString? HexSSID; - // Whether the network SSID will be broadcast. - boolean? HiddenSSID; - // The passphrase for WEP/WPA/WPA2 connections. This property can only be - // set - properties returned by $(ref:getProperties) will not contain this - // value. - DOMString? Passphrase; - // Deprecated, ignored. - long? RoamThreshold; - // The network SSID. - DOMString? SSID; - // The network security type. - DOMString? Security; - // The network signal strength. - long? SignalStrength; - }; - - dictionary ManagedWiFiProperties { - // See $(ref:WiFiProperties.AllowGatewayARPPolling). - ManagedBoolean? AllowGatewayARPPolling; - // See $(ref:WiFiProperties.AutoConnect). - ManagedBoolean? AutoConnect; - // See $(ref:WiFiProperties.BSSID). - DOMString? BSSID; - // See $(ref:WiFiProperties.Frequency). - long? Frequency; - // See $(ref:WiFiProperties.FrequencyList). - long[]? FrequencyList; - // See $(ref:WiFiProperties.HexSSID). - ManagedDOMString? HexSSID; - // See $(ref:WiFiProperties.HiddenSSID). - ManagedBoolean? HiddenSSID; - // Deprecated, ignored. See $(ref:WiFiProperties.RoamThreshold). - ManagedLong? RoamThreshold; - // See $(ref:WiFiProperties.SSID). - ManagedDOMString? SSID; - // See $(ref:WiFiProperties.Security). - ManagedDOMString Security; - // See $(ref:WiFiProperties.SignalStrength). - long? SignalStrength; - }; - - dictionary WiFiStateProperties { - // See $(ref:WiFiProperties.BSSID). - DOMString? BSSID; - // See $(ref:WiFiProperties.Frequency). - long? Frequency; - // See $(ref:WiFiProperties.HexSSID). - DOMString? HexSSID; - // See $(ref:WiFiProperties.Security). - DOMString Security; - // See $(ref:WiFiProperties.SignalStrength). - long? SignalStrength; - // See $(ref:WiFiProperties.SSID). - DOMString? SSID; - }; - - // Deprecated - dictionary WiMAXProperties { - // Whether the network should be connected automatically. - boolean? AutoConnect; - // The network EAP properties. - EAPProperties? EAP; - }; - - dictionary NetworkConfigProperties { - // See $(ref:NetworkProperties.Cellular). - CellularProperties? Cellular; - // See $(ref:NetworkProperties.Ethernet). - EthernetProperties? Ethernet; - // See $(ref:NetworkProperties.GUID). - DOMString? GUID; - // See $(ref:NetworkProperties.IPAddressConfigType). - IPConfigType? IPAddressConfigType; - // See $(ref:NetworkProperties.Name). - DOMString? Name; - // See $(ref:NetworkProperties.NameServersConfigType). - IPConfigType? NameServersConfigType; - // See $(ref:NetworkProperties.Priority). - long? Priority; - // See $(ref:NetworkProperties.Type). - NetworkType? Type; - // See $(ref:NetworkProperties.VPN). - VPNProperties? VPN; - // See $(ref:NetworkProperties.WiFi). - WiFiProperties? WiFi; - // Deprecated. - WiMAXProperties? WiMAX; - }; - - dictionary NetworkProperties { - // For cellular networks, cellular network properties. - CellularProperties? Cellular; - // Whether the network is connectable. - boolean? Connectable; - // The network's current connection state. - ConnectionStateType? ConnectionState; - // The last recorded network error state. - DOMString? ErrorState; - // For Ethernet networks, the Ethernet network properties. - EthernetProperties? Ethernet; - // The network GUID. - DOMString GUID; - // The network's IP address configuration type. - IPConfigType? IPAddressConfigType; - // The network's IP configuration. - IPConfigProperties[]? IPConfigs; - // The network's MAC address. - DOMString? MacAddress; - // Whether the network is metered. - boolean? Metered; - // A user friendly network name. - DOMString? Name; - // The IP configuration type for the name servers used by the network. - IPConfigType? NameServersConfigType; - // The network priority. - long? Priority; - // The network's proxy settings. - ProxySettings? ProxySettings; - // For a connected network, whether the network connectivity to the - // Internet is limited, e.g. if the network is behind a portal, or a - // cellular network is not activated. - boolean? RestrictedConnectivity; - // The network's static IP configuration. - IPConfigProperties? StaticIPConfig; - // IP configuration that was received from the DHCP server before applying - // static IP configuration. - IPConfigProperties? SavedIPConfig; - // Indicates whether and how the network is configured. Possible values are: - //
    - //
  • Device
  • - //
  • DevicePolicy
  • - //
  • User
  • - //
  • UserPolicy
  • - //
  • None
  • - //
- // 'None' conflicts with extension code generation so we must use a string - // for 'Source' instead of a SourceType enum. - DOMString? Source; - // When traffic counters were last reset. - double? TrafficCounterResetTime; - // The network type. - NetworkType Type; - // For VPN networks, the network VPN properties. - VPNProperties? VPN; - // For WiFi networks, the network WiFi properties. - WiFiProperties? WiFi; - }; - - dictionary ManagedProperties { - // See $(ref:NetworkProperties.Cellular). - ManagedCellularProperties? Cellular; - // See $(ref:NetworkProperties.Connectable). - boolean? Connectable; - // See $(ref:NetworkProperties.ConnectionState). - ConnectionStateType? ConnectionState; - // See $(ref:NetworkProperties.ErrorState). - DOMString? ErrorState; - // See $(ref:NetworkProperties.Ethernet). - ManagedEthernetProperties? Ethernet; - // See $(ref:NetworkProperties.GUID). - DOMString GUID; - // See $(ref:NetworkProperties.IPAddressConfigType). - ManagedIPConfigType? IPAddressConfigType; - // See $(ref:NetworkProperties.IPConfigs). - IPConfigProperties[]? IPConfigs; - // See $(ref:NetworkProperties.MacAddress). - DOMString? MacAddress; - // See $(ref:NetworkProperties.Metered). - ManagedBoolean? Metered; - // See $(ref:NetworkProperties.Name). - ManagedDOMString? Name; - // See $(ref:NetworkProperties.NameServersConfigType). - ManagedIPConfigType? NameServersConfigType; - // See $(ref:NetworkProperties.Priority). - ManagedLong? Priority; - // See $(ref:NetworkProperties.ProxySettings). - ManagedProxySettings? ProxySettings; - // See $(ref:NetworkProperties.RestrictedConnectivity). - boolean? RestrictedConnectivity; - // See $(ref:NetworkProperties.StaticIPConfig). - ManagedIPConfigProperties? StaticIPConfig; - // See $(ref:NetworkProperties.SavedIPConfig). - IPConfigProperties? SavedIPConfig; - // See $(ref:NetworkProperties.Source). - DOMString? Source; - // See $(ref:NetworkProperties.TrafficCounterResetTime). - double? TrafficCounterResetTime; - // See $(ref:NetworkProperties.Type). - NetworkType Type; - // See $(ref:NetworkProperties.VPN). - ManagedVPNProperties? VPN; - // See $(ref:NetworkProperties.WiFi). - ManagedWiFiProperties? WiFi; - }; - - dictionary NetworkStateProperties { - // See $(ref:NetworkProperties.Cellular). - CellularStateProperties? Cellular; - // See $(ref:NetworkProperties.Connectable). - boolean? Connectable; - // See $(ref:NetworkProperties.ConnectionState). - ConnectionStateType? ConnectionState; - // See $(ref:NetworkProperties.Ethernet). - EthernetStateProperties? Ethernet; - // See $(ref:NetworkProperties.ErrorState). - DOMString? ErrorState; - // See $(ref:NetworkProperties.GUID). - DOMString GUID; - // See $(ref:NetworkProperties.Name). - DOMString? Name; - // See $(ref:NetworkProperties.Priority). - long? Priority; - // See $(ref:NetworkProperties.Source). - DOMString? Source; - // See $(ref:NetworkProperties.Type). - NetworkType Type; - // See $(ref:NetworkProperties.VPN). - VPNStateProperties? VPN; - // See $(ref:NetworkProperties.WiFi). - WiFiStateProperties? WiFi; - }; - - dictionary DeviceStateProperties { - // Set if the device is enabled. True if the device is currently scanning. - boolean? Scanning; - - // The SIM lock status if Type = Cellular and SIMPresent = True. - SIMLockStatus? SIMLockStatus; - - // Set to the SIM present state if the device type is Cellular. - boolean? SIMPresent; - - // The current state of the device. - DeviceStateType State; - - // The network type associated with the device (Cellular, Ethernet or WiFi). - NetworkType Type; - }; - - dictionary NetworkFilter { - // The type of networks to return. - NetworkType networkType; - - // If true, only include visible (physically connected or in-range) - // networks. Defaults to 'false'. - boolean? visible; - - // If true, only include configured (saved) networks. Defaults to 'false'. - boolean? configured; - - // Maximum number of networks to return. Defaults to 1000 if unspecified. - // Use 0 for no limit. - long? limit; - }; - - dictionary GlobalPolicy { - // If true, only policy networks may auto connect. Defaults to false. - boolean? AllowOnlyPolicyNetworksToAutoconnect; - - // If true, only policy networks may be connected to and no new networks may - // be added or configured. Defaults to false. - boolean? AllowOnlyPolicyNetworksToConnect; - - // If true and a managed network is available in the visible network list, - // only policy networks may be connected to and no new networks may be added - // or configured. Defaults to false. - boolean? AllowOnlyPolicyNetworksToConnectIfAvailable; - - // List of blocked networks. Connections to blocked networks are - // prohibited. Networks can be unblocked again by specifying an explicit - // network configuration. Defaults to an empty list. - DOMString[]? BlockedHexSSIDs; - }; - - callback VoidCallback = void(); - callback BooleanCallback = void(boolean result); - callback StringCallback = void(DOMString result); - callback GetPropertiesCallback = void(NetworkProperties result); - callback GetManagedPropertiesCallback = void(ManagedProperties result); - callback GetStatePropertiesCallback = void(NetworkStateProperties result); - callback GetNetworksCallback = void(NetworkStateProperties[] result); - callback GetDeviceStatesCallback = void(DeviceStateProperties[] result); - callback GetEnabledNetworkTypesCallback = void(NetworkType[] result); - callback CaptivePortalStatusCallback = void(CaptivePortalStatus result); - callback GetGlobalPolicyCallback = void(GlobalPolicy result); - - interface Functions { - // Gets all the properties of the network with id networkGuid. Includes all - // properties of the network (read-only and read/write values). - // |networkGuid|: The GUID of the network to get properties for. - // |callback|: Called with the network properties when received. - static void getProperties(DOMString networkGuid, - GetPropertiesCallback callback); - - // Gets the merged properties of the network with id networkGuid from the - // sources: User settings, shared settings, user policy, device policy and - // the currently active settings. - // |networkGuid|: The GUID of the network to get properties for. - // |callback|: Called with the managed network properties when received. - static void getManagedProperties(DOMString networkGuid, - GetManagedPropertiesCallback callback); - - // Gets the cached read-only properties of the network with id networkGuid. - // This is meant to be a higher performance function than - // $(ref:getProperties), which requires a round trip to query the networking - // subsystem. The following properties are returned for all networks: GUID, - // Type, Name, WiFi.Security. Additional properties are provided for visible - // networks: ConnectionState, ErrorState, WiFi.SignalStrength, - // Cellular.NetworkTechnology, Cellular.ActivationState, - // Cellular.RoamingState. - // |networkGuid|: The GUID of the network to get properties for. - // |callback|: Called immediately with the network state properties. - static void getState(DOMString networkGuid, - GetStatePropertiesCallback callback); - - // Sets the properties of the network with id |networkGuid|. This is only - // valid for configured networks (Source != None). Unconfigured visible - // networks should use $(ref:createNetwork) instead. - // - // In kiosk sessions, calling this method on a shared network will fail. - // - // |networkGuid|: The GUID of the network to set properties for. - // |properties|: The properties to set. - // |callback|: Called when the operation has completed. - static void setProperties(DOMString networkGuid, - NetworkConfigProperties properties, - optional VoidCallback callback); - - // Creates a new network configuration from properties. If a matching - // configured network already exists, this will fail. Otherwise returns the - // GUID of the new network. - // |shared|:

- // If true, share this network configuration with - // other users. - //

- //

- // This option is exposed only to Chrome's Web UI. - // When called by apps, false is the only allowed value. - //

- // |properties|: The properties to configure the new network with. - // |callback|: Called with the GUID for the new network configuration once - // the network has been created. - static void createNetwork(boolean shared, - NetworkConfigProperties properties, - optional StringCallback callback); - - //

- // Forgets a network configuration by clearing any configured properties - // for the network with GUID networkGuid. This may also - // include any other networks with matching identifiers (e.g. WiFi SSID - // and Security). If no such configuration exists, an error will be set - // and the operation will fail. - //

- //

- // In kiosk sessions, this method will not be able to forget shared - // network configurations. - //

- // |networkGuid|: The GUID of the network to forget. - // |callback|: Called when the operation has completed. - static void forgetNetwork(DOMString networkGuid, - optional VoidCallback callback); - - // Returns a list of network objects with the same properties provided by - // $(ref:getState). A filter is provided to specify the - // type of networks returned and to limit the number of networks. Networks - // are ordered by the system based on their priority, with connected or - // connecting networks listed first. - // |filter|: Describes which networks to return. - // |callback|: Called with a dictionary of networks and their state - // properties when received. - static void getNetworks(NetworkFilter filter, - GetNetworksCallback callback); - - // Returns states of available networking devices. - // |callback|: Called with a list of devices and their state. - static void getDeviceStates(GetDeviceStatesCallback callback); - - // Enables any devices matching the specified network type. Note, the type - // might represent multiple network types (e.g. 'Wireless'). - // |networkType|: The type of network to enable. - static void enableNetworkType(NetworkType networkType); - - // Disables any devices matching the specified network type. See note for - // $(ref:enableNetworkType). - // |networkType|: The type of network to disable. - static void disableNetworkType(NetworkType networkType); - - // Requests that the networking subsystem scan for new networks and - // update the list returned by $(ref:getVisibleNetworks). This is only a - // request: the network subsystem can choose to ignore it. If the list - // is updated, then the $(ref:onNetworkListChanged) event will be fired. - // |networkType|: If provided, requests a scan specific to the type. - // For Cellular a mobile network scan will be requested if supported. - static void requestNetworkScan(optional NetworkType networkType); - - // Starts a connection to the network with networkGuid. - // |networkGuid|: The GUID of the network to connect to. - // |callback|: Called when the connect request has been sent. Note: the - // connection may not have completed. Observe $(ref:onNetworksChanged) - // to be notified when a network state changes. If the connect request - // immediately failed (e.g. the network is unconfigured), - // $(ref:runtime.lastError) will be set with a failure reason. - static void startConnect(DOMString networkGuid, - optional VoidCallback callback); - - // Starts a disconnect from the network with networkGuid. - // |networkGuid|: The GUID of the network to disconnect from. - // |callback|: Called when the disconnect request has been sent. See note - // for $(ref:startConnect). - static void startDisconnect(DOMString networkGuid, - optional VoidCallback callback); - - // Returns captive portal status for the network matching 'networkGuid'. - // |networkGuid|: The GUID of the network to get captive portal status for. - // |callback|: A callback function that returns the results of the query for - // network captive portal status. - static void getCaptivePortalStatus(DOMString networkGuid, - CaptivePortalStatusCallback callback); - - // Gets the global policy properties. These properties are not expected to - // change during a session. - static void getGlobalPolicy(GetGlobalPolicyCallback callback); - }; - - interface Events { - // Fired when the properties change on any of the networks. Sends a list of - // GUIDs for networks whose properties have changed. - static void onNetworksChanged(DOMString[] changes); - - // Fired when the list of networks has changed. Sends a complete list of - // GUIDs for all the current networks. - static void onNetworkListChanged(DOMString[] changes); - - // Fired when the list of devices has changed or any device state properties - // have changed. - static void onDeviceStateListChanged(); - - // Fired when a portal detection for a network completes. Sends the GUID of - // the network and the corresponding captive portal status. - static void onPortalDetectionCompleted(DOMString networkGuid, - CaptivePortalStatus status); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/networking_private.idl b/tools/under-control/src/extensions/common/api/networking_private.idl deleted file mode 100755 index 4493f066..00000000 --- a/tools/under-control/src/extensions/common/api/networking_private.idl +++ /dev/null @@ -1,1124 +0,0 @@ -// Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// The chrome.networkingPrivate API is used for configuring -// network connections (Cellular, Ethernet, VPN or WiFi). This private -// API is only valid if called from a browser or app associated with the -// primary user. See the Open Network Configuration (ONC) documentation for -// descriptions of properties: -// -// src/components/onc/docs/onc_spec.html, or the -// -// Open Network Configuration page at chromium.org. -//

-// NOTE: Most dictionary properties and enum values use UpperCamelCase to match -// the ONC spec instead of the JavaScript lowerCamelCase convention. -//

-// "State" properties describe just the ONC properties returned by -// $(ref:networkingPrivate.getState) and $(ref:networkingPrivate.getNetworks). -//

-// "Config" properties describe just the ONC properties that can be configured -// through this API. NOTE: Not all configuration properties are exposed at this -// time, only those currently required by the Chrome Settings UI. -// TODO(stevenjb): Provide all configuration properties and types, -// crbug.com/380937. -//

-// TODO(stevenjb/pneubeck): Merge the ONC documentation with this document and -// use it as the ONC specification. - -namespace networkingPrivate { - enum ActivationStateType { - Activated, Activating, NotActivated, PartiallyActivated - }; - - enum CaptivePortalStatus { - Unknown, Offline, Online, Portal, ProxyAuthRequired - }; - - enum ConnectionStateType { - Connected, Connecting, NotConnected - }; - - enum DeviceStateType { - // Device is available but not initialized. - Uninitialized, - // Device is initialized but not enabled. - Disabled, - // Enabled state has been requested but has not completed. - Enabling, - // Device is enabled. - Enabled, - // Device is prohibited. - Prohibited - }; - - enum IPConfigType { - DHCP, Static - }; - - enum NetworkType { - All, Cellular, Ethernet, Tether, VPN, Wireless, WiFi - }; - - enum ProxySettingsType { - Direct, Manual, PAC, WPAD - }; - - enum ApnType { - Default, Attach, Tether - }; - - enum ApnSource { - Modem, Modb, Ui, Admin - }; - - // Managed property types. These types all share a common structure: - // Active: For properties that are translated from the configuration - // manager (e.g. Shill), the 'active' value currently in use by the - // configuration manager. - // Effective: The effective source for the property: UserPolicy, DevicePolicy, - // UserSetting or SharedSetting. - // UserPolicy: The value provided by the user policy. - // DevicePolicy: The value provided by the device policy. - // UserSetting: The value set by the logged in user. Only provided if - // UserEditable is true (i.e. no policy affects the property or the - // policy provided value is recommened only). - // SharedSetting: The value set for all users of the device. Only provided if - // DeviceEditiable is true (i.e. no policy affects the property or the - // policy provided value is recommened only). - // UserEditable: True if a UserPolicy exists and allows the property to be - // edited (i.e. is a recommended value). Defaults to False. - // DeviceEditable: True if a DevicePolicy exists and allows the property to be - // edited (i.e. is a recommended value). Defaults to False. - - dictionary ManagedBoolean { - boolean? Active; - DOMString? Effective; - boolean? UserPolicy; - boolean? DevicePolicy; - boolean? UserSetting; - boolean? SharedSetting; - boolean? UserEditable; - boolean? DeviceEditable; - }; - - dictionary ManagedLong { - long? Active; - DOMString? Effective; - long? UserPolicy; - long? DevicePolicy; - long? UserSetting; - long? SharedSetting; - boolean? UserEditable; - boolean? DeviceEditable; - }; - - dictionary ManagedDOMString { - DOMString? Active; - DOMString? Effective; - DOMString? UserPolicy; - DOMString? DevicePolicy; - DOMString? UserSetting; - DOMString? SharedSetting; - boolean? UserEditable; - boolean? DeviceEditable; - }; - - dictionary ManagedDOMStringList { - DOMString[]? Active; - DOMString? Effective; - DOMString[]? UserPolicy; - DOMString[]? DevicePolicy; - DOMString[]? UserSetting; - DOMString[]? SharedSetting; - boolean? UserEditable; - boolean? DeviceEditable; - }; - - dictionary ManagedIPConfigType { - IPConfigType? Active; - DOMString? Effective; - IPConfigType? UserPolicy; - IPConfigType? DevicePolicy; - IPConfigType? UserSetting; - IPConfigType? SharedSetting; - boolean? UserEditable; - boolean? DeviceEditable; - }; - - dictionary ManagedProxySettingsType { - ProxySettingsType? Active; - DOMString? Effective; - ProxySettingsType? UserPolicy; - ProxySettingsType? DevicePolicy; - ProxySettingsType? UserSetting; - ProxySettingsType? SharedSetting; - boolean? UserEditable; - boolean? DeviceEditable; - }; - - // Sub-dictionary types. - - dictionary APNProperties { - DOMString AccessPointName; - DOMString? Authentication; - DOMString? Language; - DOMString? LocalizedName; - DOMString? Name; - DOMString? Password; - DOMString? Username; - ApnType[]? ApnTypes; - ApnSource? Source; - }; - - dictionary ManagedAPNProperties { - ManagedDOMString AccessPointName; - ManagedDOMString? Authentication; - ManagedDOMString? Language; - ManagedDOMString? LocalizedName; - ManagedDOMString? Name; - ManagedDOMString? Password; - ManagedDOMString? Username; - }; - - dictionary ManagedAPNList { - APNProperties[]? Active; - DOMString? Effective; - APNProperties[]? UserPolicy; - APNProperties[]? DevicePolicy; - APNProperties[]? UserSetting; - APNProperties[]? SharedSetting; - boolean? UserEditable; - boolean? DeviceEditable; - }; - - dictionary CellularProviderProperties { - DOMString Name; - DOMString Code; - DOMString? Country; - }; - - dictionary CellularSimState { - // Whether or not a PIN should be required. - boolean requirePin; - - // The current PIN (required for any change, even when the SIM is unlocked). - DOMString currentPin; - - // If provided, change the PIN to |newPin|. |requirePin| must be true. - DOMString? newPin; - }; - - dictionary IssuerSubjectPattern { - DOMString? CommonName; - DOMString? Locality; - DOMString? Organization; - DOMString? OrganizationalUnit; - }; - - dictionary ManagedIssuerSubjectPattern { - ManagedDOMString? CommonName; - ManagedDOMString? Locality; - ManagedDOMString? Organization; - ManagedDOMString? OrganizationalUnit; - }; - - dictionary CertificatePattern { - DOMString[]? EnrollmentURI; - IssuerSubjectPattern? Issuer; - DOMString[]? IssuerCAPEMs; - DOMString[]? IssuerCARef; - IssuerSubjectPattern? Subject; - }; - - dictionary ManagedCertificatePattern { - ManagedDOMStringList? EnrollmentURI; - ManagedIssuerSubjectPattern? Issuer; - ManagedDOMStringList? IssuerCARef; - ManagedIssuerSubjectPattern? Subject; - }; - - dictionary EAPProperties { - DOMString? AnonymousIdentity; - CertificatePattern? ClientCertPattern; - DOMString? ClientCertPKCS11Id; - DOMString? ClientCertProvisioningProfileId; - DOMString? ClientCertRef; - DOMString? ClientCertType; - DOMString? Identity; - DOMString? Inner; - // The outer EAP type. Required by ONC, but may not be provided when - // translating from Shill. - DOMString? Outer; - DOMString? Password; - boolean? SaveCredentials; - DOMString[]? ServerCAPEMs; - DOMString[]? ServerCARefs; - DOMString? SubjectMatch; - DOMString? TLSVersionMax; - boolean? UseProactiveKeyCaching; - boolean? UseSystemCAs; - }; - - dictionary ManagedEAPProperties { - ManagedDOMString? AnonymousIdentity; - ManagedCertificatePattern? ClientCertPattern; - ManagedDOMString? ClientCertPKCS11Id; - ManagedDOMString? ClientCertProvisioningProfileId; - ManagedDOMString? ClientCertRef; - ManagedDOMString? ClientCertType; - ManagedDOMString? Identity; - ManagedDOMString? Inner; - // The outer EAP type. Required by ONC, but may not be provided when - // translating from Shill. - ManagedDOMString? Outer; - ManagedDOMString? Password; - ManagedBoolean? SaveCredentials; - ManagedDOMStringList? ServerCAPEMs; - ManagedDOMStringList? ServerCARefs; - ManagedDOMString? SubjectMatch; - ManagedDOMString? TLSVersionMax; - ManagedBoolean? UseProactiveKeyCaching; - ManagedBoolean? UseSystemCAs; - }; - - dictionary FoundNetworkProperties { - DOMString Status; - DOMString NetworkId; - DOMString Technology; - DOMString? ShortName; - DOMString? LongName; - }; - - dictionary IPConfigProperties { - DOMString? Gateway; - DOMString? IPAddress; - DOMString[]? ExcludedRoutes; - DOMString[]? IncludedRoutes; - DOMString[]? NameServers; - DOMString[]? SearchDomains; - long? RoutingPrefix; - DOMString? Type; - DOMString? WebProxyAutoDiscoveryUrl; - }; - - dictionary ManagedIPConfigProperties { - ManagedDOMString? Gateway; - ManagedDOMString? IPAddress; - ManagedDOMStringList? NameServers; - ManagedLong? RoutingPrefix; - ManagedDOMString? Type; - ManagedDOMString? WebProxyAutoDiscoveryUrl; - }; - - dictionary XAUTHProperties { - DOMString? Password; - boolean? SaveCredentials; - DOMString? Username; - }; - - dictionary ManagedXAUTHProperties { - ManagedDOMString? Password; - ManagedBoolean? SaveCredentials; - ManagedDOMString? Username; - }; - - dictionary IPSecProperties { - DOMString AuthenticationType; - CertificatePattern? ClientCertPattern; - DOMString? ClientCertPKCS11Id; - DOMString? ClientCertProvisioningProfileId; - DOMString? ClientCertRef; - DOMString? ClientCertType; - EAPProperties? EAP; - DOMString? Group; - long? IKEVersion; - DOMString? LocalIdentity; - DOMString? PSK; - DOMString? RemoteIdentity; - boolean? SaveCredentials; - DOMString[]? ServerCAPEMs; - DOMString[]? ServerCARefs; - XAUTHProperties? XAUTH; - }; - - dictionary ManagedIPSecProperties { - ManagedDOMString AuthenticationType; - ManagedCertificatePattern? ClientCertPattern; - ManagedDOMString? ClientCertPKCS11Id; - ManagedDOMString? ClientCertProvisioningProfileId; - ManagedDOMString? ClientCertRef; - ManagedDOMString? ClientCertType; - ManagedEAPProperties? EAP; - ManagedDOMString? Group; - ManagedLong? IKEVersion; - ManagedDOMString? PSK; - ManagedBoolean? SaveCredentials; - ManagedDOMStringList? ServerCAPEMs; - ManagedDOMStringList? ServerCARefs; - ManagedXAUTHProperties? XAUTH; - }; - - dictionary L2TPProperties { - boolean? LcpEchoDisabled; - DOMString? Password; - boolean? SaveCredentials; - DOMString? Username; - }; - - dictionary ManagedL2TPProperties { - ManagedBoolean? LcpEchoDisabled; - ManagedDOMString? Password; - ManagedBoolean? SaveCredentials; - ManagedDOMString? Username; - }; - - dictionary PaymentPortal { - DOMString Method; - DOMString? PostData; - DOMString? Url; - }; - - dictionary ProxyLocation { - DOMString Host; - long Port; - }; - - dictionary ManagedProxyLocation { - ManagedDOMString Host; - ManagedLong Port; - }; - - dictionary ManualProxySettings { - ProxyLocation? HTTPProxy; - ProxyLocation? SecureHTTPProxy; - ProxyLocation? FTPProxy; - ProxyLocation? SOCKS; - }; - - dictionary ManagedManualProxySettings { - ManagedProxyLocation? HTTPProxy; - ManagedProxyLocation? SecureHTTPProxy; - ManagedProxyLocation? FTPProxy; - ManagedProxyLocation? SOCKS; - }; - - dictionary ProxySettings { - ProxySettingsType Type; - ManualProxySettings? Manual; - DOMString[]? ExcludeDomains; - DOMString? PAC; - }; - - dictionary ManagedProxySettings { - ManagedProxySettingsType Type; - ManagedManualProxySettings? Manual; - ManagedDOMStringList? ExcludeDomains; - ManagedDOMString? PAC; - }; - - dictionary VerifyX509 { - DOMString? Name; - DOMString? Type; - }; - - dictionary ManagedVerifyX509 { - ManagedDOMString? Name; - ManagedDOMString? Type; - }; - - dictionary OpenVPNProperties { - DOMString? Auth; - DOMString? AuthRetry; - boolean? AuthNoCache; - DOMString? Cipher; - DOMString? ClientCertPKCS11Id; - CertificatePattern? ClientCertPattern; - DOMString? ClientCertProvisioningProfileId; - DOMString? ClientCertRef; - DOMString? ClientCertType; - DOMString? CompLZO; - boolean? CompNoAdapt; - DOMString[]? ExtraHosts; - boolean? IgnoreDefaultRoute; - DOMString? KeyDirection; - DOMString? NsCertType; - DOMString? OTP; - DOMString? Password; - long? Port; - DOMString? Proto; - boolean? PushPeerInfo; - DOMString? RemoteCertEKU; - DOMString[]? RemoteCertKU; - DOMString? RemoteCertTLS; - long? RenegSec; - boolean? SaveCredentials; - DOMString[]? ServerCAPEMs; - DOMString[]? ServerCARefs; - DOMString? ServerCertRef; - long? ServerPollTimeout; - long? Shaper; - DOMString? StaticChallenge; - DOMString? TLSAuthContents; - DOMString? TLSRemote; - DOMString? TLSVersionMin; - DOMString? UserAuthenticationType; - DOMString? Username; - DOMString? Verb; - DOMString? VerifyHash; - VerifyX509? VerifyX509; - }; - - dictionary ManagedOpenVPNProperties { - ManagedDOMString? Auth; - ManagedDOMString? AuthRetry; - ManagedBoolean? AuthNoCache; - ManagedDOMString? Cipher; - ManagedDOMString? ClientCertPKCS11Id; - ManagedCertificatePattern? ClientCertPattern; - ManagedDOMString? ClientCertProvisioningProfileId; - ManagedDOMString? ClientCertRef; - ManagedDOMString? ClientCertType; - ManagedDOMString? CompLZO; - ManagedBoolean? CompNoAdapt; - ManagedDOMStringList? ExtraHosts; - ManagedBoolean? IgnoreDefaultRoute; - ManagedDOMString? KeyDirection; - ManagedDOMString? NsCertType; - ManagedDOMString? OTP; - ManagedDOMString? Password; - ManagedLong? Port; - ManagedDOMString? Proto; - ManagedBoolean? PushPeerInfo; - ManagedDOMString? RemoteCertEKU; - ManagedDOMStringList? RemoteCertKU; - ManagedDOMString? RemoteCertTLS; - ManagedLong? RenegSec; - ManagedBoolean? SaveCredentials; - ManagedDOMStringList? ServerCAPEMs; - ManagedDOMStringList? ServerCARefs; - ManagedDOMString? ServerCertRef; - ManagedLong? ServerPollTimeout; - ManagedLong? Shaper; - ManagedDOMString? StaticChallenge; - ManagedDOMString? TLSAuthContents; - ManagedDOMString? TLSRemote; - ManagedDOMString? TLSVersionMin; - ManagedDOMString? UserAuthenticationType; - ManagedDOMString? Username; - ManagedDOMString? Verb; - ManagedDOMString? VerifyHash; - ManagedVerifyX509? VerifyX509; - }; - - dictionary SIMLockStatus { - DOMString LockType; // sim-pin, sim-puk, or '' - boolean LockEnabled; - long? RetriesLeft; - }; - - dictionary ThirdPartyVPNProperties { - DOMString ExtensionID; - DOMString? ProviderName; - }; - - dictionary ManagedThirdPartyVPNProperties { - ManagedDOMString ExtensionID; - DOMString? ProviderName; - }; - - // Network type dictionary types. - - dictionary CellularProperties { - boolean? AutoConnect; - APNProperties? APN; - APNProperties[]? APNList; - DOMString? ActivationType; - ActivationStateType? ActivationState; - boolean? AllowRoaming; - DOMString? ESN; - DOMString? Family; - DOMString? FirmwareRevision; - FoundNetworkProperties[]? FoundNetworks; - DOMString? HardwareRevision; - CellularProviderProperties? HomeProvider; - DOMString? ICCID; - DOMString? IMEI; - APNProperties? LastGoodAPN; - DOMString? Manufacturer; - DOMString? MDN; - DOMString? MEID; - DOMString? MIN; - DOMString? ModelID; - DOMString? NetworkTechnology; - PaymentPortal? PaymentPortal; - DOMString? RoamingState; - boolean? Scanning; - CellularProviderProperties? ServingOperator; - SIMLockStatus? SIMLockStatus; - boolean? SIMPresent; - long? SignalStrength; - boolean? SupportNetworkScan; - }; - - dictionary ManagedCellularProperties { - ManagedBoolean? AutoConnect; - ManagedAPNProperties? APN; - ManagedAPNList? APNList; - DOMString? ActivationType; - ActivationStateType? ActivationState; - boolean? AllowRoaming; - DOMString? ESN; - DOMString? Family; - DOMString? FirmwareRevision; - FoundNetworkProperties[]? FoundNetworks; - DOMString? HardwareRevision; - CellularProviderProperties? HomeProvider; - DOMString? ICCID; - DOMString? IMEI; - APNProperties? LastGoodAPN; - DOMString? Manufacturer; - DOMString? MDN; - DOMString? MEID; - DOMString? MIN; - DOMString? ModelID; - DOMString? NetworkTechnology; - PaymentPortal? PaymentPortal; - DOMString? RoamingState; - boolean? Scanning; - CellularProviderProperties? ServingOperator; - SIMLockStatus? SIMLockStatus; - boolean? SIMPresent; - long? SignalStrength; - boolean? SupportNetworkScan; - }; - - dictionary CellularStateProperties { - ActivationStateType? ActivationState; - DOMString? EID; - DOMString? ICCID; - DOMString? NetworkTechnology; - DOMString? RoamingState; - boolean? Scanning; - boolean? SIMPresent; - long? SignalStrength; - }; - - dictionary EAPStateProperties { - DOMString? Outer; - }; - - dictionary EthernetProperties { - boolean? AutoConnect; - DOMString? Authentication; - EAPProperties? EAP; - }; - - dictionary ManagedEthernetProperties { - ManagedBoolean? AutoConnect; - ManagedDOMString? Authentication; - ManagedEAPProperties? EAP; - }; - - dictionary EthernetStateProperties { - DOMString Authentication; - }; - - dictionary TetherProperties { - long? BatteryPercentage; - DOMString? Carrier; - boolean HasConnectedToHost; - long? SignalStrength; - }; - - dictionary VPNProperties { - boolean? AutoConnect; - DOMString? Host; - IPSecProperties? IPsec; - L2TPProperties? L2TP; - OpenVPNProperties? OpenVPN; - ThirdPartyVPNProperties? ThirdPartyVPN; - // The VPN type. This cannot be an enum because of 'L2TP-IPSec'. - // This is optional for NetworkConfigProperties which is passed to - // setProperties which may be used to set only specific properties. - DOMString? Type; - }; - - dictionary ManagedVPNProperties { - ManagedBoolean? AutoConnect; - ManagedDOMString? Host; - ManagedIPSecProperties? IPsec; - ManagedL2TPProperties? L2TP; - ManagedOpenVPNProperties? OpenVPN; - ManagedThirdPartyVPNProperties? ThirdPartyVPN; - ManagedDOMString? Type; - }; - - dictionary VPNStateProperties { - DOMString Type; - IPSecProperties? IPsec; - ThirdPartyVPNProperties? ThirdPartyVPN; - }; - - dictionary WiFiProperties { - boolean? AllowGatewayARPPolling; - boolean? AutoConnect; - DOMString? BSSID; - EAPProperties? EAP; - long? Frequency; - long[]? FrequencyList; - DOMString? HexSSID; - boolean? HiddenSSID; - DOMString? Passphrase; - DOMString? SSID; - DOMString? Security; - long? SignalStrength; - }; - - dictionary ManagedWiFiProperties { - ManagedBoolean? AllowGatewayARPPolling; - ManagedBoolean? AutoConnect; - DOMString? BSSID; - ManagedEAPProperties? EAP; - long? Frequency; - long[]? FrequencyList; - ManagedDOMString? HexSSID; - ManagedBoolean? HiddenSSID; - ManagedDOMString? Passphrase; - ManagedDOMString? SSID; - ManagedDOMString Security; - long? SignalStrength; - }; - - dictionary WiFiStateProperties { - DOMString? BSSID; - EAPStateProperties? EAP; - long? Frequency; - DOMString? HexSSID; - DOMString Security; - long? SignalStrength; - DOMString? SSID; - }; - - dictionary NetworkConfigProperties { - CellularProperties? Cellular; - EthernetProperties? Ethernet; - DOMString? GUID; - IPConfigType? IPAddressConfigType; - DOMString? Name; - IPConfigType? NameServersConfigType; - long? Priority; - ProxySettings? ProxySettings; - IPConfigProperties? StaticIPConfig; - NetworkType? Type; - VPNProperties? VPN; - WiFiProperties? WiFi; - }; - - dictionary NetworkProperties { - CellularProperties? Cellular; - boolean? Connectable; - ConnectionStateType? ConnectionState; - DOMString? ErrorState; - EthernetProperties? Ethernet; - DOMString GUID; - IPConfigType? IPAddressConfigType; - IPConfigProperties[]? IPConfigs; - DOMString? MacAddress; - boolean? Metered; - DOMString? Name; - IPConfigType? NameServersConfigType; - long? Priority; - ProxySettings? ProxySettings; - boolean? RestrictedConnectivity; - IPConfigProperties? StaticIPConfig; - IPConfigProperties? SavedIPConfig; - // Indicates whether and how the network is configured. - // 'Source' can be Device, DevicePolicy, User, UserPolicy or None. - // 'None' conflicts with extension code generation so we must use a string - // for 'Source' instead of a SourceType enum. - DOMString? Source; - TetherProperties? Tether; - double? TrafficCounterResetTime; - NetworkType Type; - VPNProperties? VPN; - WiFiProperties? WiFi; - }; - - dictionary ManagedProperties { - ManagedCellularProperties? Cellular; - boolean? Connectable; - ConnectionStateType? ConnectionState; - DOMString? ErrorState; - ManagedEthernetProperties? Ethernet; - DOMString GUID; - ManagedIPConfigType? IPAddressConfigType; - IPConfigProperties[]? IPConfigs; - DOMString? MacAddress; - ManagedBoolean? Metered; - ManagedDOMString? Name; - ManagedIPConfigType? NameServersConfigType; - ManagedLong? Priority; - ManagedProxySettings? ProxySettings; - boolean? RestrictedConnectivity; - ManagedIPConfigProperties? StaticIPConfig; - IPConfigProperties? SavedIPConfig; - // See $(ref:NetworkProperties.Source). - DOMString? Source; - TetherProperties? Tether; - double? TrafficCounterResetTime; - NetworkType Type; - ManagedVPNProperties? VPN; - ManagedWiFiProperties? WiFi; - }; - - dictionary NetworkStateProperties { - CellularStateProperties? Cellular; - boolean? Connectable; - ConnectionStateType? ConnectionState; - EthernetStateProperties? Ethernet; - DOMString? ErrorState; - DOMString GUID; - DOMString? Name; - long? Priority; - // See $(ref:NetworkProperties.Source). - DOMString? Source; - TetherProperties? Tether; - NetworkType Type; - VPNStateProperties? VPN; - WiFiStateProperties? WiFi; - }; - - dictionary DeviceStateProperties { - // Set if the device is enabled. True if the device is currently scanning. - boolean? Scanning; - - // The SIM lock status if Type = Cellular and SIMPresent = True. - SIMLockStatus? SIMLockStatus; - - // Set to the SIM present state if the device type is Cellular. - boolean? SIMPresent; - - // The current state of the device. - DeviceStateType State; - - // The network type associated with the device (Cellular, Ethernet or WiFi). - NetworkType Type; - - // Whether or not any managed networks are available/visible. - boolean? ManagedNetworkAvailable; - }; - - dictionary NetworkFilter { - // The type of networks to return. - NetworkType networkType; - - // If true, only include visible (physically connected or in-range) - // networks. Defaults to 'false'. - boolean? visible; - - // If true, only include configured (saved) networks. Defaults to 'false'. - boolean? configured; - - // Maximum number of networks to return. Defaults to 1000 if unspecified. - // Use 0 for no limit. - long? limit; - }; - - dictionary GlobalPolicy { - // If true, only policy networks may auto connect. Defaults to false. - boolean? AllowOnlyPolicyNetworksToAutoconnect; - - // If true, only policy networks may be connected to and no new networks may - // be added or configured. Defaults to false. - boolean? AllowOnlyPolicyNetworksToConnect; - - // If true and a managed network is available in the visible network list, - // only policy networks may be connected to and no new networks may be added - // or configured. Defaults to false. - boolean? AllowOnlyPolicyNetworksToConnectIfAvailable; - - // List of blocked networks. Connections to blocked networks are - // prohibited. Networks can be allowed again by specifying an explicit - // network configuration. Defaults to an empty list. - DOMString[]? BlockedHexSSIDs; - }; - - dictionary Certificate { - // Unique hash for the certificate. - DOMString hash; - - // Certificate issuer common name. - DOMString issuedBy; - - // Certificate name or nickname. - DOMString issuedTo; - - // PEM for server CA certificates. - DOMString? pem; - - // PKCS#11 id for user certificates. - DOMString? PKCS11Id; - - // Whether or not the certificate is hardware backed. - boolean hardwareBacked; - - // Whether or not the certificate is device wide. - boolean deviceWide; - }; - - dictionary CertificateLists { - // List of avaliable server CA certificates. - Certificate[] serverCaCertificates; - - // List of available user certificates. - Certificate[] userCertificates; - }; - - callback VoidCallback = void(); - callback BooleanCallback = void(boolean result); - callback StringCallback = void(DOMString result); - // TODO(stevenjb): Use NetworkProperties for |result| once defined. - callback GetPropertiesCallback = void(NetworkProperties result); - // TODO(stevenjb): Use ManagedNetworkProperties for |result| once defined. - callback GetManagedPropertiesCallback = void(ManagedProperties result); - callback GetStatePropertiesCallback = void(NetworkStateProperties result); - callback GetNetworksCallback = void(NetworkStateProperties[] result); - callback GetDeviceStatesCallback = void(DeviceStateProperties[] result); - callback GetEnabledNetworkTypesCallback = void(NetworkType[] result); - callback CaptivePortalStatusCallback = void(CaptivePortalStatus result); - callback GetGlobalPolicyCallback = void(GlobalPolicy result); - callback GetCertificateListsCallback = void(CertificateLists result); - - // These functions all report failures either via $(ref:runtime.lastError) - // when using callbacks or passed to the rejection handler when using - // promises. - interface Functions { - // Gets all the properties of the network with id networkGuid. Includes all - // properties of the network (read-only and read/write values). - // |networkGuid|: The GUID of the network to get properties for. - // |callback|: Called with the network properties when received. - static void getProperties( - DOMString networkGuid, - GetPropertiesCallback callback); - - // Gets the merged properties of the network with id networkGuid from the - // sources: User settings, shared settings, user policy, device policy and - // the currently active settings. - // |networkGuid|: The GUID of the network to get properties for. - // |callback|: Called with the managed network properties when received. - static void getManagedProperties( - DOMString networkGuid, - GetManagedPropertiesCallback callback); - - // Gets the cached read-only properties of the network with id networkGuid. - // This is meant to be a higher performance function than - // $(ref:getProperties), which requires a round trip to query the networking - // subsystem. The following properties are returned for all networks: GUID, - // Type, Name, WiFi.Security. Additional properties are provided for visible - // networks: ConnectionState, ErrorState, WiFi.SignalStrength, - // Cellular.NetworkTechnology, Cellular.ActivationState, - // Cellular.RoamingState. - // |networkGuid|: The GUID of the network to get properties for. - // |callback|: Called immediately with the network state properties. - static void getState( - DOMString networkGuid, - GetStatePropertiesCallback callback); - - // Sets the properties of the network with id |networkGuid|. This is only - // valid for configured networks (Source != None). Unconfigured visible - // networks should use createNetwork instead. - // |networkGuid|: The GUID of the network to set properties for. - // |properties|: The properties to set. - // |callback|: Called when the operation has completed. - static void setProperties( - DOMString networkGuid, - NetworkConfigProperties properties, - optional VoidCallback callback); - - // Creates a new network configuration from properties. If a matching - // configured network already exists, this will fail. Otherwise returns the - // guid of the new network. - // |shared|: If true, share this network configuration with other users. - // |properties|: The properties to configure the new network with. - // |callback|: Called with the GUID for the new network configuration once - // the network has been created. - static void createNetwork( - boolean shared, - NetworkConfigProperties properties, - optional StringCallback callback); - - // Forgets a network configuration by clearing any configured properties for - // the network with GUID 'networkGuid'. This may also include any other - // networks with matching identifiers (e.g. WiFi SSID and Security). If no - // such configuration exists, an error will be set and the operation will - // fail. - // |networkGuid|: The GUID of the network to forget. - // |callback|: Called when the operation has completed. - static void forgetNetwork( - DOMString networkGuid, - optional VoidCallback callback); - - // Returns a list of network objects with the same properties provided by - // $(ref:networkingPrivate.getState). A filter is provided to specify the - // type of networks returned and to limit the number of networks. Networks - // are ordered by the system based on their priority, with connected or - // connecting networks listed first. - // |filter|: Describes which networks to return. - // |callback|: Called with a dictionary of networks and their state - // properties when received. - static void getNetworks( - NetworkFilter filter, - GetNetworksCallback callback); - - // Deprecated. Please use $(ref:networkingPrivate.getNetworks) with - // filter.visible = true instead. - [deprecated="Use getNetworks."] static void getVisibleNetworks( - NetworkType networkType, - GetNetworksCallback callback); - - // Deprecated. Please use $(ref:networkingPrivate.getDeviceStates) instead. - [deprecated="Use getDeviceStates."] static void getEnabledNetworkTypes( - GetEnabledNetworkTypesCallback callback); - - // Returns a list of $(ref:networkingPrivate.DeviceStateProperties) objects. - // |callback|: Called with a list of devices and their state. - static void getDeviceStates( - GetDeviceStatesCallback callback); - - // Enables any devices matching the specified network type. Note, the type - // might represent multiple network types (e.g. 'Wireless'). - // |networkType|: The type of network to enable. - static void enableNetworkType(NetworkType networkType); - - // Disables any devices matching the specified network type. See note for - // $(ref:networkingPrivate.enableNetworkType). - // |networkType|: The type of network to disable. - static void disableNetworkType(NetworkType networkType); - - // Requests that the networking subsystem scan for new networks and - // update the list returned by $(ref:getVisibleNetworks). This is only a - // request: the network subsystem can choose to ignore it. If the list - // is updated, then the $(ref:onNetworkListChanged) event will be fired. - // |networkType|: If provided, requests a scan specific to the type. - // For Cellular a mobile network scan will be requested if supported. - static void requestNetworkScan(optional NetworkType networkType); - - // Starts a connection to the network with networkGuid. - // |networkGuid|: The GUID of the network to connect to. - // |callback|: Called when the connect request has been sent. Note: the - // connection may not have completed. Observe $(ref:onNetworksChanged) - // to be notified when a network state changes. If the connect request - // immediately failed (e.g. the network is unconfigured), - // $(ref:runtime.lastError) will be set with a failure reason. - static void startConnect( - DOMString networkGuid, - optional VoidCallback callback); - - // Starts a disconnect from the network with networkGuid. - // |networkGuid|: The GUID of the network to disconnect from. - // |callback|: Called when the disconnect request has been sent. See note - // for $(ref:startConnect). - static void startDisconnect( - DOMString networkGuid, - optional VoidCallback callback); - - // Starts activation of the Cellular network with networkGuid. If called - // for a network that is already activated, or for a network with a carrier - // that can not be directly activated, this will show the account details - // page for the carrier if possible. - // |networkGuid|: The GUID of the Cellular network to activate. - // |carrier|: Optional name of carrier to activate. - // |callback|: Called when the activation request has been sent. See note - // for $(ref:startConnect). - static void startActivate( - DOMString networkGuid, - optional DOMString carrier, - optional VoidCallback callback); - - // Returns captive portal status for the network matching 'networkGuid'. - // |networkGuid|: The GUID of the network to get captive portal status for. - // |callback|: A callback function that returns the results of the query for - // network captive portal status. - static void getCaptivePortalStatus( - DOMString networkGuid, - CaptivePortalStatusCallback callback); - - // Unlocks a Cellular SIM card. - // * If the SIM is PIN locked, |pin| will be used to unlock the SIM and - // the |puk| argument will be ignored if provided. - // * If the SIM is PUK locked, |puk| and |pin| must be provided. If the - // operation succeeds (|puk| is valid), the PIN will be set to |pin|. - // (If |pin| is empty or invalid the operation will fail). - // |networkGuid|: The GUID of the cellular network to unlock. - // If empty, the default cellular device will be used. - // |pin|: The current SIM PIN, or the new PIN if PUK is provided. - // |puk|: The operator provided PUK for unblocking a blocked SIM. - // |callback|: Called when the operation has completed. - static void unlockCellularSim( - DOMString networkGuid, - DOMString pin, - optional DOMString puk, - optional VoidCallback callback); - - // Sets whether or not SIM locking is enabled (i.e a PIN will be required - // when the device is powered) and changes the PIN if a new PIN is - // specified. If the new PIN is provided but not valid (e.g. too short) - // the operation will fail. This will not lock the SIM; that is handled - // automatically by the device. NOTE: If the SIM is locked, it must first be - // unlocked with unlockCellularSim() before this can be called (otherwise it - // will fail and $(ref:runtime.lastError) will be set to Error.SimLocked). - // |networkGuid|: The GUID of the cellular network to set the SIM state of. - // If empty, the default cellular device will be used. - // |simState|: The SIM state to set. - // |callback|: Called when the operation has completed. - static void setCellularSimState( - DOMString networkGuid, - CellularSimState simState, - optional VoidCallback callback); - - // Selects which Cellular Mobile Network to use. |networkId| must be the - // NetworkId property of a member of Cellular.FoundNetworks from the - // network properties for the specified Cellular network. - // |networkGuid|: The GUID of the cellular network to select the network - // for. If empty, the default cellular device will be used. - // |networkId|: The networkId to select. - // |callback|: Called when the operation has completed. - static void selectCellularMobileNetwork( - DOMString networkGuid, - DOMString networkId, - optional VoidCallback callback); - - // Gets the global policy properties. These properties are not expected to - // change during a session. - static void getGlobalPolicy( - GetGlobalPolicyCallback callback); - - // Gets the lists of certificates available for network configuration. - static void getCertificateLists( - GetCertificateListsCallback callback); - }; - - interface Events { - // Fired when the properties change on any of the networks. Sends a list of - // GUIDs for networks whose properties have changed. - static void onNetworksChanged(DOMString[] changes); - - // Fired when the list of networks has changed. Sends a complete list of - // GUIDs for all the current networks. - static void onNetworkListChanged(DOMString[] changes); - - // Fired when the list of devices has changed or any device state properties - // have changed. - static void onDeviceStateListChanged(); - - // Fired when a portal detection for a network completes. Sends the guid of - // the network and the corresponding captive portal status. - static void onPortalDetectionCompleted(DOMString networkGuid, - CaptivePortalStatus status); - - // Fired when any certificate list has changed. - static void onCertificateListsChanged(); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/offscreen.idl b/tools/under-control/src/extensions/common/api/offscreen.idl deleted file mode 100755 index 9b3ef62c..00000000 --- a/tools/under-control/src/extensions/common/api/offscreen.idl +++ /dev/null @@ -1,89 +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. - -// Use the offscreen API to create and manage offscreen documents. -namespace offscreen { - enum Reason { - // A reason used for testing purposes only. - TESTING, - // Specifies that the offscreen document is responsible for playing audio. - AUDIO_PLAYBACK, - // Specifies that the offscreen document needs to embed and script an - // iframe in order to modify the iframe's content. - IFRAME_SCRIPTING, - // Specifies that the offscreen document needs to embed an iframe and - // scrape its DOM to extract information. - DOM_SCRAPING, - // Specifies that the offscreen document needs to interact with Blob - // objects (including URL.createObjectURL()). - BLOBS, - // Specifies that the offscreen document needs to use the - // DOMParser API. - DOM_PARSER, - // Specifies that the offscreen document needs to interact with - // media streams from user media (e.g. getUserMedia()). - USER_MEDIA, - // Specifies that the offscreen document needs to interact with - // media streams from display media (e.g. getDisplayMedia()). - DISPLAY_MEDIA, - // Specifies that the offscreen document needs to use - // WebRTC APIs. - WEB_RTC, - // Specifies that the offscreen document needs to interact with the - // Clipboard API. - CLIPBOARD, - // Specifies that the offscreen document needs access to - // localStorage. - LOCAL_STORAGE, - // Specifies that the offscreen document needs to spawn workers. - WORKERS, - // Specifies that the offscreen document needs to use - // navigator.getBattery. - BATTERY_STATUS, - // Specifies that the offscreen document needs to use - // window.matchMedia. - MATCH_MEDIA, - // Specifies that the offscreen document needs to use - // navigator.geolocation. - GEOLOCATION - }; - - dictionary CreateParameters { - // The reason(s) the extension is creating the offscreen document. - Reason[] reasons; - // The (relative) URL to load in the document. - DOMString url; - // A developer-provided string that explains, in more detail, the need for - // the background context. The user agent _may_ use this in display to the - // user. - DOMString justification; - }; - - callback VoidCallback = void(); - callback BooleanCallback = void(boolean result); - - interface Functions { - // Creates a new offscreen document for the extension. - // |parameters|: The parameters describing the offscreen document to create. - // |callback|: Promise that resolves when the offscreen document is created - // and has completed its initial page load. - static void createDocument( - CreateParameters parameters, - VoidCallback callback); - - // Closes the currently-open offscreen document for the extension. - // |callback|: Promise that resolves when the offscreen document has been - // closed. - static void closeDocument(VoidCallback callback); - - // Determines whether the extension has an active document. - // TODO(crbug.com/40849649): This probably isn't something we want to - // ship in its current form (hence the nodoc). Instead of this, we should - // integrate offscreen documents into a service worker-compatible getViews() - // alternative. But this is pretty useful in testing environments. - // |callback|: Promise that resolves with the result of whether the - // extension has an active offscreen document. - [nodoc] static void hasDocument(BooleanCallback callback); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/power.idl b/tools/under-control/src/extensions/common/api/power.idl deleted file mode 100755 index ec8cf367..00000000 --- a/tools/under-control/src/extensions/common/api/power.idl +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Use the chrome.power API to override the system's power -// management features. -namespace power { - callback VoidCallback = void (); - - enum Level { - // Prevents the system from sleeping in response to user inactivity. - system, - - // Prevents the display from being turned off or dimmed, or the system - // from sleeping in response to user inactivity. - display - }; - - interface Functions { - // Requests that power management be temporarily disabled. |level| - // describes the degree to which power management should be disabled. - // If a request previously made by the same app is still active, it - // will be replaced by the new request. - static void requestKeepAwake(Level level); - - // Releases a request previously made via requestKeepAwake(). - static void releaseKeepAwake(); - - // Reports a user activity in order to awake the screen from a dimmed or - // turned off state or from a screensaver. Exits the screensaver if it is - // currently active. - [platforms=("chromeos")] static void reportActivity( - optional VoidCallback callback); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/serial.idl b/tools/under-control/src/extensions/common/api/serial.idl deleted file mode 100755 index 9236f342..00000000 --- a/tools/under-control/src/extensions/common/api/serial.idl +++ /dev/null @@ -1,371 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Use the chrome.serial API to read from and write to a device -// connected to a serial port. -namespace serial { - - dictionary DeviceInfo { - // The device's system path. This should be passed as the path - // argument to chrome.serial.connect in order to connect to - // this device. - DOMString path; - - // A PCI or USB vendor ID if one can be determined for the underlying - // device. - long? vendorId; - - // A USB product ID if one can be determined for the underlying device. - long? productId; - - // A human-readable display name for the underlying device if one can be - // queried from the host driver. - DOMString? displayName; - }; - - callback GetDevicesCallback = void (DeviceInfo[] ports); - - enum DataBits { seven, eight }; - enum ParityBit { no, odd, even }; - enum StopBits { one, two }; - - dictionary ConnectionOptions { - // Flag indicating whether or not the connection should be left open when - // the application is suspended (see - // Manage App - // Lifecycle). The default value is "false." When the application is - // loaded, any serial connections previously opened with persistent=true - // can be fetched with getConnections. - boolean? persistent; - - // An application-defined string to associate with the connection. - DOMString? name; - - // The size of the buffer used to receive data. The default value is 4096. - long? bufferSize; - - // The requested bitrate of the connection to be opened. For compatibility - // with the widest range of hardware, this number should match one of - // commonly-available bitrates, such as 110, 300, 1200, 2400, 4800, 9600, - // 14400, 19200, 38400, 57600, 115200. There is no guarantee, of course, - // that the device connected to the serial port will support the requested - // bitrate, even if the port itself supports that bitrate. 9600 - // will be passed by default. - long? bitrate; - - // "eight" will be passed by default. - DataBits? dataBits; - - // "no" will be passed by default. - ParityBit? parityBit; - - // "one" will be passed by default. - StopBits? stopBits; - - // Flag indicating whether or not to enable RTS/CTS hardware flow control. - // Defaults to false. - boolean? ctsFlowControl; - - // The maximum amount of time (in milliseconds) to wait for new data before - // raising an onReceiveError event with a "timeout" error. - // If zero, receive timeout errors will not be raised for the connection. - // Defaults to 0. - long? receiveTimeout; - - // The maximum amount of time (in milliseconds) to wait for a - // send operation to complete before calling the callback with - // a "timeout" error. If zero, send timeout errors will not be triggered. - // Defaults to 0. - long? sendTimeout; - }; - - // Result of the getInfo method. - dictionary ConnectionInfo { - // The id of the serial port connection. - long connectionId; - - // Flag indicating whether the connection is blocked from firing onReceive - // events. - boolean paused; - - // See ConnectionOptions.persistent - boolean persistent; - - // See ConnectionOptions.name - DOMString name; - - // See ConnectionOptions.bufferSize - long bufferSize; - - // See ConnectionOptions.receiveTimeout - long receiveTimeout; - - // See ConnectionOptions.sendTimeout - long sendTimeout; - - // See ConnectionOptions.bitrate. This field may be omitted - // or inaccurate if a non-standard bitrate is in use, or if an error - // occurred while querying the underlying device. - long? bitrate; - - // See ConnectionOptions.dataBits. This field may be omitted - // if an error occurred while querying the underlying device. - DataBits? dataBits; - - // See ConnectionOptions.parityBit. This field may be omitted - // if an error occurred while querying the underlying device. - ParityBit? parityBit; - - // See ConnectionOptions.stopBits. This field may be omitted - // if an error occurred while querying the underlying device. - StopBits? stopBits; - - // See ConnectionOptions.ctsFlowControl. This field may be - // omitted if an error occurred while querying the underlying device. - boolean? ctsFlowControl; - }; - - // Callback from the connect method; - callback ConnectCallback = void (ConnectionInfo connectionInfo); - - // Callback from the update method. - callback UpdateCallback = void (boolean result); - - // Callback from the disconnect method. Returns true if the - // operation was successful. - callback DisconnectCallback = void (boolean result); - - // Callback from the setPaused method. - callback SetPausedCallback = void (); - - // Callback from the getInfo method. - callback GetInfoCallback = void (ConnectionInfo connectionInfo); - - // Callback from the getConnections method. - callback GetConnectionsCallback = void (ConnectionInfo[] connectionInfos); - - enum SendError { - // The connection was disconnected. - disconnected, - - // A send was already pending. - pending, - - // The send timed out. - timeout, - - // A system error occurred and the connection may be unrecoverable. - system_error - }; - - dictionary SendInfo { - // The number of bytes sent. - long bytesSent; - - // An error code if an error occurred. - SendError? error; - }; - - callback SendCallback = void (SendInfo sendInfo); - - callback FlushCallback = void (boolean result); - - callback SetBreakCallback = void (boolean result); - - callback ClearBreakCallback = void (boolean result); - - // The set of control signals which may be sent to a connected serial device - // using setControlSignals. Note that support for these signals - // is device-dependent. - dictionary HostControlSignals { - // DTR (Data Terminal Ready). - boolean? dtr; - - // RTS (Request To Send). - boolean? rts; - }; - - // The set of control signals which may be set by a connected serial device. - // These can be queried using getControlSignals. Note that - // support for these signals is device-dependent. - dictionary DeviceControlSignals { - // DCD (Data Carrier Detect) or RLSD (Receive Line Signal/ Detect). - boolean dcd; - - // CTS (Clear To Send). - boolean cts; - - // RI (Ring Indicator). - boolean ri; - - // DSR (Data Set Ready). - boolean dsr; - }; - - // Returns a snapshot of current control signals. - callback GetControlSignalsCallback = void (DeviceControlSignals signals); - - // Returns true if operation was successful. - callback SetControlSignalsCallback = void (boolean result); - - // Data from an onReceive event. - dictionary ReceiveInfo { - // The connection identifier. - long connectionId; - - // The data received. - ArrayBuffer data; - }; - - enum ReceiveError { - // The connection was disconnected. - disconnected, - - // No data has been received for receiveTimeout milliseconds. - timeout, - - // The device was most likely disconnected from the host. - device_lost, - - // The device detected a break condition. - break, - - // The device detected a framing error. - frame_error, - - // A character-buffer overrun has occurred. The next character is lost. - overrun, - - // An input buffer overflow has occurred. There is either no room in the - // input buffer, or a character was received after the end-of-file (EOF) - // character. - buffer_overflow, - - // The device detected a parity error. - parity_error, - - // A system error occurred and the connection may be unrecoverable. - system_error - }; - - // Data from an onReceiveError event. - dictionary ReceiveErrorInfo { - // The connection identifier. - long connectionId; - - // An error code indicating what went wrong. - ReceiveError error; - }; - - interface Functions { - // Returns information about available serial devices on the system. - // The list is regenerated each time this method is called. - // |callback| : Called with the list of DeviceInfo objects. - static void getDevices(GetDevicesCallback callback); - - // Connects to a given serial port. - // |path| : The system path of the serial port to open. - // |options| : Port configuration options. - // |callback| : Called when the connection has been opened. - static void connect( - DOMString path, - optional ConnectionOptions options, - ConnectCallback callback); - - // Update the option settings on an open serial port connection. - // |connectionId| : The id of the opened connection. - // |options| : Port configuration options. - // |callback| : Called when the configuation has completed. - static void update( - long connectionId, - ConnectionOptions options, - UpdateCallback callback); - - // Disconnects from a serial port. - // |connectionId| : The id of the opened connection. - // |callback| : Called when the connection has been closed. - static void disconnect( - long connectionId, - DisconnectCallback callback); - - // Pauses or unpauses an open connection. - // |connectionId| : The id of the opened connection. - // |paused| : Flag to indicate whether to pause or unpause. - // |callback| : Called when the connection has been successfully paused or - // unpaused. - static void setPaused( - long connectionId, - boolean paused, - SetPausedCallback callback); - - // Retrieves the state of a given connection. - // |connectionId| : The id of the opened connection. - // |callback| : Called with connection state information when available. - static void getInfo( - long connectionId, - GetInfoCallback callback); - - // Retrieves the list of currently opened serial port connections owned by - // the application. - // |callback| : Called with the list of connections when available. - static void getConnections( - GetConnectionsCallback callback); - - // Writes data to the given connection. - // |connectionId| : The id of the connection. - // |data| : The data to send. - // |callback| : Called when the operation has completed. - static void send( - long connectionId, - ArrayBuffer data, - SendCallback callback); - - // Flushes all bytes in the given connection's input and output buffers. - static void flush( - long connectionId, - FlushCallback callback); - - // Retrieves the state of control signals on a given connection. - // |connectionId| : The id of the connection. - // |callback| : Called when the control signals are available. - static void getControlSignals( - long connectionId, - GetControlSignalsCallback callback); - - // Sets the state of control signals on a given connection. - // |connectionId| : The id of the connection. - // |signals| : The set of signal changes to send to the device. - // |callback| : Called once the control signals have been set. - static void setControlSignals( - long connectionId, - HostControlSignals signals, - SetControlSignalsCallback callback); - - // Suspends character transmission on a given connection and places the - // transmission line in a break state until the clearBreak is called. - // |connectionId| : The id of the connection. - static void setBreak( - long connectionId, - SetBreakCallback callback); - - // Restore character transmission on a given connection and place the - // transmission line in a nonbreak state. - // |connectionId| : The id of the connection. - static void clearBreak( - long connectionId, - ClearBreakCallback callback); - }; - - interface Events { - // Event raised when data has been read from the connection. - // |info| : Event data. - static void onReceive(ReceiveInfo info); - - // Event raised when an error occurred while the runtime was waiting for - // data on the serial port. Once this event is raised, the connection may be - // set to paused. A "timeout" error does not pause - // the connection. - static void onReceiveError(ReceiveErrorInfo info); - }; -}; diff --git a/tools/under-control/src/gin/v8_initializer.cc b/tools/under-control/src/gin/v8_initializer.cc index 83317535..c9263027 100755 --- a/tools/under-control/src/gin/v8_initializer.cc +++ b/tools/under-control/src/gin/v8_initializer.cc @@ -169,7 +169,8 @@ base::File OpenV8File(const char* file_name, const int kMaxOpenAttempts = 5; const int kOpenRetryDelayMillis = 250; - int flags = base::File::FLAG_OPEN | base::File::FLAG_READ; + int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | + base::File::FLAG_WIN_SHARE_DELETE; base::File file; for (int attempt = 0; attempt < kMaxOpenAttempts; attempt++) { file.Initialize(path, flags); @@ -362,12 +363,6 @@ void SetFeatureFlags() { SetV8FlagsIfOverridden(features::kV8OffThreadFinalization, "--finalize-streaming-on-background", "--no-finalize-streaming-on-background"); - if (base::FeatureList::IsEnabled(features::kV8DelayMemoryReducer)) { - SetV8FlagsFormatted( - "--gc-memory-reducer-start-delay-ms=%i", - static_cast( - features::kV8MemoryReducerStartDelay.Get().InMilliseconds())); - } SetV8FlagsIfOverridden(features::kV8ConcurrentMarkingHighPriorityThreads, "--concurrent-marking-high-priority-threads", "--no-concurrent-marking-high-priority-threads"); @@ -419,7 +414,6 @@ void SetFeatureFlags() { SetV8FlagsIfOverridden(features::kV8MemoryPoolReleaseOnMallocFailures, "--memory-pool-release-on-malloc-failures", "--no-memory-pool-release-on-malloc-failures"); - SetV8FlagsIfOverridden(features::kV8MinorMS, "--minor-ms", "--no-minor-ms"); if (base::FeatureList::IsEnabled(features::kV8ScavengerHigherCapacity)) { SetV8FlagsFormatted("--scavenger-max-new-space-capacity-mb=%i", features::kV8ScavengerMaxCapacity.Get()); diff --git a/tools/under-control/src/media/base/video_codecs.h b/tools/under-control/src/media/base/video_codecs.h index 058fc54d..6cb32b0e 100755 --- a/tools/under-control/src/media/base/video_codecs.h +++ b/tools/under-control/src/media/base/video_codecs.h @@ -106,24 +106,7 @@ enum VideoCodecProfile { HEVCPROFILE_SCALABLE_REXT = 35, HEVCPROFILE_HIGH_THROUGHPUT_SCREEN_EXTENDED = 36, HEVCPROFILE_EXT_MAX = HEVCPROFILE_HIGH_THROUGHPUT_SCREEN_EXTENDED, - VVCPROFILE_MIN = 37, - VVCPROFILE_MAIN10 = VVCPROFILE_MIN, - VVCPROFILE_MAIN12 = 38, - VVCPROFILE_MAIN12_INTRA = 39, - VVCPROIFLE_MULTILAYER_MAIN10 = 40, - VVCPROFILE_MAIN10_444 = 41, - VVCPROFILE_MAIN12_444 = 42, - VVCPROFILE_MAIN16_444 = 43, - VVCPROFILE_MAIN12_444_INTRA = 44, - VVCPROFILE_MAIN16_444_INTRA = 45, - VVCPROFILE_MULTILAYER_MAIN10_444 = 46, - VVCPROFILE_MAIN10_STILL_PICTURE = 47, - VVCPROFILE_MAIN12_STILL_PICTURE = 48, - VVCPROFILE_MAIN10_444_STILL_PICTURE = 49, - VVCPROFILE_MAIN12_444_STILL_PICTURE = 50, - VVCPROFILE_MAIN16_444_STILL_PICTURE = 51, - VVCPROFILE_MAX = VVCPROFILE_MAIN16_444_STILL_PICTURE, - VIDEO_CODEC_PROFILE_MAX = VVCPROFILE_MAIN16_444_STILL_PICTURE, + VIDEO_CODEC_PROFILE_MAX = HEVCPROFILE_HIGH_THROUGHPUT_SCREEN_EXTENDED, }; // clang-format off // LINT.ThenChange(//gpu/config/gpu_info.h:VideoCodecProfile, //tools/metrics/histograms/enums.xml:VideoCodecProfile) diff --git a/tools/under-control/src/services/network/network_context.cc b/tools/under-control/src/services/network/network_context.cc index 32a30604..7e784eca 100755 --- a/tools/under-control/src/services/network/network_context.cc +++ b/tools/under-control/src/services/network/network_context.cc @@ -47,6 +47,7 @@ #include "build/chromecast_buildflags.h" #include "components/cookie_config/cookie_store_util.h" #include "components/domain_reliability/monitor.h" +#include "components/enterprise/buildflags/buildflags.h" #include "components/network_session_configurator/browser/network_session_configurator.h" #include "components/network_session_configurator/common/network_switches.h" #include "components/os_crypt/async/common/encryptor.h" @@ -124,6 +125,7 @@ #include "services/network/network_service_network_delegate.h" #include "services/network/network_service_proxy_delegate.h" #include "services/network/oblivious_http_request_handler.h" +#include "services/network/pervasive_resources/shared_resource_checker.h" #include "services/network/prefetch_cache.h" #include "services/network/prefetch_matching_url_loader_factory.h" #include "services/network/prefetch_url_loader_client.h" @@ -151,7 +153,6 @@ #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" @@ -319,6 +320,9 @@ void CookieOSCryptAsyncDelegate::InitCallback( mojo::Remote lifetime, os_crypt_async::Encryptor encryptor) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // The Encryptor is moved between sequences here. Verify that it's only moved + // once. + CHECK(!instance_.has_value()); instance_.emplace(std::move(encryptor)); is_initialized_ = true; callbacks_.Notify(); @@ -561,7 +565,7 @@ bool GetFullDataFilePath( // processes. mojom::URLLoaderFactoryParamsPtr CreateURLLoaderFactoryParamsForPrefetch() { auto params = mojom::URLLoaderFactoryParams::New(); - params->process_id = mojom::kBrowserProcessId; + params->process_id = OriginatingProcess::browser(); // We want to be able to use TrustedParams to set the IsolationInfo for each // prefetch separately, so make it trusted. // TODO(crbug.com/342445996): Maybe stop using TrustedParams and lock this @@ -995,7 +999,7 @@ void NetworkContext::CreateURLLoaderFactoryForCertNetFetcher( // TODO(crbug.com/40695068): investigate changing these params. auto url_loader_factory_params = mojom::URLLoaderFactoryParams::New(); url_loader_factory_params->is_trusted = true; - url_loader_factory_params->process_id = mojom::kBrowserProcessId; + url_loader_factory_params->process_id = OriginatingProcess::browser(); url_loader_factory_params->automatically_assign_isolation_info = true; url_loader_factory_params->is_orb_enabled = false; if (url_request_context()->bound_network() != @@ -1031,7 +1035,7 @@ void NetworkContext::CreateURLLoaderFactory( scoped_refptr resource_scheduler_client = base::MakeRefCounted( ResourceScheduler::ClientId::Create(), - IsBrowserInitiated(params->process_id == mojom::kBrowserProcessId), + IsBrowserInitiated(params->process_id.is_browser()), resource_scheduler_.get(), url_request_context_->network_quality_estimator()); CreateURLLoaderFactory(std::move(receiver), std::move(params), @@ -1257,11 +1261,11 @@ void NetworkContext::Remove(WebTransport* transport) { } } -void NetworkContext::LoaderCreated(uint32_t process_id) { +void NetworkContext::LoaderCreated(const OriginatingProcess& process_id) { loader_count_per_process_[process_id] += 1; } -void NetworkContext::LoaderDestroyed(uint32_t process_id) { +void NetworkContext::LoaderDestroyed(const OriginatingProcess& process_id) { auto it = loader_count_per_process_.find(process_id); CHECK(it != loader_count_per_process_.end()); it->second -= 1; @@ -1270,7 +1274,7 @@ void NetworkContext::LoaderDestroyed(uint32_t process_id) { } } -bool NetworkContext::CanCreateLoader(uint32_t process_id) { +bool NetworkContext::CanCreateLoader(const OriginatingProcess& process_id) { auto it = loader_count_per_process_.find(process_id); uint32_t count = (it == loader_count_per_process_.end() ? 0 : it->second); return count < max_loaders_per_process_; @@ -1508,15 +1512,6 @@ void NetworkContext::SetDocumentReportingEndpoints( #endif // BUILDFLAG(ENABLE_REPORTING) } -void NetworkContext::SetEnterpriseReportingEndpoints( - const base::flat_map& endpoints) { -#if BUILDFLAG(ENABLE_REPORTING) - if (auto* reporting_service = url_request_context()->reporting_service()) { - reporting_service->SetEnterpriseReportingEndpoints(endpoints); - } -#endif // BUILDFLAG(ENABLE_REPORTING) -} - void NetworkContext::SendReportsAndRemoveSource( const base::UnguessableToken& reporting_source) { #if BUILDFLAG(ENABLE_REPORTING) @@ -1535,7 +1530,7 @@ void NetworkContext::QueueReport( const GURL& url, const std::optional& reporting_source, const net::NetworkAnonymizationKey& network_anonymization_key, - base::Value::Dict body) { + base::DictValue body) { QueueReportInternal(type, group, url, reporting_source, network_anonymization_key, std::move(body), net::ReportingTargetType::kDeveloper); @@ -1544,7 +1539,7 @@ void NetworkContext::QueueReport( void NetworkContext::QueueEnterpriseReport(const std::string& type, const std::string& group, const GURL& url, - base::Value::Dict body) { + base::DictValue body) { // Enterprise reports don't use a |reporting_source| or // |network_anonymization_key|. Enterprise endpoints are profile-bound and not // document-bound like web developer endpoints. @@ -1559,7 +1554,7 @@ void NetworkContext::QueueReportInternal( const GURL& url, const std::optional& reporting_source, const net::NetworkAnonymizationKey& network_anonymization_key, - base::Value::Dict body, + base::DictValue body, net::ReportingTargetType target_type) { #if BUILDFLAG(ENABLE_REPORTING) // If |reporting_source| is provided, it must not be empty. @@ -1932,7 +1927,7 @@ void NetworkContext::CreateWebSocket( net::StorageAccessApiStatus storage_access_api_status, const net::IsolationInfo& isolation_info, std::vector additional_headers, - int32_t process_id, + const network::OriginatingProcess& process_id, const url::Origin& origin, network::mojom::ClientSecurityStatePtr client_security_state, uint32_t options, @@ -1948,7 +1943,7 @@ void NetworkContext::CreateWebSocket( websocket_factory_ = std::make_unique(this); } - DCHECK_GE(process_id, 0); + DCHECK(process_id); websocket_factory_->CreateWebSocket( url, requested_protocols, site_for_cookies, storage_access_api_status, @@ -1997,13 +1992,27 @@ void NetworkContext::ResolveHost( const net::NetworkAnonymizationKey& network_anonymization_key, mojom::ResolveHostParametersPtr optional_parameters, mojo::PendingRemote response_client) { - // Dns request is disallowed if network access is disabled for the nonce. - if (network_anonymization_key.GetNonce().has_value() && + // Dns request is disallowed if network access is disabled for the partition + // nonce or the network_restrictions_id. + // TODO(crbug.com/447954811): For Connection Allowlist DNS lookups, define a + // less-strict mechanism that matches against the host portion of the URL. + GURL url = host->is_host_port_pair() + ? url::SchemeHostPort(url::kHttpsScheme, + host->get_host_port_pair().host(), + host->get_host_port_pair().port()) + .GetURL() + : host->get_scheme_host_port().GetURL(); + bool is_network_disallowed_for_nonce = + network_anonymization_key.GetNonce().has_value() && !IsNetworkForNonceAndUrlAllowed( - /*nonce=*/network_anonymization_key.GetNonce().value(), - /*url=*/host->is_host_port_pair() - ? GURL(host->get_host_port_pair().ToString()) - : host->get_scheme_host_port().GetURL())) { + network_anonymization_key.GetNonce().value(), url); + bool is_network_disallowed_for_restrictions_id = + (optional_parameters && + optional_parameters->network_restrictions_id.has_value() && + !IsHostResolutionForNonceAndHostAllowed( + optional_parameters->network_restrictions_id.value(), *host)); + if (is_network_disallowed_for_nonce || + is_network_disallowed_for_restrictions_id) { mojo::Remote remote_response_client( std::move(response_client)); remote_response_client->OnComplete( @@ -2186,7 +2195,7 @@ void NetworkContext::IsHSTSActiveForHost(const std::string& host, void NetworkContext::GetHSTSState(const std::string& domain, GetHSTSStateCallback callback) { - base::Value::Dict result; + base::DictValue result; if (base::IsStringASCII(domain)) { net::TransportSecurityState* transport_security_state = @@ -2324,6 +2333,7 @@ void NetworkContext::PreconnectSockets( const GURL& original_url, mojom::CredentialsMode credentials_mode, const net::NetworkAnonymizationKey& network_anonymization_key, + const std::optional& network_restrictions_id, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, const std::optional& keepalive_config, mojo::PendingRemote @@ -2345,6 +2355,10 @@ void NetworkContext::PreconnectSockets( network_anonymization_key.GetNonce().value(), url)) { return; } + if (network_restrictions_id.has_value() && + !IsNetworkForNonceAndUrlAllowed(*network_restrictions_id, url)) { + return; + } std::string user_agent; if (url_request_context_->http_user_agent_settings()) { @@ -2780,32 +2794,42 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( params_->file_paths->no_vary_search_directory->path(); } cache_params.type = network_session_configurator::ChooseCacheType(); -#if BUILDFLAG(IS_WIN) - // For enterprise users, we always use simple backend when encryption is - // enabled. - if (params_->enable_encrypted_http_cache) { - cache_params.type = - net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE; - } -#endif + if (params_->http_cache_file_operations_factory) { cache_params.file_operations_factory = base::MakeRefCounted( std::move(params_->http_cache_file_operations_factory)); } - // For enterprise users, we wrap `BackendFileOperations` to intercept file - // I/O with encryption ops. if (params_->enable_encrypted_http_cache) { - if (!cache_params.file_operations_factory) { - // Since it's the fallback later anyways, explicitly created here to - // wrap. - cache_params.file_operations_factory = - base::MakeRefCounted(); +#if BUILDFLAG(ENTERPRISE_CACHE_ENCRYPTION) + // For enterprise users, we always use simple backend when encryption is + // enabled. + cache_params.type = + net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE; + + // For enterprise users, we wrap `BackendFileOperations` to intercept + // file I/O with encryption ops, and create and pass in a + // `CacheEncryptionDelegate` to encrypt/decrypt cache entries on disk. + if (params_->encryption_provider) { + std::unique_ptr + cache_encryption_delegate = std::make_unique< + enterprise_encryption::OSCryptCacheEncryptionDelegate>( + std::move(params_->encryption_provider)); + if (!cache_params.file_operations_factory) { + // Since it's the fallback later anyways, explicitly created here to + // wrap. EncryptedBackendFileOperationsFactory will wrap this later + // when os_crypt_cache_encryption_delegate is created and + // initialized. + cache_params.file_operations_factory = base::MakeRefCounted< + disk_cache::TrivialFileOperationsFactory>(); + } + builder.set_cache_encryption_delegate( + std::move(cache_encryption_delegate)); } - cache_params.file_operations_factory = base::MakeRefCounted< - enterprise_encryption::EncryptedBackendFileOperationsFactory>( - std::move(cache_params.file_operations_factory)); +#else + NOTREACHED(); +#endif // BUILDFLAG(ENTERPRISE_CACHE_ENCRYPTION) } } cache_params.reset_cache = params_->reset_http_cache_backend; @@ -2816,15 +2840,6 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( cache_params.app_status_listener_getter)); #endif // BUILDFLAG(IS_ANDROID) builder.EnableHttpCache(cache_params); - - std::unique_ptr cache_encryption_delegate; - if (params_->encryption_provider) { - cache_encryption_delegate = std::make_unique< - enterprise_encryption::OSCryptCacheEncryptionDelegate>( - std::move(params_->encryption_provider)); - } - - builder.set_cache_encryption_delegate(std::move(cache_encryption_delegate)); } std::unique_ptr ssl_config_service = @@ -2948,11 +2963,6 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( } else { builder.set_persistent_reporting_and_nel_store(nullptr); } - - if (params_->enterprise_reporting_endpoints.has_value()) { - builder.set_enterprise_reporting_endpoints( - params_->enterprise_reporting_endpoints.value()); - } #endif // BUILDFLAG(ENABLE_REPORTING) net::HttpNetworkSessionParams session_params; @@ -3350,7 +3360,7 @@ void NetworkContext::CreateTrustedUrlLoaderFactoryForNetworkService( url_loader_factory_pending_receiver) { auto url_loader_factory_params = mojom::URLLoaderFactoryParams::New(); url_loader_factory_params->is_trusted = true; - url_loader_factory_params->process_id = network::mojom::kBrowserProcessId; + url_loader_factory_params->process_id = OriginatingProcess::browser(); CreateURLLoaderFactory(std::move(url_loader_factory_pending_receiver), std::move(url_loader_factory_params)); } @@ -3480,15 +3490,14 @@ void NetworkContext::RevokeNetworkForNonces( // network revocation. auto& revocation_set = network_revocation_nonces_[nonce]; for (const std::string& pattern : entry->allowlisted_patterns) { + // TODO(crbug.com/447954811): We can safely DCHECK here, as we've done + // pattern validation already while validating the header's syntax. That + // said, parsing the pattern twice has performance overhead, and it would + // be ideal to change our infrastructure to allow passing a + // SimpleUrlPatternMatcher directly rather than creating it anew here. auto matcher = url_pattern::SimpleUrlPatternMatcher::Create( pattern, /*base_url=*/nullptr); - if (!matcher.has_value()) { - // TODO(crbug.com/447954811): This case should result in an issue - // delivered to the devtools console (and ideally we'd avoid it - // entirely by parsing these strings as URL Patterns when initially - // parsing the header rather than here when enforcing it). - continue; - } + DCHECK(matcher.has_value()); revocation_set.insert(std::move(matcher.value())); } @@ -3634,6 +3643,43 @@ bool NetworkContext::IsNetworkForNonceAndUrlAllowed( return false; } +bool NetworkContext::IsHostResolutionForNonceAndHostAllowed( + const base::UnguessableToken& nonce, + const mojom::HostResolverHost& host) const { + if (!base::FeatureList::IsEnabled(network::features::kConnectionAllowlists)) { + return true; + } + + if (!network_revocation_nonces_.contains(nonce)) { + return true; + } + + std::string host_fragment = host.is_host_port_pair() + ? host.get_host_port_pair().host() + : host.get_scheme_host_port().host(); + GURL synthetic_url = + GURL(std::string(url::kHttpsScheme) + + std::string(url::kStandardSchemeSeparator) + host_fragment); + if (!synthetic_url.is_valid()) { + return false; + } + + // Per + // https://wicg.github.io/connection-allowlists/#abstract-opdef-match-a-host-to-a-connection-allowlist, + // we need to match `synthetic_url` against a host-only variant against each + // URLPattern corresponding to `nonce`. + const std::set>& + allowlisted_patterns = network_revocation_nonces_.find(nonce)->second; + for (const std::unique_ptr& pattern : + allowlisted_patterns) { + if (pattern->HostOnlyMatch(synthetic_url)) { + return true; + } + } + + return false; +} + void NetworkContext::InitializePrefetchURLLoaderFactory() { auto pending_receiver = prefetch_url_loader_factory_remote_.BindNewPipeAndPassReceiver(); 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 e2f1adc7..4836e529 100755 --- a/tools/under-control/src/testing/variations/fieldtrial_testing_config.json +++ b/tools/under-control/src/testing/variations/fieldtrial_testing_config.json @@ -23,9 +23,16 @@ { "name": "Enabled", "enable_features": [ + "AIMNTPEntrypointTablet", "ComposeboxCompactMode", "ComposeboxForceTop", - "ComposeboxIOS" + "ComposeboxIOS", + "ComposeboxIpad" + ], + "disable_features": [ + "ComposeboxAIMDisabled", + "ComposeboxAIMNudge", + "ComposeboxMenuTitle" ] } ] @@ -162,22 +169,6 @@ ] } ], - "AccessibilityAtomicLiveRegions": [ - { - "platforms": [ - "android", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AccessibilityAtomicLiveRegions" - ] - } - ] - } - ], "AccessibilityCheckJavaNodeCacheFreshness": [ { "platforms": [ @@ -255,21 +246,6 @@ } ], "AccessibilityExtendedSelection": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AccessibilityExtendedSelection" - ] - } - ] - } - ], - "AccessibilityImproveLiveRegionAnnounce": [ { "platforms": [ "android", @@ -279,6 +255,61 @@ { "name": "Enabled", "enable_features": [ + "AccessibilityExtendedSelection", + "AccessibilitySetSelectableOnAllNodesWithText" + ] + } + ] + } + ], + "AccessibilityHandleOccludingViews": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AccessibilityHandleOccludingViews" + ] + }, + { + "name": "Control", + "disable_features": [ + "AccessibilityHandleOccludingViews" + ] + } + ] + } + ], + "AccessibilityImproveLiveRegionsOnAndroid": [ + { + "platforms": [ + "android", + "android_webview" + ], + "experiments": [ + { + "name": "OnlyNonAtomicEnabled", + "enable_features": [ + "AccessibilityImproveLiveRegionAnnounce" + ], + "disable_features": [ + "AccessibilityAtomicLiveRegions" + ] + }, + { + "name": "BothAtomicAndNonAtomicEnabled", + "enable_features": [ + "AccessibilityAtomicLiveRegions", + "AccessibilityImproveLiveRegionAnnounce" + ] + }, + { + "name": "Control", + "disable_features": [ + "AccessibilityAtomicLiveRegions", "AccessibilityImproveLiveRegionAnnounce" ] } @@ -443,16 +474,17 @@ ] } ], - "AccessibilitySetSelectableOnAllNodesWithText": [ + "AccessibilityTextChangeTypes": [ { "platforms": [ - "android" + "android", + "android_webview" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AccessibilitySetSelectableOnAllNodesWithText" + "AccessibilityTextChangeTypes" ] } ] @@ -506,6 +538,30 @@ ] } ], + "AdjustPreconnectRetryInterval": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Multiplier1.2WithZeroDelays", + "params": { + "kPreconnectBackoffMultiplier": "1.2", + "kPreconnectInitialRetryInterval": "0ms", + "kPreconnectNetworkChangeInterval": "0ms" + }, + "enable_features": [ + "AdjustPreconnectRetryInterval" + ] + } + ] + } + ], "AggressiveShaderCacheLimits": [ { "platforms": [ @@ -615,6 +671,29 @@ ] } ], + "AndroidAdaptiveAdpfEfficiencyMode": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Compositor", + "params": { + "helper_mode": "compositor", + "mode": "adaptive" + }, + "enable_features": [ + "EnableAdpfEfficiencyMode", + "UsePerformanceHelper" + ], + "disable_features": [ + "RestrictBigCoreThreadAffinity" + ] + } + ] + } + ], "AndroidAnimateSuggestionsListAppearance": [ { "platforms": [ @@ -652,12 +731,11 @@ ], "experiments": [ { - "name": "Enabled_WithVisualUpdate_60fps", - "params": { - "fps_cap": "60" - }, + "name": "Enabled_AnimatedOnly_20260123", "enable_features": [ - "AndroidAnimatedProgressBarInBrowser", + "AndroidAnimatedProgressBarInBrowser" + ], + "disable_features": [ "AndroidProgressBarVisualUpdate" ] } @@ -787,6 +865,21 @@ ] } ], + "AndroidCaptureKeyEvents": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidCaptureKeyEvents" + ] + } + ] + } + ], "AndroidCaretBrowsing": [ { "platforms": [ @@ -823,16 +916,6 @@ "android" ], "experiments": [ - { - "name": "Enabled", - "params": { - "desktop-zoom-scaling-factor": "100", - "monitor-zoom-scaling-factor": "100" - }, - "enable_features": [ - "AndroidDesktopZoomScaling" - ] - }, { "name": "EnabledSmall", "params": { @@ -866,6 +949,21 @@ ] } ], + "AndroidDevToolsFrontend": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidDevToolsFrontend" + ] + } + ] + } + ], "AndroidHatsNext": [ { "platforms": [ @@ -1007,59 +1105,24 @@ ] } ], - "AndroidPinnedTabs": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_MovementAndSquish", - "params": { - "search_box_movement": "true", - "search_box_squish_animation": "true" - }, - "enable_features": [ - "AndroidPinnedTabs" - ] - }, - { - "name": "Enabled_Tablet_WithGTS", - "params": { - "search_box_movement": "true", - "search_box_squish_animation": "true" - }, - "enable_features": [ - "AndroidPinnedTabs", - "AndroidPinnedTabsTabletTabStrip" - ] - }, - { - "name": "Enabled", - "enable_features": [ - "AndroidPinnedTabs" - ] - }, - { - "name": "Enabled_Tablet", - "enable_features": [ - "AndroidPinnedTabsTabletTabStrip" - ] - } - ] - } - ], - "AndroidRaiseDisplayCriticalThreadPriority": [ + "AndroidParentalControlsV2": [ { "platforms": [ "android", - "android_webview" + "android_webview", + "fuchsia", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled_20251001", + "name": "Enabled", "enable_features": [ - "RaiseDisplayCriticalThreadPriority" + "SupervisedUserMergeDeviceParentalControlsAndFamilyLinkPrefs", + "SupervisedUserUseEmitDeviceLogRecordSeparately", + "SupervisedUserUseUrlFilteringService" ] } ] @@ -1164,21 +1227,22 @@ ], "experiments": [ { - "name": "WithMemoryThreshold", + "name": "FilterNTPNoMemoryThresholdWithKill", "params": { "kill_when_backgrounded": "true", "lowest-ranking": "true", "not-perceptible-binding": "false", "omnibox_spare_renderer_delay_ms": "500", + "only_for_navigation": "true", + "only_warmup_after_web_page_loaded": "true", "remove-binding-no-timeout": "true", - "spare_renderer_available_memory_threshold_enabled": "true", + "spare_renderer_available_memory_threshold_enabled": "false", "spare_renderer_creation_timing": "after-loading", "spare_renderer_timeout_seconds": "60" }, "enable_features": [ "AndroidWarmUpSpareRendererWithTimeout", "OverrideAndroidOmniboxSpareRendererDelay", - "ReportStuckThrottle", "ResumeNavigationWithSpeculativeRFHProcessGone", "SpareRendererProcessPriority" ] @@ -1262,6 +1326,27 @@ ] } ], + "AndroidThreadPriority": [ + { + "platforms": [ + "android", + "android_webview" + ], + "experiments": [ + { + "name": "RaiseDisplayCriticalThreadPriorityV2", + "params": { + "interactive": "-12", + "obey_soc_restrictions": "false", + "presentation": "-12" + }, + "enable_features": [ + "AndroidThreadPriority" + ] + } + ] + } + ], "AndroidTipsNotifications": [ { "platforms": [ @@ -1601,6 +1686,7 @@ }, "enable_features": [ "ApproximateGeolocationPermission", + "ApproximateGeolocationWebVisibleAPI", "PermissionsPromptSurvey" ] } @@ -2046,26 +2132,6 @@ ] } ], - "AsyncTouchMovesImmediatelyAfterScroll": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AsyncTouchMovesImmediatelyAfterScroll" - ] - } - ] - } - ], "AudioDecoderAudioFileReader": [ { "platforms": [ @@ -2101,27 +2167,6 @@ ] } ], - "AudioInputConfirmReadsViaShmem": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AudioInputConfirmReadsViaShmem" - ] - } - ] - } - ], "AudioOffload": [ { "platforms": [ @@ -2186,21 +2231,22 @@ ] } ], - "AutoRevokeSuspiciousNotification": [ + "AutoDownloadTranslateLanguagePacks": [ { "platforms": [ - "android" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "EnabledLookback7dHigherThreshold", + "name": "Enabled_EnEs_S1", "params": { - "AutoRevokeSuspiciousNotificationEngagementScoreCutOff": "50.0", - "AutoRevokeSuspiciousNotificationLookBackPeriod": "7", - "AutoRevokeSuspiciousNotificationMinNotificationCount": "9" + "language_pairs": "en-es" }, "enable_features": [ - "AutoRevokeSuspiciousNotification" + "AutoDownloadTranslateLanguagePacks" ] } ] @@ -2273,6 +2319,27 @@ ] } ], + "AutofillAddressImproveBuildingNumberRegex": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillAddressImproveBuildingNumberRegex" + ] + } + ] + } + ], "AutofillAddressSuggestionsOnTyping": [ { "platforms": [ @@ -2356,6 +2423,34 @@ ] } ], + "AutofillAiDefaultAvailability": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillAiAvailableByDefault", + "AutofillAiReauthRequired" + ] + }, + { + "name": "EnabledWithReauthOnly", + "enable_features": [ + "AutofillAiReauthRequired" + ], + "disable_features": [ + "AutofillAiAvailableByDefault" + ] + } + ] + } + ], "AutofillAiM3PublicPasses": [ { "platforms": [ @@ -2405,7 +2500,12 @@ "AutofillAndroidKeyboardAccessoryDynamicPositioning": [ { "platforms": [ - "android" + "android", + "android_webview", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { @@ -2439,6 +2539,26 @@ ] } ], + "AutofillConsiderAutocompleteUnrecognizedFieldsInMetrics": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillConsiderAutocompleteUnrecognizedFieldsInMetrics" + ] + } + ] + } + ], "AutofillCreditCardUserPerceptionSurvey": [ { "platforms": [ @@ -2461,6 +2581,24 @@ ] } ], + "AutofillEnableAiBasedAmountExtraction": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableAiBasedAmountExtraction" + ] + } + ] + } + ], "AutofillEnableBuyNowPayLaterAndroid": [ { "platforms": [ @@ -2475,7 +2613,8 @@ "AutofillEnableBuyNowPayLaterForExternallyLinked", "AutofillEnableBuyNowPayLaterForKlarna", "AutofillEnableBuyNowPayLaterUpdatedSuggestionSecondLineString", - "AutofillEnableTouchToFillReshowForBnpl" + "AutofillEnableTouchToFillReshowForBnpl", + "AutofillTouchToFillShowManualFillForVcnFix" ] } ] @@ -2633,22 +2772,6 @@ ] } ], - "AutofillEnableKeyboardAccessoryRedesign": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableKeyboardAccessoryChipRedesign", - "AutofillEnableKeyboardAccessoryChipWidthAdjustment" - ] - } - ] - } - ], "AutofillEnableLabelPrecedenceForTurkishAddresses": [ { "platforms": [ @@ -2670,19 +2793,36 @@ ] } ], - "AutofillEnableLoyaltyCardsFieldParsingiOS": [ + "AutofillEnableMandatoryReauthAndFpanRiskBasedAuthenticationChromeOs": [ { "platforms": [ - "ios" + "chromeos" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AutofillEnableEmailOrLoyaltyCardsFilling", - "AutofillEnableLoyaltyCardsFilling", - "IPH_AutofillEnableLoyaltyCards", - "SyncAutofillLoyaltyCard" + "AutofillEnableFpanRiskBasedAuthentication", + "AutofillEnablePaymentsMandatoryReauthChromeOs" + ] + } + ] + } + ], + "AutofillEnableNonAffiliatedLoyaltyCardsFilling": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableNonAffiliatedLoyaltyCardsFilling" ] } ] @@ -2769,6 +2909,44 @@ ] } ], + "AutofillEnableVcn3dsAuthentication": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableVcn3dsAuthentication" + ] + } + ] + } + ], + "AutofillEnableWalletBranding": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableWalletBranding" + ] + } + ] + } + ], "AutofillExtendZipCodeValidation": [ { "platforms": [ @@ -2894,27 +3072,6 @@ ] } ], - "AutofillIgnoreCheckableElements": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillIgnoreCheckableElements" - ] - } - ] - } - ], "AutofillImproveAddressFieldSwapping": [ { "platforms": [ @@ -2935,6 +3092,27 @@ ] } ], + "AutofillImprovePhoneFieldParser": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillImprovePhoneFieldParser" + ] + } + ] + } + ], "AutofillImproveSubmissionDetectionV3": [ { "platforms": [ @@ -2956,48 +3134,6 @@ ] } ], - "AutofillImprovedLabels": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_WithDifferentiatingLabelsInFront", - "params": { - "autofill_improved_labels_with_differentiating_labels_in_front": "true", - "autofill_improved_labels_without_main_text_changes": "false" - }, - "enable_features": [ - "AutofillImprovedLabels" - ] - }, - { - "name": "Enabled", - "params": { - "autofill_improved_labels_with_differentiating_labels_in_front": "false", - "autofill_improved_labels_without_main_text_changes": "false" - }, - "enable_features": [ - "AutofillImprovedLabels" - ] - }, - { - "name": "Enabled_WithoutMainTextChanges", - "params": { - "autofill_improved_labels_with_differentiating_labels_in_front": "false", - "autofill_improved_labels_without_main_text_changes": "true" - }, - "enable_features": [ - "AutofillImprovedLabels" - ] - } - ] - } - ], "AutofillModelPredictions": [ { "platforms": [ @@ -3042,6 +3178,27 @@ ] } ], + "AutofillNewRegexForPhoneCountryCode": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillNewRegexForPhoneCountryCode" + ] + } + ] + } + ], "AutofillOptimizeCacheUpdates": [ { "platforms": [ @@ -3236,6 +3393,27 @@ ] } ], + "AutofillServerQueryPredictionsEarly": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillServerQueryPredictionsEarly" + ] + } + ] + } + ], "AutofillSharedStorageServerCardData": [ { "platforms": [ @@ -3500,6 +3678,138 @@ ] } ], + "AutofillYourSavedInfoHatsSurveysContactInfo": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "UuDtBUYQd0ugnJ3q1cK0VRmtfk3Y", + "probability": "1.0" + }, + "enable_features": [ + "ManageContactInfoPerceptionSurvey" + ] + } + ] + } + ], + "AutofillYourSavedInfoHatsSurveysIdentityDocs": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "811zfpRVW0ugnJ3q1cK0Xrx1zx6D", + "probability": "1.0" + }, + "enable_features": [ + "ManageIdentityDocsPerceptionSurvey" + ] + } + ] + } + ], + "AutofillYourSavedInfoHatsSurveysPasswords": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "aiz6pApe80ugnJ3q1cK0VEFVxXwp", + "probability": "1.0" + }, + "enable_features": [ + "ManagePasswordsPerceptionSurvey" + ] + } + ] + } + ], + "AutofillYourSavedInfoHatsSurveysPayments": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "5SEr2of3w0ugnJ3q1cK0W5dS4VKB", + "probability": "1.0" + }, + "enable_features": [ + "ManagePaymentsPerceptionSurvey" + ] + } + ] + } + ], + "AutofillYourSavedInfoHatsSurveysTravel": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "39qE7WkY60ugnJ3q1cK0RfbRRKSd", + "probability": "1.0" + }, + "enable_features": [ + "ManageTravelPerceptionSurvey" + ] + } + ] + } + ], + "AutofillYourSavedInfoHatsSurveysYourSavedInfo": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "yQz3bhmYH0ugnJ3q1cK0UjmzS3J3", + "probability": "1.0" + }, + "enable_features": [ + "ManageYourSavedInfoPerceptionSurvey" + ] + } + ] + } + ], "AutomatedPasswordChangeStudyModelUsage": [ { "platforms": [ @@ -3537,6 +3847,24 @@ ] } ], + "AutomaticJsOptimizer": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BlockV8OptimizerOnUnfamiliarSitesSetting" + ] + } + ] + } + ], "AutomaticUsbDetach": [ { "platforms": [ @@ -3567,22 +3895,16 @@ ] } ], - "AvoidDuplicateDelayBeginFrame": [ + "AvoidDoubleMultiwindowChanges": [ { "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AvoidDuplicateDelayBeginFrame" + "AvoidDoubleMultiwindowChanges" ] } ] @@ -3851,24 +4173,6 @@ ] } ], - "BackForwardCacheWithSharedWorker": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_20250708", - "enable_features": [ - "BFCacheWithSharedWorker" - ] - } - ] - } - ], "BackForwardTransitionsSharedImage": [ { "platforms": [ @@ -3960,16 +4264,16 @@ ] } ], - "BackgroundThreadPoolPISupported": [ + "BackgroundThreadPoolPIGeneral": [ { "platforms": [ "android" ], "experiments": [ { - "name": "EnabledBoth_20250805", + "name": "Enabled_20260106", "params": { - "config": "4" + "config": "6" }, "enable_features": [ "BackgroundThreadPoolFieldTrial" @@ -4054,6 +4358,28 @@ ] } ], + "BeforeFirstRunDesktopRefreshSurvey": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "XhHJ3uboj0ugnJ3q1cK0S6RQC7u7", + "hats_histogram_name": "Feedback.HappinessTrackingSurvey.BeforeFirstRunDesktopRefreshSurvey", + "probability": "1.0" + }, + "enable_features": [ + "BeforeFirstRunDesktopRefreshSurvey" + ] + } + ] + } + ], "BeginCursorAtPointTentativeFix": [ { "platforms": [ @@ -4373,14 +4699,15 @@ "BoostThreadsPriority": [ { "platforms": [ - "windows" + "windows", + "chromeos", + "linux", + "mac" ], "experiments": [ { - "name": "CompositorAndInputScenarioBoost", + "name": "IOThreadInteractive", "enable_features": [ - "BoostCompositorThreadsPriorityWhenIdle", - "BoostThreadsPriorityDuringInputScenario", "IOThreadInteractiveThreadType" ] } @@ -4486,6 +4813,24 @@ ] } ], + "BrowserInitiatedAutomaticPictureInPictureDryRun": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BrowserInitiatedAutomaticPictureInPictureDryRun" + ] + } + ] + } + ], "BrowserSignalsReportingEnabled": [ { "platforms": [ @@ -4548,6 +4893,24 @@ ] } ], + "BrowserWidgetCacheThemeService": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BrowserWidgetCacheThemeService" + ] + } + ] + } + ], "BrowsingDataModelAndroid": [ { "platforms": [ @@ -4593,7 +4956,8 @@ { "name": "Enabled", "enable_features": [ - "BrowsingHistoryActorIntegrationM3" + "BrowsingHistoryActorIntegrationM3", + "BrowsingHistorySimilarVisitsGrouping" ] } ] @@ -4650,60 +5014,6 @@ ] } ], - "CCTAdaptiveButton": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledModelVariantD_20250825", - "params": { - "show_open_in_browser_menu_top": "true" - }, - "enable_features": [ - "CCTAdaptiveButton" - ] - }, - { - "name": "EnabledCPA+OIB", - "params": { - "contextual_only": "true", - "default_variant": "15" - }, - "enable_features": [ - "CCTAdaptiveButton" - ] - }, - { - "name": "EnabledCPA+OIB+ReaderModeFallbackMenu", - "params": { - "contextual_only": "true", - "default_variant": "15", - "reader_mode_fallback_menu": "true" - }, - "enable_features": [ - "CCTAdaptiveButton" - ] - }, - { - "name": "Control", - "disable_features": [ - "CCTAdaptiveButton" - ] - }, - { - "name": "EnabledOIBMenu", - "params": { - "show_open_in_browser_menu_top": "true" - }, - "enable_features": [ - "CCTAdaptiveButton" - ] - } - ] - } - ], "CCTEphemeralMediaViewerExperiment": [ { "platforms": [ @@ -4829,7 +5139,7 @@ ] } ], - "CacheSharingForPervasiveScripts": [ + "CacheSharingForPervasiveResources": [ { "platforms": [ "android", @@ -4841,12 +5151,9 @@ ], "experiments": [ { - "name": "Enabled_20250520", - "params": { - "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" - }, + "name": "Enabled", "enable_features": [ - "CacheSharingForPervasiveScripts" + "CacheSharingForPervasiveResources" ] } ] @@ -4888,25 +5195,6 @@ ] } ], - "Canvas2DHibernationNoSmallCanvas": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "Canvas2DHibernationNoSmallCanvas" - ] - } - ] - } - ], "Canvas2DReclaimUnusedResources": [ { "platforms": [ @@ -4928,7 +5216,7 @@ ] } ], - "CanvasHibernationExperiments": [ + "CanvasHibernationExperimentsV2": [ { "platforms": [ "android", @@ -4939,9 +5227,11 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260205", "enable_features": [ "Canvas2DHibernation", + "Canvas2DHibernationDefer", + "Canvas2DHibernationNoSmallCanvas", "Canvas2DHibernationReleaseTransferMemory", "CanvasHibernationSnapshotZstd", "ClearCanvasResourcesInBackground", @@ -5079,6 +5369,258 @@ ] } ], + "ChromeIdentitySurveyAddressBubbleSigninExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "QLEtVmyw80ugnJ3q1cK0UGdNayod", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveyAddressBubbleSignin" + ] + } + ] + } + ], + "ChromeIdentitySurveyDiceWebSigninAcceptedExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "xEt7e5g7R0ugnJ3q1cK0VZ7N4MUU", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveyDiceWebSigninAccepted" + ] + } + ] + } + ], + "ChromeIdentitySurveyDiceWebSigninDeclinedExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "2LBpsLxW40ugnJ3q1cK0YRjYGpmV", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveyDiceWebSigninDeclined" + ] + } + ] + } + ], + "ChromeIdentitySurveyFirstRunSigninExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "RyaBY3Nkt0ugnJ3q1cK0NsYdHNN6", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveyFirstRunSignin" + ] + } + ] + } + ], + "ChromeIdentitySurveyPasswordBubbleSigninExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "Y6Y4fzSar0ugnJ3q1cK0WNKdFDWW", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveyPasswordBubbleSignin" + ] + } + ] + } + ], + "ChromeIdentitySurveyProfileMenuDismissedExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "AHS3hpM2h0ugnJ3q1cK0TTUsr4mM", + "probability": "0.008" + }, + "enable_features": [ + "ChromeIdentitySurveyProfileMenuDismissed" + ] + } + ] + } + ], + "ChromeIdentitySurveyProfileMenuSigninExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "5BV1ygFHd0ugnJ3q1cK0WVqeKyud", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveyProfileMenuSignin" + ] + } + ] + } + ], + "ChromeIdentitySurveyProfilePickerAddProfileSigninExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "dQhvVytAT0ugnJ3q1cK0WmcCsZxn", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveyProfilePickerAddProfileSignin" + ] + } + ] + } + ], + "ChromeIdentitySurveySigninInterceptProfileSeparationExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "EpkbgSho80ugnJ3q1cK0XfvvYoum", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveySigninInterceptProfileSeparation" + ] + } + ] + } + ], + "ChromeIdentitySurveySigninPromoBubbleDismissedExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "LSwnpVNg60ugnJ3q1cK0Uj5JGisJ", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveySigninPromoBubbleDismissed" + ] + } + ] + } + ], + "ChromeIdentitySurveySwitchProfileFromProfileMenuExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "buPSkStWM0ugnJ3q1cK0RmiQgzK1", + "probability": "0.008" + }, + "enable_features": [ + "ChromeIdentitySurveySwitchProfileFromProfileMenu" + ] + } + ] + } + ], + "ChromeIdentitySurveySwitchProfileFromProfilePickerExtended": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "b5zoUGRaf0ugnJ3q1cK0RaxK8yrp", + "probability": "0.08" + }, + "enable_features": [ + "ChromeIdentitySurveySwitchProfileFromProfilePicker" + ] + } + ] + } + ], "ChromeOSARCVMLmkPerceptibleMinState": [ { "platforms": [ @@ -5140,21 +5682,6 @@ ] } ], - "ChromeOSEnterpriseEventBasedLogUpload": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EventBasedLogUpload" - ] - } - ] - } - ], "ChromeOSGrowthFramework": [ { "platforms": [ @@ -5890,45 +6417,6 @@ ] } ], - "ChromnientEntrypointLabelAlt": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "id": "1" - }, - "enable_features": [ - "LensOverlayEntrypointLabelAlt" - ] - } - ] - } - ], - "ChromnientNonBlockingPrivacyNotice": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LensOverlayNonBlockingPrivacyNotice" - ] - } - ] - } - ], "ChromnientReinvocationAffordance": [ { "platforms": [ @@ -6076,24 +6564,6 @@ ] } ], - "ChromnientUpdatedVisuals": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "VisualUpdatesEnabled", - "enable_features": [ - "LensOverlayVisualSelectionUpdates" - ] - } - ] - } - ], "ChromnientVideoCitations": [ { "platforms": [ @@ -6277,10 +6747,15 @@ { "name": "Enabled", "params": { + "Decoders": "base32,base64", "HCAcceptanceRate": "1", + "IncludeFullPayload": "true", + "Loaders": "curl,wget,invoke-webrequest,iwr", "MaxLength": "1000", "MinLength": "50", "ProcessPayload": "true", + "RemoteRunners": "mshta", + "Runners": "bash,cmd,conhost,iex,invoke-expression,zsh", "SampleRate": "1" }, "enable_features": [ @@ -6302,7 +6777,11 @@ { "name": "Enabled", "params": { + "EnableHeuristicFilter": "false", + "EnableNewSiteFilter": "false", + "EnableReferringAppFilter": "false", "HCAcceptanceRate": "1.0", + "MaxUserVisit": "1", "SampleRate": "0.0" }, "enable_features": [ @@ -6312,6 +6791,25 @@ ] } ], + "ClientSideDetectionDeprecateDOMModel": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ClientSideDetectionDeprecateDOMModel" + ] + } + ] + } + ], "ClientSideDetectionImageEmbeddingMatch": [ { "platforms": [ @@ -6408,30 +6906,6 @@ ] } ], - "ClientSideDetectionShowScamVerdictWarningAndroid": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledWithWarning", - "enable_features": [ - "ClientSideDetectionSendIntelligentScanInfoAndroid", - "ClientSideDetectionShowScamVerdictWarningAndroid", - "OptimizationGuideOnDeviceModel" - ] - }, - { - "name": "EnabledMetricsCollection", - "enable_features": [ - "ClientSideDetectionSendIntelligentScanInfoAndroid", - "OptimizationGuideOnDeviceModel" - ] - } - ] - } - ], "ClientSideDetectionSkipErrorPage": [ { "platforms": [ @@ -6734,38 +7208,6 @@ ] } ], - "CompensateGestureDetectorTimeouts": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "compensate_gesture_timeouts_for_long_delayed_sequences": "false" - }, - "enable_features": [ - "CompensateGestureDetectorTimeouts" - ] - }, - { - "name": "EnabledWithLongDelayedSequences", - "params": { - "compensate_gesture_timeouts_for_long_delayed_sequences": "true" - }, - "enable_features": [ - "CompensateGestureDetectorTimeouts" - ] - } - ] - } - ], "ComposeAXSnapshot": [ { "platforms": [ @@ -6915,6 +7357,57 @@ ] } ], + "CompositedAnimationsForceMainFrames": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "fuchsia", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "anchor-transform": "true", + "intersection-observer": "true" + }, + "enable_features": [ + "CompositedAnimationsForceMainFrames" + ] + }, + { + "name": "IntersectionObserverOnly", + "params": { + "anchor-transform": "false", + "intersection-observer": "true" + }, + "enable_features": [ + "CompositedAnimationsForceMainFrames" + ] + }, + { + "name": "AnchorTransformOnly", + "params": { + "anchor-transform": "true", + "intersection-observer": "false" + }, + "enable_features": [ + "CompositedAnimationsForceMainFrames" + ] + }, + { + "name": "Disabled", + "disable_features": [ + "CompositedAnimationsForceMainFrames" + ] + } + ] + } + ], "CompressionDictionaryPreload": [ { "platforms": [ @@ -7057,19 +7550,16 @@ ] } ], - "ContentVerifierCacheIncludesExtensionRoot": [ + "ConsistentLogoDoodleHeight": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "ContentVerifierCacheIncludesExtensionRoot" + "ConsistentLogoDoodleHeight" ] } ] @@ -7093,7 +7583,7 @@ ] } ], - "ContextualSearchBox": [ + "ContextualSearchBoxExpansion": [ { "platforms": [ "chromeos", @@ -7103,26 +7593,12 @@ ], "experiments": [ { - "name": "Enabled_AutoFocus_ApcOnly_UiUpdates_20250613", - "params": { - "auto-focus-searchbox": "true", - "page-content-request-id-fix": "true", - "pdf-text-character-limit": "5000", - "send-page-url-for-contextualization": "true", - "show-contextual-searchbox-ghost-loader-loading-state": "true", - "update-viewport-each-query": "true", - "use-apc-as-context": "true", - "use-inner-html-as-context": "false", - "use-inner-text-as-context": "false", - "use-pdf-interaction-type": "true", - "use-pdf-vit-param": "true", - "use-pdfs-as-context": "true", - "use-updated-content-fields": "true", - "use-webpage-interaction-type": "true", - "use-webpage-vit-param": "true" - }, + "name": "Enabled", "enable_features": [ - "LensOverlayContextualSearchbox" + "LensOverlayContextualSearchbox", + "LensOverlayEntrypointLabelAlt", + "LensOverlayNonBlockingPrivacyNotice", + "LensOverlayVisualSelectionUpdates" ] } ] @@ -7177,7 +7653,7 @@ { "name": "Enabled", "params": { - "ContextualTasksEntryPoint": "toolbar-permanent" + "ContextualTasksEntryPoint": "toolbar-revisit" }, "enable_features": [ "ContextualTasks", @@ -7838,21 +8314,6 @@ ] } ], - "CreateTabHelperOnlyForRealizedWebStates": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CreateTabHelperOnlyForRealizedWebStates" - ] - } - ] - } - ], "CreateURLLoaderPipeAsync": [ { "platforms": [ @@ -7969,6 +8430,38 @@ ] } ], + "CrossDevicePrefTracker": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableCrossDevicePrefTracker" + ] + } + ] + }, + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableCrossDevicePrefTracker", + "HomeModulePrefRefactor" + ] + } + ] + } + ], "CrostiniContainerless": [ { "platforms": [ @@ -8078,62 +8571,44 @@ ] } ], - "DBSCMacUKSInBrowserProcess": [ + "DSEPrewarmAndroid": [ { "platforms": [ - "mac" + "android" ], "experiments": [ { - "name": "Enabled_20251217", + "name": "EnabledWithRPHReuse", + "params": { + "reuse_search_host": "true", + "url": "https://www.google.com/search/warmup.html", + "zero_suggest_trigger": "true" + }, "enable_features": [ - "UseUnexportableKeyServiceInBrowserProcess" + "CheckHitEligibility", + "Prerender2ReuseHost", + "Prewarm", + "ReusePrerenderingProcessForMainFrames" ] } ] } ], - "DSEPreconnect2": [ + "DSEPrewarmDesktop": [ { "platforms": [ - "android", "chromeos", "linux", "mac", "windows" ], - "experiments": [ - { - "name": "EnabledWithbase_60_30_30_30__20250507", - "params": { - "FallbackInLowPowerMode": "false", - "IdleTimeoutInSeconds": "60", - "MaxPreconnectRetryInterval": "30", - "MaxShortSessionThreshold": "30s", - "PingIntervalInSeconds": "30", - "QuicConnectionOptions": "ECCP" - }, - "enable_features": [ - "SearchEnginePreconnect2" - ] - } - ] - } - ], - "DSEPrewarm": [ - { - "platforms": [ - "android", - "chromeos", - "linux" - ], "experiments": [ { "name": "EnabledWithRPHReuse", "params": { "reuse_search_host": "true", - "url": "https://www.google.com/warmup.html", - "zero_suggest_trigger": "true" + "url": "https://www.google.com/search/warmup.html", + "user_interaction_trigger": "true" }, "enable_features": [ "CheckHitEligibility", @@ -8278,6 +8753,48 @@ ] } ], + "DefaultBrowserPromoEntryPoint": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_Full", + "params": { + "show_app_menu_item": "true" + }, + "enable_features": [ + "DefaultBrowserPromoEntryPoint" + ] + }, + { + "name": "Enabled_SettingsOnly", + "params": { + "show_app_menu_item": "false" + }, + "enable_features": [ + "DefaultBrowserPromoEntryPoint" + ] + } + ] + } + ], + "DefaultBrowserPromoIpadInstructions": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DefaultBrowserPromoIpadInstructions" + ] + } + ] + } + ], "DefaultPassthroughCommandDecoder": [ { "platforms": [ @@ -8358,6 +8875,28 @@ ] } ], + "DelayMainJob": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "EnabledWithDelayMainJob", + "params": { + "AdditionalDelay": "100ms" + }, + "enable_features": [ + "AdditionalDelayMainJob" + ] + } + ] + } + ], "DelayRfhDestructionsOnUnloadAndDetach": [ { "platforms": [ @@ -8434,10 +8973,10 @@ ], "experiments": [ { - "name": "Enabled_135", + "name": "Enabled_145", "params": { "allowlist": "a.com,b.com,c.com,d.com,e.com,f.com,web-platform.test,www1.web-platform.test,127.0.0.1,example.test,www.google.com", - "rollout_percent": "0" + "rollout_percent": "1" }, "enable_features": [ "DeprecateUnload", @@ -8447,6 +8986,28 @@ ] } ], + "DeprecateUnloadByBucket": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_145", + "params": { + "rollout_bucket": "0" + }, + "enable_features": [ + "DeprecateUnloadByBucket" + ] + } + ] + } + ], "DeprecatedExternalPickerFunction": [ { "platforms": [ @@ -8493,21 +9054,6 @@ ] } ], - "DesktopMediaPickerCheckAudioPermissions": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DesktopMediaPickerCheckAudioPermissions" - ] - } - ] - } - ], "DesktopNtpDriveCache": [ { "platforms": [ @@ -8682,7 +9228,7 @@ "ModuleMinStalenessUpdateTimeInterval": "1d", "ShortcutsMinStalenessUpdateTimeInterval": "1d", "StaleModulesCountThreshold": "1", - "StaleShortcutsCountThreshold": "3" + "StaleShortcutsCountThreshold": "2" }, "enable_features": [ "NtpFeatureOptimizationDismissModulesRemoval", @@ -8838,26 +9384,6 @@ ] } ], - "DesktopPWAsPredictableAppUpdating": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SilentPolicyAndDefaultAppUpdating", - "WebAppPredictableAppUpdating", - "WebAppUsePrimaryIcon" - ] - } - ] - } - ], "DesktopUAOnConnectedDisplays": [ { "platforms": [ @@ -8888,23 +9414,89 @@ { "name": "Enabled", "enable_features": [ - "DevToolsAiPromptApi" + "DevToolsAiPromptApi", + "DevToolsConsoleInsightsTeasers" ] } ] } ], - "DeviceBoundSessionCredentials2": [ + "DevToolsDurableMessages": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "DevToolsEnableDurableMessages", + "enable_features": [ + "DevToolsEnableDurableMessages" + ] + } + ] + } + ], + "DeviceBoundSessionCredentialsMac": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "Value": "l1_enabled" + }, + "enable_features": [ + "DeviceBoundSessions", + "DeviceBoundSessionsFederatedRegistration", + "DeviceBoundSessionsForRestrictedSites", + "DeviceBoundSessionsForRestrictedSitesExperimentId", + "EnableChromeRefreshTokenBinding", + "EnableOAuthMultiloginStandardCookiesBinding", + "PersistDeviceBoundSessions", + "UnexportableKeyDeletion", + "UseUnexportableKeyServiceInBrowserProcess" + ] + } + ] + } + ], + "DeviceBoundSessionsForGoogle": [ { "platforms": [ "windows" ], "experiments": [ { - "name": "Enabled_20251014", + "name": "Enabled", "params": { - "OriginTrialFeedback": "true", - "SchemaVersion": "2" + "Value": "l2_enabled" + }, + "enable_features": [ + "DeviceBoundSessionsForRestrictedSites", + "DeviceBoundSessionsForRestrictedSitesExperimentId", + "EnableOAuthMultiloginStandardCookiesBinding", + "UseUnexportableKeyServiceInBrowserProcess" + ] + } + ] + } + ], + "DeviceBoundSessionsStandardLaunch": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled_20260130", + "params": { + "RequireOriginTrialTokens": "false", + "SchemaVersion": "3" }, "enable_features": [ "DeviceBoundSessions", @@ -8985,18 +9577,36 @@ ], "experiments": [ { - "name": "EnabledAfterLoading", + "name": "EnabledForegroundBrowserNetwork", "params": { - "mode": "AfterLoading" + "exempt_processes": "ForegroundBrowserNetwork" }, "enable_features": [ "DisableBoostPriority" ] }, { - "name": "EnabledAtStartup", + "name": "EnabledLoadingBrowserNetwork", "params": { - "mode": "AtStartup" + "exempt_processes": "LoadingBrowserNetwork" + }, + "enable_features": [ + "DisableBoostPriority" + ] + }, + { + "name": "EnabledGpuBrowserNetwork", + "params": { + "exempt_processes": "GpuBrowserNetwork" + }, + "enable_features": [ + "DisableBoostPriority" + ] + }, + { + "name": "EnabledBrowserNetwork", + "params": { + "exempt_processes": "BrowserNetwork" }, "enable_features": [ "DisableBoostPriority" @@ -9021,6 +9631,21 @@ ] } ], + "DisableCookieStoreIOSFlushOnBackgrounding": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DisableCookieStoreIOSFlushOnBackgrounding" + ] + } + ] + } + ], "DisableGeoLanguageModel": [ { "platforms": [ @@ -9459,6 +10084,25 @@ ] } ], + "DumpWithoutCrashingForMissingSecurityState": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_20260121", + "enable_features": [ + "DumpWithoutCrashingForMissingSecurityState" + ] + } + ] + } + ], "DwaFeature": [ { "platforms": [ @@ -9479,28 +10123,6 @@ ] } ], - "DynamicProfileCountry": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DynamicProfileCountry", - "StrictAssociatedCountriesCheck", - "WaffleRestrictToAssociatedCountries" - ] - } - ] - } - ], "EdgeToEdgeUseBackupNavbarInsets": [ { "platforms": [ @@ -9535,6 +10157,21 @@ ] } ], + "EnableADPFAsyncSetThreads": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableADPFAsyncSetThreads" + ] + } + ] + } + ], "EnableADPFBoostRateLimit": [ { "platforms": [ @@ -9550,6 +10187,21 @@ ] } ], + "EnableADPFIgnoreThrottledTime": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableADPFIgnoreThrottledTime" + ] + } + ] + } + ], "EnableADPFScrollNoRendererMain": [ { "platforms": [ @@ -9631,6 +10283,21 @@ ] } ], + "EnableBEContextMenuConfiguration": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableBEContextMenuConfiguration" + ] + } + ] + } + ], "EnableBestEffortTaskInhibitingPolicy": [ { "platforms": [ @@ -9650,6 +10317,24 @@ ] } ], + "EnableCacheEncryption": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableCacheEncryption" + ] + } + ] + } + ], "EnableChromeFatalCrashEventsObserver": [ { "platforms": [ @@ -9695,21 +10380,6 @@ ] } ], - "EnableClipboardDataControlsIOS": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableClipboardDataControlsIOS" - ] - } - ] - } - ], "EnableCustomInputStreamBufferSize": [ { "platforms": [ @@ -9807,16 +10477,16 @@ ] } ], - "EnableExclusiveAccessManager": [ + "EnableEncryptedMediaOcclusionTracking": [ { "platforms": [ - "android" + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "EnableExclusiveAccessManager" + "EncryptedMediaOcclusionTracking" ] } ] @@ -9852,24 +10522,6 @@ ] } ], - "EnableForceDownloadToCloud": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableForceDownloadToCloud" - ] - } - ] - } - ], "EnableFullscreenToAnyScreenAndroid": [ { "platforms": [ @@ -10030,6 +10682,21 @@ ] } ], + "EnableOktaSsoOnMacOS": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled_20251216", + "enable_features": [ + "OktaSSO" + ] + } + ] + } + ], "EnablePDPMetricsUSDesktopIOS": [ { "platforms": [ @@ -10165,24 +10832,6 @@ ] } ], - "EnableSinglePageAppDataProtection": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableSinglePageAppDataProtection" - ] - } - ] - } - ], "EnableTLS13EarlyData": [ { "platforms": [ @@ -10402,6 +11051,24 @@ ] } ], + "EnterpriseRealTimeUrlCheckNewUrl": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnterpriseRealTimeUrlCheckNewUrl" + ] + } + ] + } + ], "EventTimingIgnorePresentationTimeFromUnexpectedFrameSource": [ { "platforms": [ @@ -10423,6 +11090,21 @@ ] } ], + "ExcludePipFromScreenCapture": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ExcludePipFromScreenCapture" + ] + } + ] + } + ], "ExpandCompositedCullRectMobile": [ { "platforms": [ @@ -10442,6 +11124,48 @@ ] } ], + "ExtensionBrowserNamespaceAlternative": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ExtensionBrowserNamespaceAlternative" + ] + }, + { + "name": "Disabled", + "disable_features": [ + "ExtensionBrowserNamespaceAlternative" + ] + } + ] + } + ], + "ExtensionContentVerificationUsesExtensionRoot": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ExtensionContentVerificationUsesExtensionRoot" + ] + } + ] + } + ], "ExtensionManifestV2Deprecation": [ { "platforms": [ @@ -10927,6 +11651,26 @@ ] } ], + "FieldClassificationModelCaching": [ + { + "platforms": [ + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "FieldClassificationModelCaching" + ] + } + ] + } + ], "FieldRankServerClassification": [ { "platforms": [ @@ -10945,6 +11689,21 @@ ] } ], + "FlingSchedulingImprovements": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_20260126", + "enable_features": [ + "FlingSchedulingImprovements" + ] + } + ] + } + ], "Floss": [ { "platforms": [ @@ -11159,6 +11918,25 @@ ] } ], + "FreezeSharedWorker": [ + { + "platforms": [ + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "FreezeSharedWorker" + ] + } + ] + } + ], "FullscreenSignInPromoUseDate": [ { "platforms": [ @@ -11314,6 +12092,58 @@ ] } ], + "GeminiAntiscamProtectionForMetricsCollection": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "GeminiAntiscamProtectionMinScamScoreLogPageContent": "0.5" + }, + "enable_features": [ + "GeminiAntiscamProtectionForMetricsCollection" + ] + } + ] + } + ], + "GeminiCopresence": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GeminiCopresence" + ] + } + ] + } + ], + "GeminiRefactoredFRE": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled_GeminiRefactoredFRE", + "enable_features": [ + "GeminiRefactoredFRE" + ] + } + ] + } + ], "Glic1PTools": [ { "platforms": [ @@ -11347,6 +12177,23 @@ ] } ], + "GlicActorObservationDelayExcludeAdFrameLoading": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicActorObservationDelayExcludeAdFrameLoading" + ] + } + ] + } + ], "GlicActorRolloutControl": [ { "platforms": [ @@ -11357,8 +12204,21 @@ ], "experiments": [ { - "name": "Enabled_Dogfood", + "name": "Default", "params": { + "glic-actor-eligible-tiers": "1,2", + "glic_actor_enterprise_pref_default": "disabled_by_default", + "glic_actor_policy_control_exemption": "false" + }, + "enable_features": [ + "GlicActor", + "GlicActorUi" + ] + }, + { + "name": "Enabled_Dogfood_And_Allowlist", + "params": { + "glic-actor-eligible-tiers": "0,1,2", "glic_actor_enterprise_pref_default": "enabled_by_default", "glic_actor_policy_control_exemption": "false" }, @@ -11370,6 +12230,23 @@ ] } ], + "GlicActorUiOverlayMagicCursor": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicActorUiOverlayMagicCursor" + ] + } + ] + } + ], "GlicActorUiTabIndicatorSpinnerIgnoreReducedMotion": [ { "platforms": [ @@ -11390,6 +12267,7 @@ "GlicButtonAltLabel": [ { "platforms": [ + "chromeos", "linux", "mac", "windows" @@ -11431,6 +12309,34 @@ ] } ], + "GlicButtonPressedState": [ + { + "platforms": [ + "linux", + "mac", + "windows", + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "glic-button-container-background": "false", + "glic-button-pressed-force-solid-icon": "true" + }, + "enable_features": [ + "GlicButtonPressedState" + ] + }, + { + "name": "Control", + "disable_features": [ + "GlicButtonPressedState" + ] + } + ] + } + ], "GlicClientResponsivenessCheckExtension": [ { "platforms": [ @@ -11497,9 +12403,9 @@ "GlicDaisyChainNewTabs", "GlicDefaultTabContextSetting", "GlicEnableMultiInstanceBasedOnTier", + "GlicLiveModeOnlyGlow", "GlicMultiInstance", - "GlicMultiTab", - "GlicMultitabUnderlines" + "GlicMultiTab" ] } ] @@ -11510,48 +12416,10 @@ "platforms": [ "linux", "mac", - "windows" + "windows", + "chromeos" ], "experiments": [ - { - "name": "Control_MultiArm", - "disable_features": [ - "GlicEntrypointVariations" - ] - }, - { - "name": "Arm2_LabelOnly", - "params": { - "glic-entrypoint-variations-alt-icon": "false", - "glic-entrypoint-variations-highlight-nudge": "false", - "glic-entrypoint-variations-show-label": "true" - }, - "enable_features": [ - "GlicEntrypointVariations" - ] - }, - { - "name": "Arm1_HighlightOnly", - "params": { - "glic-entrypoint-variations-alt-icon": "false", - "glic-entrypoint-variations-highlight-nudge": "true", - "glic-entrypoint-variations-show-label": "false" - }, - "enable_features": [ - "GlicEntrypointVariations" - ] - }, - { - "name": "Arm3_LabelAndHighlight", - "params": { - "glic-entrypoint-variations-alt-icon": "false", - "glic-entrypoint-variations-highlight-nudge": "true", - "glic-entrypoint-variations-show-label": "true" - }, - "enable_features": [ - "GlicEntrypointVariations" - ] - }, { "name": "Arm4_LabelAndIcon", "params": { @@ -11562,17 +12430,6 @@ "enable_features": [ "GlicEntrypointVariations" ] - }, - { - "name": "Arm5_LabelAndIconAndHighlight", - "params": { - "glic-entrypoint-variations-alt-icon": "true", - "glic-entrypoint-variations-highlight-nudge": "true", - "glic-entrypoint-variations-show-label": "true" - }, - "enable_features": [ - "GlicEntrypointVariations" - ] } ] } @@ -11678,23 +12535,6 @@ ] } ], - "GlicHandoffButtonHiddenClientControl": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GlicHandoffButtonHiddenClientControl" - ] - } - ] - } - ], "GlicMediaData": [ { "platforms": [ @@ -11751,14 +12591,14 @@ "platforms": [ "mac", "windows", - "linux" + "linux", + "chromeos" ], "experiments": [ { - "name": "Enabled_20251023", + "name": "Enabled_20260106", "enable_features": [ - "GlicShareImage", - "SvgFallBackToContainerSize" + "GlicShareImage" ] } ] @@ -11818,6 +12658,70 @@ ] } ], + "GlicTrustFirstOnboarding": [ + { + "platforms": [ + "mac", + "windows", + "linux" + ], + "experiments": [ + { + "name": "Enabled_TrustFirst_Arm1_StartChat", + "params": { + "arm": "1" + }, + "enable_features": [ + "GlicTrustFirstOnboarding" + ] + }, + { + "name": "Enabled_TrustFirst_Arm2_WelcomeScreen", + "params": { + "arm": "2" + }, + "enable_features": [ + "GlicTrustFirstOnboarding" + ] + } + ] + } + ], + "GlicTrustFirstOnboardingShortcutSnoozePromo": [ + { + "platforms": [ + "chromeos", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IPH_GlicTrustFirstOnboardingShortcutSnoozePromo" + ] + } + ] + } + ], + "GlicUseMainPartitionForUnifiedFre": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicUseMainPartitionForUnifiedFre" + ] + } + ] + } + ], "GlicUserStatusCheckDogfood": [ { "platforms": [ @@ -11866,10 +12770,6 @@ "experiments": [ { "name": "Enabled", - "params": { - "ZSSExtractAnnotatedPageContent": "true", - "ZSSExtractInnerText": "false" - }, "enable_features": [ "GlicZeroStateSuggestions" ] @@ -12001,6 +12901,25 @@ ] } ], + "GpuPersistentCache": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GpuPersistentCache" + ] + } + ] + } + ], "GpuYieldRasterization": [ { "platforms": [ @@ -12158,9 +13077,18 @@ ], "experiments": [ { - "name": "Experiment_NewBehaviorCountAllFrames", + "name": "Experiment_NewBehaviorCountAllScrolls", "params": { - "count_non_damaging_frames_towards_histogram_frame_count": "true" + "histogram_emission_policy": "emit_for_all_scrolls" + }, + "enable_features": [ + "HandleNonDamagingInputsInScrollJankV4Metric" + ] + }, + { + "name": "Experiment_NewBehaviorCountDamagingScrolls", + "params": { + "histogram_emission_policy": "emit_for_damaging_scrolls" }, "enable_features": [ "HandleNonDamagingInputsInScrollJankV4Metric" @@ -12379,6 +13307,42 @@ ] } ], + "HappinessTrackingSurveysForDesktopHistoryPageControl": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "HappinessTrackingSurveysForDesktopHistoryPageControl" + ] + } + ] + } + ], + "HappinessTrackingSurveysForDesktopHistoryPageExperiment": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "HappinessTrackingSurveysForDesktopHistoryPageExperiment" + ] + } + ] + } + ], "HappinessTrackingSurveysForHistoryEmbeddings": [ { "platforms": [ @@ -12723,6 +13687,24 @@ ] } ], + "HeliosBanana": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "ShowFRERow": "true" + }, + "enable_features": [ + "GeminiImageRemixTool" + ] + } + ] + } + ], "HeliosFullChatHistory": [ { "platforms": [ @@ -12754,21 +13736,6 @@ ] } ], - "HeliosOnboardingCards": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GeminiOnboardingCards" - ] - } - ] - } - ], "HeliosWithReaderMode": [ { "platforms": [ @@ -12805,21 +13772,6 @@ ] } ], - "HelpAppLauncherSearch": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "HelpAppLauncherSearch" - ] - } - ] - } - ], "HideDelegatedFrameHostMac": [ { "platforms": [ @@ -12927,21 +13879,6 @@ ] } ], - "HomeModulePrefRefactor": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "HomeModulePrefRefactor" - ] - } - ] - } - ], "Hotspot": [ { "platforms": [ @@ -13117,34 +14054,21 @@ ] } ], - "IOSAutoOpenRemoteTabGroupsSettings": [ + "IDBDatabaseExternalMemoryAccounting": [ { "platforms": [ - "ios" + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "IOSAutoOpenRemoteTabGroupsSettings" - ] - } - ] - } - ], - "IOSAutofillAcrossIframesV2": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillAcrossIframesIosThrottling", - "AutofillAcrossIframesIosTriggerFormExtraction", - "AutofillThrottleDocumentFormScanForceFirstScanIos", - "AutofillThrottleDocumentFormScanIos" + "IDBDatabaseExternalMemoryAccounting" ] } ] @@ -13195,16 +14119,19 @@ ] } ], - "IOSBottomMultilineOmnibox": [ + "IOSBestOfAppFRE": [ { "platforms": [ "ios" ], "experiments": [ { - "name": "EnabledMultilineTop", + "name": "EnabledWithInteractiveLensPromo_20260112", + "params": { + "variant": "1" + }, "enable_features": [ - "MultilineBrowserOmnibox" + "BestOfAppFRE" ] } ] @@ -13241,6 +14168,21 @@ ] } ], + "IOSCloseOtherTabs": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CloseOtherTabs" + ] + } + ] + } + ], "IOSConfirmationButtonSwapOrder": [ { "platforms": [ @@ -13256,6 +14198,21 @@ ] } ], + "IOSCustomFileUploadMenu": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IOSCustomFileUploadMenu" + ] + } + ] + } + ], "IOSDefaultBrowserOffCyclePromo": [ { "platforms": [ @@ -13436,6 +14393,21 @@ ] } ], + "IOSDownloadSanitizeFilename": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IOSDownloadSanitizeFilename" + ] + } + ] + } + ], "IOSEnablePasswordManagerTrustedVaultWidget": [ { "platforms": [ @@ -13451,6 +14423,21 @@ ] } ], + "IOSExpandedSetupList": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IOSExpandedSetupList" + ] + } + ] + } + ], "IOSExpandedTips": [ { "platforms": [ @@ -13654,6 +14641,21 @@ ] } ], + "IOSKeyboardAccessorySuggestionsCutOffLimit": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled_20260130", + "enable_features": [ + "IOSKeyboardAccessorySuggestionsCutOffLimit" + ] + } + ] + } + ], "IOSKeyboardAccessoryTwoBubble": [ { "platforms": [ @@ -13661,10 +14663,49 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWithCheckmarkIcon", + "params": { + "use_keyboard_icon": "false" + }, "enable_features": [ "IOSKeyboardAccessoryTwoBubble" ] + }, + { + "name": "Disabled", + "disable_features": [ + "IOSKeyboardAccessoryTwoBubble" + ] + }, + { + "name": "EnabledWithKeyboardIcon", + "params": { + "use_keyboard_icon": "true" + }, + "enable_features": [ + "IOSKeyboardAccessoryTwoBubble" + ] + } + ] + } + ], + "IOSKeyboardWillShowSuggestionRefresh": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Throttled", + "enable_features": [ + "AutofillThrottleOptionalSuggestionRefresh" + ] + }, + { + "name": "Suppressed", + "enable_features": [ + "SuppressKeyboardWillShowSuggestionRefresh" + ] } ] } @@ -13960,6 +15001,21 @@ ] } ], + "IOSPasskeyConditionalLoginWithShim": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Disabled", + "disable_features": [ + "IOSPasskeyConditionalLoginWithShim" + ] + } + ] + } + ], "IOSPasskeyModalLoginWithShim": [ { "platforms": [ @@ -14027,6 +15083,22 @@ ] } ], + "IOSReaderModeTriggerHeuristic": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableReadabilityHeuristic", + "EnableReaderModeOptimizationGuideEligibility" + ] + } + ] + } + ], "IOSReaderModeWithTranslateSettings": [ { "platforms": [ @@ -14042,36 +15114,6 @@ ] } ], - "IOSSafariImportWorkflow": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "disable_features": [ - "ImportPasswordsFromSafari" - ] - } - ] - } - ], - "IOSSaveToDriveClientFolder": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSSaveToDriveClientFolder" - ] - } - ] - } - ], "IOSSaveToPhotosImprovements": [ { "platforms": [ @@ -14102,21 +15144,6 @@ ] } ], - "IOSSeparateProfilesForManagedAccountsForceMigration": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SeparateProfilesForManagedAccountsForceMigration" - ] - } - ] - } - ], "IOSShowTabGroupInGridOnStart": [ { "platforms": [ @@ -14206,7 +15233,6 @@ "SyncedSetUpImpressionLimit": "1" }, "enable_features": [ - "EnableCrossDevicePrefTracker", "IOSSyncedSetUp" ] } @@ -14388,22 +15414,6 @@ ] } ], - "IOSYoutubeIncognitoBlingIncognitoExperience": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ChromeStartupParametersAsync", - "YoutubeIncognito" - ] - } - ] - } - ], "IdbSqliteBackingStoreInMemoryContexts": [ { "platforms": [ @@ -14514,29 +15524,12 @@ ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "ImmersiveReadAnything" - ] - }, - { - "name": "Enabled_Dogfood", - "enable_features": [ - "ImmersiveReadAnything" - ] - }, - { - "name": "Enabled_Dogfood_WithReadability", + "name": "Enabled_WithReadability_Dogfood", "enable_features": [ "ImmersiveReadAnything", + "ReadAnythingImagesViaAlgorithm", "ReadAnythingWithReadability" ] - }, - { - "name": "Disabled", - "disable_features": [ - "ImmersiveReadAnything" - ] } ] } @@ -14567,19 +15560,35 @@ ], "experiments": [ { - "name": "EnabledWithAll_20251024", + "name": "EnabledWithConfigureMinimalWildcardQuicHintsWithOriginFrame", "params": { - "AdditionalDelay": "100ms", - "DelayMainJobWithAvailableSpdySession": "false", - "QuicHandshakeTimeout": "15s", - "mtu": "1230", - "quic_options": "ORIG" + "quic_hints": "google.com,443,443,www.google.com,443,443", + "quic_options": "ORIG", + "wildcard_quic_hints": ".google.com,443,443,.gstatic.com,443,443,.youtube.com,443,443" }, "enable_features": [ - "AdditionalDelayMainJob", "ConfigureQuicHints", - "ExtendQuicHandshakeTimeout", - "LowerQuicMaxPacketSize", + "TryQuicByDefault" + ] + }, + { + "name": "EnabledDoubleForPreconnect", + "params": { + "QuicConnectionOptions": "ECCP,IW2X" + }, + "enable_features": [ + "SearchEnginePreconnect2" + ], + "disable_features": [ + "TryQuicByDefault" + ] + }, + { + "name": "EnabledWithIncreasedAmplificationFactor5", + "params": { + "quic_options": "5AFF" + }, + "enable_features": [ "TryQuicByDefault" ] } @@ -14853,7 +15862,8 @@ { "name": "Enabled", "enable_features": [ - "IsolatesPriorityUseProcessPriority" + "IsolatesPriorityUseProcessPriority", + "UnimportantFramesPriority" ] } ] @@ -14975,18 +15985,6 @@ "windows" ], "experiments": [ - { - "name": "EnabledDSEKeepAlive", - "enable_features": [ - "KeepDefaultSearchEngineRendererAlive", - "ProcessPerSiteSkipDevtoolsUsers", - "TrackEmptyRendererProcessesForReuse" - ], - "disable_features": [ - "ProcessPerSiteForDSE", - "ProcessPerSiteUpToMainFrameThreshold" - ] - }, { "name": "EnabledDSEKeepAliveWithProcessSharing", "params": { @@ -15213,46 +16211,6 @@ ] } ], - "LCPPFontURLPredictor": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "lcpp_font_prefetch_threshold": "1.1", - "lcpp_font_url_frequency_threshold": "0.1", - "lcpp_max_font_url_count_per_origin": "5", - "lcpp_max_font_url_length": "1024", - "lcpp_max_font_url_to_preload": "1" - }, - "enable_features": [ - "LCPPFontURLPredictor" - ] - }, - { - "name": "WithPrefetch", - "params": { - "lcpp_enable_font_prefetch": "true", - "lcpp_font_prefetch_threshold": "1.1", - "lcpp_font_url_frequency_threshold": "0.1", - "lcpp_max_font_url_count_per_origin": "5", - "lcpp_max_font_url_length": "1024", - "lcpp_max_font_url_to_preload": "1" - }, - "enable_features": [ - "LCPPFontURLPredictor" - ] - } - ] - } - ], "LCPPImageLoadingPriority": [ { "platforms": [ @@ -15361,6 +16319,35 @@ ] } ], + "LaunchOnStartup": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled_Foreground_OptOut", + "params": { + "mode": "foreground", + "trial_group": "opt_out" + }, + "enable_features": [ + "LaunchOnStartup" + ] + }, + { + "name": "Enabled_Foreground_OptIn", + "params": { + "mode": "foreground", + "trial_group": "opt_in" + }, + "enable_features": [ + "LaunchOnStartup" + ] + } + ] + } + ], "LazyBlinkTimezoneInit": [ { "platforms": [ @@ -15422,11 +16409,12 @@ { "platforms": [ "android", + "android_webview", "chromeos", + "ios", "linux", "mac", - "windows", - "android_webview" + "windows" ], "experiments": [ { @@ -15501,6 +16489,21 @@ ] } ], + "LinuxCupsIppPrintingBackend": [ + { + "platforms": [ + "linux" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CupsIppPrintingBackend" + ] + } + ] + } + ], "LiveCaptionExperimentalLanguages": [ { "platforms": [ @@ -15671,6 +16674,21 @@ ] } ], + "LockTopControlsOnLargeTabletsV2": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "LockTopControlsOnLargeTabletsV2" + ] + } + ] + } + ], "LofnPermissiveUsbPassthrough": [ { "platforms": [ @@ -15702,21 +16720,6 @@ ] } ], - "LogJavaScriptErrors": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LogJavaScriptErrors" - ] - } - ] - } - ], "LogOnDeviceMetricsOnStartup": [ { "platforms": [ @@ -15823,39 +16826,6 @@ ] } ], - "MahiEnabled": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "MahiEnabled", - "enable_features": [ - "Mahi", - "MediaAppPdfMahi" - ] - }, - { - "name": "ManagedDisabled", - "enable_features": [ - "Mahi", - "MediaAppPdfMahi" - ], - "disable_features": [ - "MahiManaged" - ] - }, - { - "name": "Disabled", - "disable_features": [ - "Mahi", - "MediaAppPdfMahi" - ] - } - ] - } - ], "MainIdleBypassSchedulerExperiment": [ { "platforms": [ @@ -15895,6 +16865,22 @@ ] } ], + "MaintainConnections": [ + { + "platforms": [ + "android", + "linux" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "MaintainConnectionsOnIpv6TempAddrChange" + ] + } + ] + } + ], "MakeAccountsAvailableInIdentityManager": [ { "platforms": [ @@ -16046,18 +17032,21 @@ "android" ], "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MediaIndicatorsAndroid" - ] - }, { "name": "EnabledWithEnhancedAudioResponsiveness", "enable_features": [ "EnableAudioMonitoringOnAndroid", "MediaIndicatorsAndroid" ] + }, + { + "name": "Enabled", + "enable_features": [ + "MediaIndicatorsAndroid" + ], + "disable_features": [ + "EnableAudioMonitoringOnAndroid" + ] } ] } @@ -16126,6 +17115,53 @@ ] } ], + "MemoryDumpProviderGroupBySequence": [ + { + "platforms": [ + "android_webview", + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "MemoryDumpProviderGroupBySequence" + ] + } + ] + } + ], + "MemoryReducerGcCount": [ + { + "platforms": [ + "android", + "android_weblayer", + "android_webview", + "chromeos", + "fuchsia", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "compaction_max_evacuated_bytes_mb_for_reduce_memory": "36", + "compaction_target_fragmentation_percent_for_reduce_memory": "20", + "memory_reducer_gc_count": "1" + }, + "enable_features": [ + "V8Flag_memory_reducer" + ] + } + ] + } + ], "MessagesPreinstall": [ { "platforms": [ @@ -16157,6 +17193,21 @@ ] } ], + "MetricsLogJobSchedulerUpload": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "MetricsLogJobSchedulerUpload" + ] + } + ] + } + ], "MetricsLogTrimming": [ { "platforms": [ @@ -16213,22 +17264,6 @@ ] } ], - "MigrateAccountPrefs": [ - { - "platforms": [ - "android", - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MigrateAccountPrefs" - ] - } - ] - } - ], "MigrateAlwaysTranslateLanguagesFix": [ { "platforms": [ @@ -16312,21 +17347,6 @@ ] } ], - "MobilePromoOnDesktopDataCollection": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MobilePromoOnDesktopRecordActiveDays" - ] - } - ] - } - ], "MobilePromoOnDesktopWithQRCode": [ { "platforms": [ @@ -16362,6 +17382,24 @@ ] } ], + "ModelBasedPageClassification": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "execution_rate": "1" + }, + "enable_features": [ + "ModelBasedPageClassification" + ] + } + ] + } + ], "MojoChannelAssociatedSendUsesRunOrPostTask": [ { "platforms": [ @@ -16494,6 +17532,21 @@ ] } ], + "NTPBackgroundImageCache": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableNTPBackgroundImageCache" + ] + } + ] + } + ], "NTPPopularSites": [ { "platforms": [ @@ -16636,7 +17689,7 @@ { "name": "Experiment", "params": { - "defer_until_next_step": "false" + "defer_until_next_step": "true" }, "enable_features": [ "NetworkQualityEstimatorAsyncNotifyStartTransaction" @@ -16762,6 +17815,23 @@ ] } ], + "NeuralResidualEchoEstimation": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_Fishfood", + "enable_features": [ + "WebRtcAudioNeuralResidualEchoEstimation" + ] + } + ] + } + ], "NewContentForCheckerboardedScrollsPerFrame": [ { "platforms": [ @@ -16785,6 +17855,47 @@ ] } ], + "NewOhttpGateway": [ + { + "platforms": [ + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "EnabledNew_20260127", + "params": { + "SafeBrowsingHashPrefixRealTimeLookupsKeyFetchUrl": "https://sbc.keys.ohttp.prod.via.google/.well-known/ohttp-gateway", + "SafeBrowsingHashPrefixRealTimeLookupsRelayUrl": "https://ohttp-relay-safebrowsing-chrome.google.fastly-edge.com/" + }, + "enable_features": [ + "SafeBrowsingHashPrefixRealTimeLookups" + ] + } + ] + } + ], + "NewTabPageCustomizationV2": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "show_logo_and_search_box": "true" + }, + "enable_features": [ + "NewTabPageCustomizationV2" + ] + } + ] + } + ], "NimbleCollisionAvoidanceV1": [ { "platforms": [ @@ -16833,6 +17944,40 @@ ] } ], + "NoSelectionMenuCaching": [ + { + "platforms": [ + "android", + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "NoSelectionMenuCaching" + ] + } + ] + } + ], + "NoSynchronizedScrolling": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Disabled", + "disable_features": [ + "SynchronizedScrolling" + ] + } + ] + } + ], "NoThrottlingVisibleAgent": [ { "platforms": [ @@ -16890,22 +18035,6 @@ ] } ], - "NotificationOneTapUnsubscribe": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NotificationOneTapUnsubscribe" - ], - "min_os_version": "9.0.0" - } - ] - } - ], "NotificationTelemetrySwb": [ { "platforms": [ @@ -17105,22 +18234,6 @@ ] } ], - "OAuthMultiloginStandardCookiesBinding": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableOAuthMultiloginStandardCookiesBinding", - "UseUnexportableKeyServiceInBrowserProcess" - ] - } - ] - } - ], "OcclusionCullingQuadSplitLimit": [ { "platforms": [ @@ -17211,7 +18324,7 @@ ], "experiments": [ { - "name": "Enabled", + "name": "MostlyLaunched", "enable_features": [ "OfferPinToTaskbarInSettings" ] @@ -17609,6 +18722,28 @@ ] } ], + "OnDeviceModelBackgroundDownload": [ + { + "platforms": [ + "windows", + "mac", + "linux" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "allowed_features": "PromptApi,WritingAssistanceApi,Summarize", + "on_device_model_free_space_mb_required_to_background_install": "50000" + }, + "enable_features": [ + "OnDeviceModelBackgroundDownload", + "ShowOnDeviceAiSettings" + ] + } + ] + } + ], "OnDeviceNotificationContentDetectionModelv2": [ { "platforms": [ @@ -17618,17 +18753,7 @@ { "name": "EnabledSyntheticOnly", "params": { - "ShowWarningsForSuspiciousNotificationsScoreThreshold": "70", - "ShowWarningsForSuspiciousNotificationsShouldSwapButtons": "false" - }, - "enable_features": [ - "ShowWarningsForSuspiciousNotifications" - ] - }, - { - "name": "EnabledRawAndSynthetic", - "params": { - "ShowWarningsForSuspiciousNotificationsScoreThreshold": "80", + "ShowWarningsForSuspiciousNotificationsScoreThreshold": "90", "ShowWarningsForSuspiciousNotificationsShouldSwapButtons": "false" }, "enable_features": [ @@ -17840,6 +18965,25 @@ ] } ], + "OrderScrollJankV4EventMetricsByArrivedInRendererCompositor": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "OrderScrollJankV4EventMetricsByArrivedInRendererCompositor" + ] + } + ] + } + ], "OriginMatcherNewCopyAssignment": [ { "platforms": [ @@ -18408,10 +19552,11 @@ }, "enable_features": [ "PartitionAllocSchedulerLoopQuarantine", - "PartitionAllocSchedulerLoopQuarantineTaskObserverForBrowserUIThread", + "PartitionAllocSchedulerLoopQuarantineTaskControlledPurge", "PartitionAllocWithAdvancedChecks" ], "disable_features": [ + "PartitionAllocSchedulerLoopQuarantineTaskObserverForBrowserUIThread", "ScreenAIPartitionAllocAdvancedChecksEnabled" ] } @@ -18516,6 +19661,23 @@ ] } ], + "PasswordUploadUiUpdate": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PasswordUploadUiUpdate" + ] + } + ] + } + ], "PasswordlessSetup": [ { "platforms": [ @@ -18568,6 +19730,25 @@ ] } ], + "PdfBufferedPaintManager": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PdfBufferedPaintManager" + ] + } + ] + } + ], "PdfGetSaveDataInBlocks": [ { "platforms": [ @@ -19197,6 +20378,37 @@ ] } ], + "PermissionsGestureGatedPrompts": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "MuteNotifications", + "params": { + "mute_notifications": "true" + }, + "enable_features": [ + "PermissionsGestureGatedPrompts" + ] + }, + { + "name": "MuteGeolocation", + "params": { + "mute_geolocation": "true" + }, + "enable_features": [ + "PermissionsGestureGatedPrompts" + ] + } + ] + } + ], "PersistentDefaultBrowserPromo": [ { "platforms": [ @@ -19519,6 +20731,23 @@ ] } ], + "PolicyDataCollectionEnabled": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PolicyDataCollectionEnabled" + ] + } + ] + } + ], "PompanoEnabled": [ { "platforms": [ @@ -19712,6 +20941,27 @@ ] } ], + "PrefetchMultipleActiveSetSizeLimitForBase": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_2", + "params": { + "prefetch_multiple_active_set_size_limit_for_base_value": "2" + }, + "enable_features": [ + "PrefetchMultipleActiveSetSizeLimitForBase" + ] + } + ] + } + ], "PrefetchNewTabPageTrigger": [ { "platforms": [ @@ -19748,26 +20998,6 @@ ] } ], - "PrefetchServiceWorkerNoFetchHandlerFix": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PrefetchServiceWorkerNoFetchHandlerFix" - ] - } - ] - } - ], "PrefixCookieHttp": [ { "platforms": [ @@ -19807,51 +21037,6 @@ ] } ], - "PreloadingEagerViewportHeuristics": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "50ms", - "params": { - "viewport_present_time": "50ms" - }, - "enable_features": [ - "PreloadingEagerViewportHeuristics" - ] - }, - { - "name": "200ms", - "params": { - "viewport_present_time": "200ms" - }, - "enable_features": [ - "PreloadingEagerViewportHeuristics" - ] - }, - { - "name": "400ms", - "params": { - "viewport_present_time": "400ms" - }, - "enable_features": [ - "PreloadingEagerViewportHeuristics" - ] - }, - { - "name": "1000ms", - "params": { - "viewport_present_time": "1000ms" - }, - "enable_features": [ - "PreloadingEagerViewportHeuristics" - ] - } - ] - } - ], "Prerender2EarlyDocumentLifecycleUpdateV2": [ { "platforms": [ @@ -20316,12 +21501,14 @@ ], "experiments": [ { - "name": "EnabledAll_20251127", + "name": "EnabledProtectedTabsAndroid_20260126", "enable_features": [ - "ChangeUnfocusedPriority", "ProcessRankPolicyAndroid", "ProtectedTabsAndroid", "SubframeImportance" + ], + "disable_features": [ + "ChangeUnfocusedPriority" ] } ] @@ -20351,8 +21538,8 @@ ], "experiments": [ { - "name": "Control", - "disable_features": [ + "name": "Enabled", + "enable_features": [ "ProfileCreationDeclineSigninCTAExperiment" ] } @@ -20413,6 +21600,25 @@ ] } ], + "ProfileManagerDeferAsyncLoading": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ProfileManagerDeferAsyncLoading" + ] + } + ] + } + ], "ProfileRemoteCommands": [ { "platforms": [ @@ -20466,7 +21672,7 @@ ] } ], - "ProgressiveAccessibility2": [ + "ProgressiveAccessibilityPhase2": [ { "platforms": [ "android", @@ -20479,11 +21685,8 @@ "experiments": [ { "name": "Enabled", - "params": { - "progressive_accessibility_mode": "disable_on_hide" - }, "enable_features": [ - "ProgressiveAccessibility" + "ProgressiveAccessibilityPhase2" ] } ] @@ -20875,6 +22078,31 @@ ] } ], + "ReadAnythingOmnibox": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IPH_ReadingModePageActionLabel", + "ReadAnythingOmniboxChip" + ] + }, + { + "name": "Disabled", + "disable_features": [ + "IPH_ReadingModePageActionLabel", + "ReadAnythingOmniboxChip" + ] + } + ] + } + ], "ReadAnythingReadAloudPhraseHighlighting": [ { "platforms": [ @@ -20923,6 +22151,23 @@ ] } ], + "RebindServiceBatchApi": [ + { + "platforms": [ + "android", + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "RebindServiceBatchApi", + "RebindingChildServiceConnectionController" + ] + } + ] + } + ], "RedWarningSurvey": [ { "platforms": [ @@ -20999,21 +22244,6 @@ ] } ], - "ReduceIPAddressChangeNotification": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ReduceIPAddressChangeNotification" - ] - } - ] - } - ], "ReduceIPCCombined": [ { "platforms": [ @@ -21249,21 +22479,6 @@ ] } ], - "RemoveSearchReadyOmnibox": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RemoveSearchReadyOmnibox" - ] - } - ] - } - ], "RenderArcNotificationsByChrome": [ { "platforms": [ @@ -21516,22 +22731,6 @@ ] } ], - "RestrictMainThreadBigCoreAffinity": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RestrictBigCoreThreadAffinity", - "RestrictMainThreadBigCoreAffinity" - ] - } - ] - } - ], "RestrictPendingInputEventTypeToBlockMainThread": [ { "platforms": [ @@ -21552,96 +22751,6 @@ ] } ], - "RestrictSpellingAndGrammarHighlights": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "ContentsAndEnablementAndSelection", - "params": { - "RestrictSpellingAndGrammarHighlightsChangedContents": "true", - "RestrictSpellingAndGrammarHighlightsChangedEnablement": "true", - "RestrictSpellingAndGrammarHighlightsChangedSelection": "true" - }, - "enable_features": [ - "RestrictSpellingAndGrammarHighlights" - ] - }, - { - "name": "ContentsAndEnablement", - "params": { - "RestrictSpellingAndGrammarHighlightsChangedContents": "true", - "RestrictSpellingAndGrammarHighlightsChangedEnablement": "true", - "RestrictSpellingAndGrammarHighlightsChangedSelection": "false" - }, - "enable_features": [ - "RestrictSpellingAndGrammarHighlights" - ] - }, - { - "name": "ContentsAndSelection", - "params": { - "RestrictSpellingAndGrammarHighlightsChangedContents": "true", - "RestrictSpellingAndGrammarHighlightsChangedEnablement": "false", - "RestrictSpellingAndGrammarHighlightsChangedSelection": "true" - }, - "enable_features": [ - "RestrictSpellingAndGrammarHighlights" - ] - }, - { - "name": "EnablementAndSelection", - "params": { - "RestrictSpellingAndGrammarHighlightsChangedContents": "false", - "RestrictSpellingAndGrammarHighlightsChangedEnablement": "true", - "RestrictSpellingAndGrammarHighlightsChangedSelection": "true" - }, - "enable_features": [ - "RestrictSpellingAndGrammarHighlights" - ] - }, - { - "name": "Contents", - "params": { - "RestrictSpellingAndGrammarHighlightsChangedContents": "true", - "RestrictSpellingAndGrammarHighlightsChangedEnablement": "false", - "RestrictSpellingAndGrammarHighlightsChangedSelection": "false" - }, - "enable_features": [ - "RestrictSpellingAndGrammarHighlights" - ] - }, - { - "name": "Enablement", - "params": { - "RestrictSpellingAndGrammarHighlightsChangedContents": "false", - "RestrictSpellingAndGrammarHighlightsChangedEnablement": "true", - "RestrictSpellingAndGrammarHighlightsChangedSelection": "false" - }, - "enable_features": [ - "RestrictSpellingAndGrammarHighlights" - ] - }, - { - "name": "Selection", - "params": { - "RestrictSpellingAndGrammarHighlightsChangedContents": "false", - "RestrictSpellingAndGrammarHighlightsChangedEnablement": "false", - "RestrictSpellingAndGrammarHighlightsChangedSelection": "true" - }, - "enable_features": [ - "RestrictSpellingAndGrammarHighlights" - ] - } - ] - } - ], "ResumeNavigationWithSpeculativeRFHProcessGone": [ { "platforms": [ @@ -21764,6 +22873,30 @@ ] } ], + "RuntimeOnMessageWebExtensionPolyfillSupport": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "RuntimeOnMessageWebExtensionPolyfillSupport" + ] + }, + { + "name": "Disabled", + "disable_features": [ + "RuntimeOnMessageWebExtensionPolyfillSupport" + ] + } + ] + } + ], "SafeBrowsingDailyPhishingReportsLimit": [ { "platforms": [ @@ -21916,7 +23049,10 @@ { "name": "Enabled", "params": { - "background-password-check-interval": "10d" + "background-password-check-interval": "10d", + "password-check-mon-weight": "5", + "password-check-sat-weight": "5", + "password-check-sun-weight": "5" }, "enable_features": [ "SafetyHub" @@ -23335,6 +24471,21 @@ ] } ], + "SearchInSettings": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SearchInSettings" + ] + } + ] + } + ], "SearchPrefetchHighPriorityPrefetches": [ { "platforms": [ @@ -23645,6 +24796,7 @@ { "platforms": [ "android", + "android_webview", "chromeos", "fuchsia", "linux", @@ -23673,9 +24825,13 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWithNetworkServiceDelegation", + "params": { + "off_main_thread": "network_service" + }, "enable_features": [ - "ServiceWorkerSyntheticResponse" + "ServiceWorkerSyntheticResponse", + "URLLoaderUseProvidedResponseBodyStream" ] } ] @@ -24020,21 +25176,6 @@ ] } ], - "ShowNewTabAnimationsAndroid": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ShowNewTabAnimations" - ] - } - ] - } - ], "ShowSuggestionsOnAutofocus": [ { "platforms": [ @@ -24378,6 +25519,25 @@ ] } ], + "SkipImageClassificationScoringForNonPageLoadTriggers": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SkipImageClassificationScoringForNonPageLoadTriggers" + ] + } + ] + } + ], "SkipModerateMemoryPressureLevelMac": [ { "platforms": [ @@ -24457,15 +25617,9 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledExcludeCacheResponses", "params": { - "chunk_size": "524288", - "enabled_for_cache_response": "true", - "max_chunks_per_request": "8", - "max_chunks_total": "32", - "memory_pressure_disable_level": "MODERATE", - "min_buffer_size": "32768", - "require_priority": "MEDIUM" + "enabled_for_cache_response": "false" }, "enable_features": [ "SlopBucket" @@ -24699,21 +25853,6 @@ ] } ], - "SpotlightNeverRetainIndex": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SpotlightNeverRetainIndex" - ] - } - ] - } - ], "SqlScopedTransactionWebDatabase": [ { "platforms": [ @@ -24813,7 +25952,7 @@ ] } ], - "StickyActivationTest": [ + "StickyActivationTest2": [ { "platforms": [ "android", @@ -24992,6 +26131,26 @@ ] } ], + "SuppressMemoryListeners": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled_Win_Cros", + "params": { + "suppress_memory_listeners_mask": "0000000200000200000000000000000000000000000000000", + "suppress_memory_monitor_mask": "00000000020200" + }, + "enable_features": [ + "SuppressMemoryListeners", + "SuppressMemoryMonitor" + ] + } + ] + } + ], "SuppressesNetworkActivitiesOnSlowNetwork": [ { "platforms": [ @@ -25018,23 +26177,6 @@ ] } ], - "SurfaceInputForAndroidVEA": [ - { - "platforms": [ - "android", - "android_webview", - "android_weblayer" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SurfaceInputForAndroidVEA" - ] - } - ] - } - ], "SwiftShaderDeprecation": [ { "platforms": [ @@ -25113,6 +26255,26 @@ ] } ], + "SyncDeviceInfoUseWallClockTimer": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncDeviceInfoUseWallClockTimer" + ] + } + ] + } + ], "SyncIncreaseNudgeDelayForSingleClient": [ { "platforms": [ @@ -25136,6 +26298,41 @@ ] } ], + "SyncShowBookmarksLimitExceededError": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncShowBookmarksLimitExceededError" + ] + } + ] + } + ], + "SyncTrustedVaultErrorMessageDuration": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncTrustedVaultErrorMessageDuration" + ] + } + ] + } + ], "SysPkJPandVKMv3": [ { "platforms": [ @@ -25251,7 +26448,14 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_VerifyMTCs", + "enable_features": [ + "TLSTrustAnchorIDs", + "VerifyMTCs" + ] + }, + { + "name": "Enabled_TrustAnchorIDs", "enable_features": [ "TLSTrustAnchorIDs" ] @@ -25285,21 +26489,6 @@ ] } ], - "TabFreezingUsesDiscard": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabFreezingUsesDiscard" - ] - } - ] - } - ], "TabGridEmptyThumbnail": [ { "platforms": [ @@ -25544,25 +26733,6 @@ ] } ], - "TaiyakiFreOnly": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_WithCurrentDefault", - "params": { - "choice_screen_surface": "fre_only" - }, - "enable_features": [ - "CurrentDseHighlightOnChoiceScreenSupport", - "Taiyaki" - ] - } - ] - } - ], "TaskManagerDesktopRefresh": [ { "platforms": [ @@ -25662,6 +26832,38 @@ ] } ], + "ThreadPoolForegroundBlockingTimeouts": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_Moderate", + "params": { + "BlockedWorkersPoll": "600ms", + "MayBlockThreshold": "500ms" + }, + "enable_features": [ + "ThreadPoolForegroundBlockingTimeouts" + ] + }, + { + "name": "Enabled_Aggressive", + "params": { + "BlockedWorkersPoll": "200ms", + "MayBlockThreshold": "100ms" + }, + "enable_features": [ + "ThreadPoolForegroundBlockingTimeouts" + ] + } + ] + } + ], "ThreeButtonPasswordSaveDialog": [ { "platforms": [ @@ -25682,7 +26884,7 @@ ] } ], - "ThrottleMainFrameTo60HzMacV2": [ + "ThrottleMainFrameTo60HzMacV3": [ { "platforms": [ "mac" @@ -25691,6 +26893,7 @@ { "name": "Enabled", "enable_features": [ + "HighFramerateRequestFromClient", "ThrottleMainFrameTo60Hz", "UrgentMainFrameForInput" ] @@ -25707,8 +26910,7 @@ { "name": "Enabled", "enable_features": [ - "ThrottleMainFrameTo60HzWebView", - "UrgentMainFrameForInput" + "ThrottleMainFrameTo60HzWebView" ] } ] @@ -26200,6 +27402,21 @@ "experiments": [ { "name": "Enabled", + "params": { + "ExplicitSigninForExtensions": "false" + }, + "enable_features": [ + "ForcedDiceMigration", + "IPH_SignInBenefits", + "ReplaceSyncPromosWithSignInPromos", + "SyncEnableContactInfoDataTypeForCustomPassphraseUsers" + ] + }, + { + "name": "EnabledWithExplicitSigninForExtensions", + "params": { + "ExplicitSigninForExtensions": "true" + }, "enable_features": [ "ForcedDiceMigration", "IPH_SignInBenefits", @@ -26316,25 +27533,6 @@ ] } ], - "UseCecEnabledFlag": [ - { - "platforms": [ - "android", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UseCECFlagInPolicyData" - ] - } - ] - } - ], "UseCompositorClockVSyncInterval": [ { "platforms": [ @@ -26446,7 +27644,7 @@ ] } ], - "UseHeuristicForWindowsFullScreenPowerPoint": [ + "UseHeuristicForFindingEditor": [ { "platforms": [ "windows" @@ -26455,7 +27653,7 @@ { "name": "Enabled", "enable_features": [ - "UseHeuristicForWindowsFullScreenPowerPoint" + "UseHeuristicForFindingEditor" ] } ] @@ -26588,6 +27786,21 @@ ] } ], + "UseSurfaceViewForThinWebView": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "UseSurfaceViewForThinWebView" + ] + } + ] + } + ], "UserBypassUI": [ { "platforms": [ @@ -26696,9 +27909,10 @@ ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "V8Flag_disable_eager_allocation_failures" + "name": "Disabled", + "disable_features": [ + "V8Flag_enable_allocation_failures_optimize_memory", + "V8Flag_enable_allocation_failures_optimize_memory_ignoring_priority" ] } ] @@ -26896,6 +28110,43 @@ ] } ], + "V8NoTrimDescriptorArray": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "NoTrimWithStack", + "enable_features": [ + "V8Flag_trim_descriptor_arrays_in_gc" + ], + "disable_features": [ + "V8Flag_trim_descriptor_arrays_in_gc_with_stack" + ] + }, + { + "name": "NoTrim", + "disable_features": [ + "V8Flag_trim_descriptor_arrays_in_gc", + "V8Flag_trim_descriptor_arrays_in_gc_with_stack" + ] + }, + { + "name": "Default", + "enable_features": [ + "V8Flag_trim_descriptor_arrays_in_gc", + "V8Flag_trim_descriptor_arrays_in_gc_with_stack" + ] + } + ] + } + ], "V8ParserAblation": [ { "platforms": [ @@ -27353,7 +28604,7 @@ ] } ], - "VizDirectCompositorThreadIpcWindows": [ + "VizWithIoMessagePump": [ { "platforms": [ "windows" @@ -27365,23 +28616,8 @@ "VizDirectCompositorThreadIpcFrameSinkManager" ], "disable_features": [ - "VizDirectCompositorThreadIpcNonRoot" - ] - }, - { - "name": "EnabledNonRoot", - "enable_features": [ - "VizDirectCompositorThreadIpcNonRoot" - ], - "disable_features": [ - "VizDirectCompositorThreadIpcFrameSinkManager" - ] - }, - { - "name": "Control", - "disable_features": [ - "VizDirectCompositorThreadIpcFrameSinkManager", - "VizDirectCompositorThreadIpcNonRoot" + "VizDirectCompositorThreadIpcNonRoot", + "VizWithIoMessagePump" ] } ] @@ -28027,6 +29263,24 @@ ] } ], + "WebRTC-Video-CalculatePsnr": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled,sampling_interval:1000ms" + } + ] + } + ], "WebRTC-Video-EnableRetransmitAllLayers": [ { "platforms": [ @@ -28372,51 +29626,6 @@ ] } ], - "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": [ @@ -28441,13 +29650,48 @@ { "name": "Enabled", "enable_features": [ - "WebViewEarlyPerfettoInit", "WebViewEarlyStartupTracing" ] } ] } ], + "WebViewEarlyTracingInit": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "BackgroundInit", + "enable_features": [ + "WebViewBackgroundTracingInit" + ] + }, + { + "name": "EarlyInit", + "enable_features": [ + "WebViewEarlyTracingInit" + ] + } + ] + } + ], + "WebViewEnableApiCallUserActions": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebViewEnableApiCallUserActions" + ] + } + ] + } + ], "WebViewFileSystemAccessDirectoryIterationBlocklistCheckReenable": [ { "platforms": [ @@ -28478,6 +29722,21 @@ ] } ], + "WebViewLatchedCookiePolicy": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled_20260116", + "enable_features": [ + "WebViewLatchedCookiePolicy" + ] + } + ] + } + ], "WebViewLazyFetchHandWritingIcon": [ { "platforms": [ @@ -28493,6 +29752,21 @@ ] } ], + "WebViewMetricsAsyncMetricLogging": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled_20260206", + "enable_features": [ + "AndroidMetricsAsyncMetricLogging" + ] + } + ] + } + ], "WebViewMoveWorkToProviderInit": [ { "platforms": [ @@ -28629,6 +29903,24 @@ ] } ], + "WebViewRendererKeepAlive": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "webview_renderer_keep_alive_duration": "30s" + }, + "enable_features": [ + "WebViewRendererKeepAlive" + ] + } + ] + } + ], "WebViewSafeAreaIncludesSystemBars": [ { "platforms": [ @@ -29045,21 +30337,6 @@ ] } ], - "WinSboxStrictHandleChecks": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WinSboxStrictHandleChecks" - ] - } - ] - } - ], "WindowsSystemTracing": [ { "platforms": [ @@ -29075,6 +30352,26 @@ ] } ], + "XMLParsingRustNonXslt": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "XMLRustForNonXslt" + ] + } + ] + } + ], "XSLTSpecialTrial": [ { "platforms": [ @@ -29214,36 +30511,6 @@ ] } ], - "ZeroCopyTabCaptureStudyMac": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled_20220901", - "enable_features": [ - "ZeroCopyTabCapture" - ] - } - ] - } - ], - "ZeroCopyTabCaptureStudyWin": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled_20230222", - "enable_features": [ - "ZeroCopyTabCapture" - ] - } - ] - } - ], "ZeroStateSuggestionsV2": [ { "platforms": [ @@ -29297,20 +30564,5 @@ } ] } - ], - "kIOSDownloadSanitizeFilename": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "kIOSDownloadSanitizeFilename" - ] - } - ] - } ] } 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 abdc88b6..8cbb8345 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 @@ -898,9 +898,9 @@ enum WebFeature { kAudioListenerSetPosition = 1366, kAudioListenerSetOrientation = 1367, kIntersectionObserver_Constructor = 1368, - kDurableStoragePersist = 1369, - kDurableStoragePersisted = 1370, - kDurableStorageEstimate = 1371, + kPersistentStoragePersist = 1369, + kPersistentStoragePersisted = 1370, + kPersistentStorageEstimate = 1371, kOBSOLETE_CSSDeepCombinatorAndShadow = 1375, kOpacityWithPreserve3DQuirk = 1376, kCSSSelectorPseudoReadOnly = 1377, @@ -1391,8 +1391,8 @@ enum WebFeature { kGamepadAxes = 1964, kGamepadButtons = 1965, kOBSOLETE_DispatchMouseEventOnDisabledFormControl = 1967, - kElementNameDOMInvalidHTMLParserValid = 1968, - kElementNameDOMValidHTMLParserInvalid = 1969, + kOBSOLETE_ElementNameDOMInvalidHTMLParserValid = 1968, + kOBSOLETE_ElementNameDOMValidHTMLParserInvalid = 1969, kGATTServerDisconnectedEvent = 1970, kAnchorClickDispatchForNonConnectedNode = 1971, kHTMLParseErrorNestedForm = 1972, @@ -1751,8 +1751,8 @@ enum WebFeature { kReadableStreamConstructor = 2399, kWritableStreamConstructor = 2400, kTransformStreamConstructor = 2401, - kNegativeBackgroundSize = 2402, - kNegativeMaskSize = 2403, + kOBSOLETE_NegativeBackgroundSize = 2402, + kOBSOLETE_NegativeMaskSize = 2403, kClientHintsRtt_DEPRECATED = 2404, kClientHintsDownlink_DEPRECATED = 2405, kClientHintsEct_DEPRECATED = 2406, @@ -4176,12 +4176,12 @@ enum WebFeature { kViewportSegments = 4882, kPrivateNetworkAccessWebSocketConnected = 4883, kWebAppTitle = 4884, - kDOMSubtreeModifiedEventFired = 4885, - kDOMNodeInsertedEventFired = 4886, - kDOMNodeRemovedEventFired = 4887, - kDOMNodeRemovedFromDocumentEventFired = 4888, - kDOMNodeInsertedIntoDocumentEventFired = 4889, - kDOMCharacterDataModifiedEventFired = 4890, + kOBSOLETE_DOMSubtreeModifiedEventFired = 4885, + kOBSOLETE_DOMNodeInsertedEventFired = 4886, + kOBSOLETE_DOMNodeRemovedEventFired = 4887, + kOBSOLETE_DOMNodeRemovedFromDocumentEventFired = 4888, + kOBSOLETE_DOMNodeInsertedIntoDocumentEventFired = 4889, + kOBSOLETE_DOMCharacterDataModifiedEventFired = 4890, kOBSOLETE_AnyMutationEventFired = 4891, kOBSOLETE_AnyMutationEventListenerAdded = 4892, kBadgeSetWithoutNotificationPermissionInBrowserWindow = 4893, @@ -4319,7 +4319,7 @@ enum WebFeature { kV8FileSystemObserver_Observe_Method = 5021, kV8FileSystemObserver_Disconnect_Method = 5022, kV8ML_CreateContext_Method = 5023, - kV8MLContext_Compute_Method = 5024, + kOBSOLETE_V8MLContext_Compute_Method = 5024, kV8MLContext_Dispatch_Method = 5025, kCSSMixins = 5026, kDurationFormat = 5027, @@ -4989,7 +4989,7 @@ enum WebFeature { kSmartCardEstablishContext = 5673, kSmartCardConnect = 5674, kNavigatorCPUPerformance = 5675, - kSelectionRemoveRangeNotFoundWouldThrow = 5676, + kOBSOLETE_SelectionRemoveRangeNotFoundWouldThrow = 5676, kNestedSvgCssSizingProperties = 5677, kCryptoAlgorithmChaCha20Poly1305 = 5678, kCryptoAlgorithmMlDsa44 = 5679, @@ -5089,6 +5089,19 @@ enum WebFeature { kStorageAccessAPI_requestStorageAccessFor_Method_AsyncSuccess = 5773, kWebAudioRenderSizeHint = 5774, kWebAudioRenderQuantumSize = 5775, + kImageElementTimingNotImageOrVideoNode = 5776, + kXSLPIInSVGImage = 5777, + kXSLPIInSVGStandaloneDoc = 5778, + kAudioContextAsyncStateTransitions = 5779, + kAudioContextAsyncTransitionToRunningStateRead = 5780, + kAudioContextAsyncTransitionToSuspendedStateRead = 5781, + kGetComputedStylePseudoElementWithoutColon = 5782, + kGeolocationRequestPositionWithPotentiallyUpToDateWatchedCachedPosition = 5783, + kAnchorCaseSensitiveMatch = 5784, + kAnchorCaseInsensitiveMatch = 5785, + kPrerenderActivationByFormSubmission = 5786, + kLinkRelModulePreloadStyle = 5787, + kAudioContextPlaybackStats = 5788, // 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 531cc01e..230fbc90 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 @@ -173,10 +173,6 @@ struct WebPreferences { // mixed content, and disables embedder notifications that such content was // requested (thereby preventing user override). bool strict_mixed_content_checking; - // Strict powerful feature restrictions block insecure usage of powerful - // features (like device orientation) that we haven't yet disabled for the web - // at large. - bool strict_powerful_feature_restrictions; // TODO(jww): Remove when WebView no longer needs this exception. bool allow_geolocation_on_insecure_origins; // Disallow user opt-in for blockable mixed content. diff --git a/tools/under-control/src/third_party/blink/renderer/core/animation/animation_trigger.idl b/tools/under-control/src/third_party/blink/renderer/core/animation/animation_trigger.idl index efc20247..87ca1ec8 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/animation/animation_trigger.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/animation/animation_trigger.idl @@ -10,10 +10,8 @@ enum AnimationTriggerBehavior { "pause", "reset", "play-once", - "play-alternate", "play-forwards", "play-backwards", - "play-pause", "replay", "none", }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger.idl b/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger.idl index 81e0a4c5..907bd19f 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger.idl @@ -9,10 +9,10 @@ RuntimeEnabled=TimelineTrigger ] interface TimelineTriggerRange { readonly attribute AnimationTimeline? timeline; - [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) rangeStart; - [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) rangeEnd; - [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) exitRangeStart; - [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) exitRangeEnd; + [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) activationRangeStart; + [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) activationRangeEnd; + [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) activeRangeStart; + [CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) activeRangeEnd; }; [ diff --git a/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger_options.idl b/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger_options.idl index df3fdbdd..3c4f19d7 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/animation/timeline_trigger_options.idl @@ -6,8 +6,8 @@ dictionary TimelineTriggerOptions { AnimationTimeline? timeline; - (DOMString or TimelineRangeOffset) rangeStart = "normal"; - (DOMString or TimelineRangeOffset) rangeEnd = "normal"; - (DOMString or TimelineRangeOffset) exitRangeStart = "auto"; - (DOMString or TimelineRangeOffset) exitRangeEnd = "auto"; + (DOMString or TimelineRangeOffset or undefined) activationRangeStart; + (DOMString or TimelineRangeOffset or undefined) activationRangeEnd; + (DOMString or TimelineRangeOffset or undefined) activeRangeStart; + (DOMString or TimelineRangeOffset or undefined) activeRangeEnd; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.idl b/tools/under-control/src/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.idl index d2028eda..029e09ae 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/css/cssom/style_property_map_read_only.idl @@ -7,10 +7,7 @@ Exposed=(Window,LayoutWorklet,PaintWorklet) ] interface StylePropertyMapReadOnly { iterable>; - /* TODO: This should return (undefined or CSSStyleValue), - but IDL doesn't have anything like that yet. See: - https://github.com/heycam/webidl/issues/60 */ - [RaisesException, CallWith=ExecutionContext] CSSStyleValue? get(CSSOMString property); + [RaisesException, CallWith=ExecutionContext] (undefined or CSSStyleValue) get(CSSOMString property); [RaisesException, CallWith=ExecutionContext] sequence getAll(CSSOMString property); [RaisesException, CallWith=ExecutionContext] boolean has(CSSOMString property); readonly attribute unsigned long size; 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 8123250b..3f1139da 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 @@ -58,8 +58,6 @@ bool MediaQueryParser::MediaQueryFeatureSet::IsAllowedWithoutValue( feature == media_feature_names::kGridMediaFeature || feature == media_feature_names::kHeightMediaFeature || feature == media_feature_names::kWidthMediaFeature || - feature == media_feature_names::kBlockSizeMediaFeature || - feature == media_feature_names::kInlineSizeMediaFeature || feature == media_feature_names::kDeviceHeightMediaFeature || feature == media_feature_names::kDeviceWidthMediaFeature || feature == media_feature_names::kOrientationMediaFeature || @@ -118,6 +116,24 @@ bool MediaQueryParser::MediaQueryFeatureSet::IsAllowedWithValue( !CSSVariableParser::IsValidVariableName(feature)); } +bool MediaQueryParser::MediaQueryFeatureSet::IsRangeTypeFeature( + const AtomicString& feature) const { + return feature == media_feature_names::kHeightMediaFeature || + feature == media_feature_names::kWidthMediaFeature || + feature == media_feature_names::kDeviceHeightMediaFeature || + feature == media_feature_names::kDeviceWidthMediaFeature || + feature == media_feature_names::kAspectRatioMediaFeature || + feature == media_feature_names::kDeviceAspectRatioMediaFeature || + feature == media_feature_names::kResolutionMediaFeature || + feature == media_feature_names::kColorMediaFeature || + feature == media_feature_names::kColorIndexMediaFeature || + feature == media_feature_names::kMonochromeMediaFeature || + feature == media_feature_names::kDevicePixelRatioMediaFeature || + feature == + media_feature_names::kHorizontalViewportSegmentsMediaFeature || + feature == media_feature_names::kVerticalViewportSegmentsMediaFeature; +} + MediaQuerySet* MediaQueryParser::ParseMediaQuerySet( StringView query_string, ExecutionContext* execution_context) { @@ -316,14 +332,10 @@ AtomicString MediaQueryParser::ConsumeRangeContextFeatureName( CSSParserTokenStream& stream, const FeatureSet& feature_set) { AtomicString name = ConsumeAllowedName(stream, feature_set); - if (name.IsNull()) { + if (!name.IsNull() && feature_set.IsRangeTypeFeature(name)) { return name; } - if (name.StartsWith("min-") || name.StartsWith("max-") || - name.StartsWith("--")) { - return g_null_atom; - } - return name; + return g_null_atom; } // = @@ -429,14 +441,9 @@ const ConditionalExpNode* MediaQueryParser::ConsumeFeature( 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; - } - // Otherwise : // // = diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/command_invoker_element.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/command_invoker_element.idl new file mode 100755 index 00000000..c330b3c6 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/command_invoker_element.idl @@ -0,0 +1,8 @@ +// Copyright 2026 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +interface mixin CommandInvokerElement { + [CEReactions, Reflect=commandfor] attribute Element? commandForElement; + [CEReactions] attribute DOMString command; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/element.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/element.idl index a981c602..000894f8 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/element.idl @@ -90,8 +90,8 @@ dictionary SetHTMLUnsafeOptions { [RaisesException, CEReactions] Element? insertAdjacentElement(DOMString where, Element element); [RaisesException] undefined insertAdjacentText(DOMString where, DOMString data); - // CSS Shadow Parts - // https://drafts.csswg.org/css-shadow-parts/#idl + // CSS Shadow + // https://drafts.csswg.org/css-shadow/#idl [SameObject, PerWorldBindings, PutForwards=value] readonly attribute DOMTokenList part; // Pointer Events @@ -119,8 +119,8 @@ dictionary SetHTMLUnsafeOptions { [RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLSafe,CEReactions] void setHTML(DOMString html, optional SetHTMLOptions options = {}); // https://github.com/whatwg/html/issues/2142 - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(); - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); // Declarative Shadow DOM getHTML() function. [Affects=Nothing, MeasureAs=ElementGetHTML, RaisesException] DOMString getHTML(optional GetHTMLOptions options = {}); diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root.idl index f237dd0e..8f5e1b0e 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root.idl @@ -59,8 +59,8 @@ interface ShadowRoot : DocumentFragment { [RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLSafe,CEReactions] void setHTML(DOMString html, optional SetHTMLOptions options = {}); // https://github.com/whatwg/html/issues/2142 - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(); - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); }; ShadowRoot includes DocumentOrShadowRoot; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/drag_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/drag_event.idl index 2114d803..5afcfb59 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/drag_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/drag_event.idl @@ -8,5 +8,5 @@ Exposed=Window ] interface DragEvent : MouseEvent { constructor(DOMString type, optional DragEventInit eventInitDict = {}); - [ImplementedAs=getDataTransfer] readonly attribute DataTransfer? dataTransfer; + readonly attribute DataTransfer? dataTransfer; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/drag_event_init.idl b/tools/under-control/src/third_party/blink/renderer/core/events/drag_event_init.idl index 7df1a925..44a1f68c 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/drag_event_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/drag_event_init.idl @@ -5,5 +5,5 @@ // https://html.spec.whatwg.org/C/#drageventinit dictionary DragEventInit : MouseEventInit { - [ImplementedAs=getDataTransfer] DataTransfer? dataTransfer = null; + DataTransfer? dataTransfer = null; }; 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 9dc137ae..696efa06 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 @@ -329,6 +329,8 @@ "timezonechange", "toggle", "tonechange", + "toolactivated", + "toolcancel", "touchcancel", "touchend", "touchmove", diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/web_mcp_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/web_mcp_event.idl new file mode 100755 index 00000000..feebf1e4 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/events/web_mcp_event.idl @@ -0,0 +1,15 @@ +// Copyright 2026 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, + RuntimeEnabled=WebMCP +] interface WebMCPEvent : Event { + constructor(DOMString type, optional WebMCPEventInit eventInitDict = {}); + readonly attribute DOMString toolName; +}; + +dictionary WebMCPEventInit : EventInit { + DOMString toolName = ""; +}; 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 8cd80908..0b91bcd4 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 @@ -190,6 +190,7 @@ #include "third_party/blink/renderer/platform/weborigin/known_ports.h" #include "third_party/blink/renderer/platform/widget/widget_base.h" #include "third_party/blink/renderer/platform/wtf/casting.h" +#include "third_party/blink/renderer/platform/wtf/text/string_to_number.h" #include "third_party/icu/source/common/unicode/uscript.h" #include "ui/base/ui_base_features.h" #include "ui/gfx/geometry/skia_conversions.h" @@ -361,50 +362,28 @@ void ApplyCommandLineToSettings(WebSettings* settings) { WebString network_quiet_timeout = WebString::FromUTF8( command_line.GetSwitchValueASCII(switches::kNetworkQuietTimeout)); if (!network_quiet_timeout.IsEmpty()) { - bool ok; - double network_quiet_timeout_seconds = - String(network_quiet_timeout).ToDouble(&ok); - if (ok) - settings->SetNetworkQuietTimeout(network_quiet_timeout_seconds); + auto network_quiet_timeout_seconds = + StringToDouble(String(network_quiet_timeout)); + if (network_quiet_timeout_seconds) { + settings->SetNetworkQuietTimeout(*network_quiet_timeout_seconds); + } } if (command_line.HasSwitch(switches::kBlinkSettings)) { - Vector blink_settings; String command_line_settings = command_line.GetSwitchValueASCII(switches::kBlinkSettings).c_str(); - command_line_settings.Split(",", blink_settings); - for (const String& setting : blink_settings) { + Vector blink_settings = + StringView(command_line_settings).SplitSkippingEmpty(','); + for (const StringView& setting : blink_settings) { wtf_size_t pos = setting.find('='); settings->SetFromStrings( - WebString(setting.Substring(0, pos)), - WebString(pos == kNotFound ? "" : setting.Substring(pos + 1))); + WebString(setting.substr(0, pos).ToString()), + WebString(pos == kNotFound ? "" + : setting.substr(pos + 1).ToString())); } } } -ui::mojom::blink::WindowOpenDisposition NavigationPolicyToDisposition( - NavigationPolicy policy) { - switch (policy) { - case kNavigationPolicyDownload: - return ui::mojom::blink::WindowOpenDisposition::SAVE_TO_DISK; - case kNavigationPolicyCurrentTab: - return ui::mojom::blink::WindowOpenDisposition::CURRENT_TAB; - case kNavigationPolicyNewBackgroundTab: - return ui::mojom::blink::WindowOpenDisposition::NEW_BACKGROUND_TAB; - case kNavigationPolicyNewForegroundTab: - return ui::mojom::blink::WindowOpenDisposition::NEW_FOREGROUND_TAB; - case kNavigationPolicyNewWindow: - return ui::mojom::blink::WindowOpenDisposition::NEW_WINDOW; - case kNavigationPolicyNewPopup: - return ui::mojom::blink::WindowOpenDisposition::NEW_POPUP; - case kNavigationPolicyPictureInPicture: - return ui::mojom::blink::WindowOpenDisposition::NEW_PICTURE_IN_PICTURE; - case kNavigationPolicyLinkPreview: - NOTREACHED(); - } - NOTREACHED() << "Unexpected NavigationPolicy"; -} - // Records the queuing duration for activation IPC. void RecordPrerenderActivationSignalDelay(const String& metric_suffix) { auto* task = base::TaskAnnotator::CurrentTaskForThread(); @@ -1711,8 +1690,6 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, settings->SetStrictMixedContentCheckingForPlugin( prefs.block_mixed_plugin_content); - settings->SetStrictPowerfulFeatureRestrictions( - prefs.strict_powerful_feature_restrictions); settings->SetAllowGeolocationOnInsecureOrigins( prefs.allow_geolocation_on_insecure_origins); settings->SetPasswordEchoEnabledPhysical( @@ -3038,7 +3015,9 @@ void WebViewImpl::UpdatePageDefinedViewportConstraints( Settings& page_settings = GetPage()->GetSettings(); GetPageScaleConstraintsSet().AdjustForAndroidWebViewQuirks( - description, default_min_width.IntValue(), + description, + default_min_width.IsFixed() ? static_cast(default_min_width.Pixels()) + : 0, SettingsImpl()->SupportDeprecatedTargetDensityDPI(), page_settings.GetWideViewportQuirkEnabled(), page_settings.GetUseWideViewport(), @@ -3170,30 +3149,6 @@ void WebViewImpl::TakeFocus(bool reverse) { } } -void WebViewImpl::Show(const LocalFrameToken& opener_frame_token, - NavigationPolicy policy, - const gfx::Rect& requested_rect, - const gfx::Rect& adjusted_rect, - bool opened_by_user_gesture) { - // This is only called on local main frames. - DCHECK(local_main_frame_host_remote_); - DCHECK(web_widget_); - web_widget_->SetPendingWindowRect(adjusted_rect); - const WebWindowFeatures& web_window_features = page_->GetWindowFeatures(); - mojom::blink::WindowFeaturesPtr window_features = - mojom::blink::WindowFeatures::New(); - window_features->bounds = requested_rect; - window_features->has_x = web_window_features.x_set; - window_features->has_y = web_window_features.y_set; - window_features->has_width = web_window_features.width_set; - window_features->has_height = web_window_features.height_set; - window_features->is_popup = web_window_features.is_popup; - local_main_frame_host_remote_->ShowCreatedWindow( - opener_frame_token, NavigationPolicyToDisposition(policy), - std::move(window_features), opened_by_user_gesture, - BindOnce(&WebViewImpl::DidShowCreatedWindow, Unretained(this))); -} - void WebViewImpl::DidShowCreatedWindow() { web_widget_->AckPendingWindowRect(); } @@ -3213,7 +3168,7 @@ void WebViewImpl::DidAccessInitialMainDocument() { #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) // TODO(https://crbug.com/40946306): Add timeouts to the callbacks and consider // queuing requests instead of rejecting them. -void WebViewImpl::Minimize(WindowShowStateChangeCallback callback) { +void WebViewImpl::Minimize(WindowingControlsChangeCallback callback) { DCHECK(local_main_frame_host_remote_); if (window_show_state_change_callback_.has_value()) { std::move(callback).Run(/*succeeded=*/false); @@ -3224,7 +3179,7 @@ void WebViewImpl::Minimize(WindowShowStateChangeCallback callback) { } } -void WebViewImpl::Maximize(WindowShowStateChangeCallback callback) { +void WebViewImpl::Maximize(WindowingControlsChangeCallback callback) { DCHECK(local_main_frame_host_remote_); if (window_show_state_change_callback_.has_value()) { std::move(callback).Run(/*succeeded=*/false); @@ -3235,7 +3190,7 @@ void WebViewImpl::Maximize(WindowShowStateChangeCallback callback) { } } -void WebViewImpl::Restore(WindowShowStateChangeCallback callback) { +void WebViewImpl::Restore(WindowingControlsChangeCallback callback) { DCHECK(local_main_frame_host_remote_); if (window_show_state_change_callback_.has_value()) { std::move(callback).Run(/*succeeded=*/false); @@ -3246,9 +3201,25 @@ void WebViewImpl::Restore(WindowShowStateChangeCallback callback) { } } -void WebViewImpl::SetResizable(bool resizable) { +void WebViewImpl::SetResizable(bool resizable, + WindowingControlsChangeCallback callback) { DCHECK(local_main_frame_host_remote_); - local_main_frame_host_remote_->SetResizable(resizable); + if (set_resizable_change_callback_.has_value()) { + // Reject the current request if there's already a pending request. + std::move(callback).Run(/*succeeded=*/false); + } else { + if (web_widget_->Resizable() == resizable) { + // The desired resizable property is already set. We still need to mark + // what resizable value has been requested by the page. + local_main_frame_host_remote_->SetResizable(resizable); + std::move(callback).Run(/*succeeded=*/true); + } else { + // We need to wait for the window resizable property to be changed by the + // operating system. + set_resizable_change_callback_.emplace(resizable, std::move(callback)); + local_main_frame_host_remote_->SetResizable(resizable); + } + } } void WebViewImpl::OnWindowShowStateChanged( @@ -3259,10 +3230,8 @@ void WebViewImpl::OnWindowShowStateChanged( return; } + CHECK_NE(old_state, new_state); using ui::mojom::blink::WindowShowState; - if (old_state == new_state) { - return; - } switch (new_state) { case WindowShowState::kDefault: case WindowShowState::kNormal: @@ -3285,6 +3254,19 @@ void WebViewImpl::OnWindowShowStateChanged( } } +void WebViewImpl::OnResizableChanged(bool new_resizable) { + if (!RuntimeEnabledFeatures:: + DesktopPWAsAdditionalWindowingControlsEnabled()) { + return; + } + + if (set_resizable_change_callback_.has_value() && + set_resizable_change_callback_->first == new_resizable) { + std::move(set_resizable_change_callback_->second).Run(/*succeeded=*/true); + set_resizable_change_callback_.reset(); + } +} + void WebViewImpl::WasMaximized() { HandleWindowShowStateChangeCallbackWith(WindowShowStateChangeType::kMaximize); } diff --git a/tools/under-control/src/third_party/blink/renderer/core/geolocation/geolocation_position.idl b/tools/under-control/src/third_party/blink/renderer/core/geolocation/geolocation_position.idl index 9a07d712..1db57f11 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/geolocation/geolocation_position.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/geolocation/geolocation_position.idl @@ -25,11 +25,17 @@ // https://www.w3.org/TR/geolocation-API/#position_interface +enum AccuracyMode { + "approximate", + "precise", +}; + [ Exposed=Window, ImplementedAs=Geoposition ] interface GeolocationPosition { readonly attribute GeolocationCoordinates coords; readonly attribute EpochTimeStamp timestamp; + [RuntimeEnabled=ApproximateGeolocationWebVisibleAPI] readonly attribute AccuracyMode accuracyMode; [CallWith=ScriptState] object toJSON(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_event.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_event.idl new file mode 100755 index 00000000..ef77c126 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_event.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. + +[ + Exposed=Window, + RuntimeEnabled=AutofillEvent +] interface AutofillEvent : Event { + [SameObject, SaveSameObject] readonly attribute FrozenArray autofillValues; + // Callback to request a refill of the form. Returns a promise that resolves + // when the refill is done. Null if refill is not supported. + [CallWith=ScriptState] readonly attribute AutofillRefillCallback? refill; +}; + diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_field_data.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_field_data.idl new file mode 100755 index 00000000..2ddb6645 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_field_data.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. + +dictionary AutofillFieldData { + Element field; + DOMString value; +}; + diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_refill_callback.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_refill_callback.idl new file mode 100755 index 00000000..d0d633f9 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/autofill_refill_callback.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. + +// Callback type for the autofill refill method that returns a Promise. +callback AutofillRefillCallback = Promise(); + diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_button_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_button_element.idl index b2fc9e70..68e732dd 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_button_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_button_element.idl @@ -37,10 +37,6 @@ [CEReactions, Reflect] attribute DOMString value; // FIXME: attribute HTMLMenuElement? menu; - // Command Invokers - [CEReactions, Reflect=commandfor] attribute Element? commandForElement; - [CEReactions] attribute DOMString command; - readonly attribute boolean willValidate; readonly attribute ValidityState validity; readonly attribute DOMString validationMessage; @@ -52,4 +48,5 @@ }; HTMLButtonElement includes PopoverTargetAttributes; +HTMLButtonElement includes CommandInvokerElement; HTMLButtonElement includes InterestInvokerElement; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event.idl index 683951ce..93be50e3 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event.idl @@ -9,4 +9,6 @@ ] interface SubmitEvent : Event { constructor(DOMString type, optional SubmitEventInit eventInitDict = {}); readonly attribute HTMLElement? submitter; + [RuntimeEnabled=WebMCP] readonly attribute boolean agentInvoked; + [CallWith=ScriptState, RaisesException, RuntimeEnabled=WebMCP] void respondWith(Promise agentResponse); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event_init.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event_init.idl index 8a101687..9557b2bb 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/submit_event_init.idl @@ -6,4 +6,5 @@ dictionary SubmitEventInit : EventInit { HTMLElement? submitter = null; + [RuntimeEnabled=WebMCP] boolean agentInvoked = false; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_federation_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_federation_element.idl new file mode 100755 index 00000000..6ffb4ead --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_federation_element.idl @@ -0,0 +1,10 @@ +// Copyright 2026 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Proposal https://github.com/fedidcg/federation-element +[ + Exposed=Window, + RuntimeEnabled=LoginElement +] interface HTMLFederationElement : HTMLElement { +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_login_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_login_element.idl new file mode 100755 index 00000000..e1f9cfcc --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_login_element.idl @@ -0,0 +1,9 @@ +// Copyright 2026 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, + RuntimeEnabled=LoginElement +] interface HTMLLoginElement : 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 index b467cb28..b479835e 100755 --- 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 @@ -16,10 +16,7 @@ // of a menu element, and its reflected IDL attribute exists here for // developer convenience. [CEReactions, Reflect] attribute boolean defaultChecked; - - // Command Invokers - [CEReactions, Reflect=commandfor] attribute Element? commandForElement; - [CEReactions] attribute DOMString command; }; +HTMLMenuItemElement includes CommandInvokerElement; HTMLMenuItemElement includes InterestInvokerElement; diff --git a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl index 45487bee..e1fe1c4a 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl @@ -22,5 +22,6 @@ [RuntimeEnabled=NavigateEventSourceElement] readonly attribute Element? sourceElement; [RaisesException] void intercept(optional NavigationInterceptOptions options = {}); + [RaisesException,RuntimeEnabled=NavigateEventDeferCrossDocumentCommit] void deferPageSwap(NavigationDeferPageSwapOptions options); [RaisesException] void scroll(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_defer_page_swap_controller.idl b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_defer_page_swap_controller.idl new file mode 100755 index 00000000..3068f5f5 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_defer_page_swap_controller.idl @@ -0,0 +1,15 @@ +// 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://wicg.github.io/navigation-api/ + +callback NavigationDeferPageSwapRestoreCallback = void (); + +[ + Exposed=Window, + RuntimeEnabled=NavigateEventDeferCrossDocumentCommit +] +interface NavigationDeferPageSwapController { + [RaisesException] undefined addRestoreCallback(NavigationDeferPageSwapRestoreCallback callback); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_defer_page_swap_options.idl b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_defer_page_swap_options.idl new file mode 100755 index 00000000..df873566 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_defer_page_swap_options.idl @@ -0,0 +1,10 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// / https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigation-api +callback NavigationDeferPageSwapHandler = Promise (NavigationDeferPageSwapController controller); + +dictionary NavigationDeferPageSwapOptions { + NavigationDeferPageSwapHandler handler; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/page/page_popup_controller.idl b/tools/under-control/src/third_party/blink/renderer/core/page/page_popup_controller.idl index 564548d2..9f553631 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/page/page_popup_controller.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/page/page_popup_controller.idl @@ -47,4 +47,5 @@ // positioned on other screens. void setWindowRect(long x, long y,long width, long height); void setMenuListOptionsBoundsInAXTree(sequence options_bounds, boolean children_updated); + void debugLog(DOMString message); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/scheduler/scheduler.idl b/tools/under-control/src/third_party/blink/renderer/core/scheduler/scheduler.idl index de2ca2c1..be005b33 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/scheduler/scheduler.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/scheduler/scheduler.idl @@ -20,5 +20,7 @@ enum AncestorStatus { ] interface Scheduler { [CallWith=ScriptState, MeasureAs=SchedulerPostTask, RaisesException] Promise postTask(SchedulerPostTaskCallback callback, optional SchedulerPostTaskOptions options = {}); [CallWith=ScriptState, MeasureAs=SchedulerYield, RaisesException] Promise yield(); - [RuntimeEnabled=UnexposedTaskIds, CallWith=Isolate, Exposed=Window] attribute unsigned long taskId; + // Test-only method for getting and setting data that is propagated asynchronously + // via Task Attribution. This is only meant as a means to test Task Attribution. + [RuntimeEnabled=UnexposedTaskIds, CallWith=Isolate, Exposed=Window] attribute unsigned long asyncData; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_testing.idl b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_testing.idl index 9094b8fc..9f7f5a3e 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_testing.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_testing.idl @@ -8,12 +8,18 @@ dictionary RegisteredTool { DOMString inputSchema; }; +dictionary ExecuteToolOptions { + AbortSignal signal; +}; + callback ToolsChangedCallback = void (); [ RuntimeEnabled=WebMCPTesting ] interface ModelContextTesting { sequence listTools(); - [CallWith=ScriptState] Promise executeTool(DOMString tool_name, DOMString input_arguments); + // Returns null when a navigation is triggered. + [CallWith=ScriptState] Promise executeTool(DOMString tool_name, DOMString input_arguments, optional ExecuteToolOptions options = {}); undefined registerToolsChangedCallback(ToolsChangedCallback callback); + [CallWith=ScriptState] Promise getCrossDocumentScriptToolResult(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/testing/internal_dictionary.idl b/tools/under-control/src/third_party/blink/renderer/core/testing/internal_dictionary.idl index cbe635e8..939bda6b 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/testing/internal_dictionary.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/testing/internal_dictionary.idl @@ -34,4 +34,5 @@ dictionary InternalDictionary { (InternalEnum or sequence) internalEnumOrInternalEnumSequenceMember; any anyMember; TestCallback callbackFunctionMember; + record recordMemberWithDefault = {}; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/testing/record_test.idl b/tools/under-control/src/third_party/blink/renderer/core/testing/record_test.idl index af64e670..72214415 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/testing/record_test.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/testing/record_test.idl @@ -6,6 +6,7 @@ typedef record RecordTypedef; interface RecordTest { void setStringLongRecord(RecordTypedef arg); + void setStringLongRecordWithDefault(optional RecordTypedef arg = {}); RecordTypedef getStringLongRecord(); void setNullableStringLongRecord(RecordTypedef? arg); diff --git a/tools/under-control/src/third_party/blink/renderer/core/timing/performance_long_animation_frame_timing.idl b/tools/under-control/src/third_party/blink/renderer/core/timing/performance_long_animation_frame_timing.idl index a3c74f47..603fd687 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/timing/performance_long_animation_frame_timing.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/timing/performance_long_animation_frame_timing.idl @@ -9,6 +9,7 @@ interface PerformanceLongAnimationFrameTiming : PerformanceEntry { readonly attribute DOMHighResTimeStamp styleAndLayoutStart; readonly attribute DOMHighResTimeStamp firstUIEventTimestamp; readonly attribute DOMHighResTimeStamp blockingDuration; + [RuntimeEnabled=LongAnimationFrameStyleDuration] readonly attribute DOMHighResTimeStamp styleDuration; [SameObject, SaveSameObject] readonly attribute FrozenArray scripts; [CallWith=ScriptState, ImplementedAs=toJSONForBinding] object toJSON(); diff --git a/tools/under-control/src/third_party/blink/renderer/core/timing/performance_script_timing.idl b/tools/under-control/src/third_party/blink/renderer/core/timing/performance_script_timing.idl index 234abe7d..a02c932b 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/timing/performance_script_timing.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/timing/performance_script_timing.idl @@ -24,6 +24,7 @@ interface PerformanceScriptTiming : PerformanceEntry { readonly attribute ScriptWindowAttribution windowAttribution; readonly attribute DOMHighResTimeStamp executionStart; readonly attribute DOMHighResTimeStamp forcedStyleAndLayoutDuration; + [RuntimeEnabled=LongAnimationFrameStyleDuration] readonly attribute DOMHighResTimeStamp forcedStyleDuration; readonly attribute DOMHighResTimeStamp pauseDuration; readonly attribute Window? window; readonly attribute DOMString sourceURL; diff --git a/tools/under-control/src/third_party/blink/renderer/core/view_transition/scoped_view_transition.idl b/tools/under-control/src/third_party/blink/renderer/core/view_transition/scoped_view_transition.idl index aee7466a..1dc963cd 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/view_transition/scoped_view_transition.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/view_transition/scoped_view_transition.idl @@ -6,7 +6,9 @@ ImplementedAs=ScopedViewTransition, RuntimeEnabled=ScopedViewTransitions ] partial interface Element { - [MeasureAs="WebDXFeature::kDRAFT_ScopedViewTransitions", CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(); - [MeasureAs="WebDXFeature::kDRAFT_ScopedViewTransitions", CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(ViewTransitionCallback update); - [MeasureAs="WebDXFeature::kDRAFT_ScopedViewTransitions", CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(ViewTransitionOptions opts); + [MeasureAs="WebDXFeature::kViewTransitionsElementScoped", CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(); + [MeasureAs="WebDXFeature::kViewTransitionsElementScoped", CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(ViewTransitionCallback update); + [MeasureAs="WebDXFeature::kViewTransitionsElementScoped", CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(ViewTransitionOptions opts); + + [MeasureAs="WebDXFeature::kViewTransitionsElementScoped"] readonly attribute ViewTransition? activeViewTransition; }; 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 a75e1c02..cf843dba 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 @@ -30,7 +30,7 @@ dictionary LanguageModelMessageContent { }; // LINT.IfChange -enum LanguageModelMessageRole { "system", "user", "assistant", "tool-call", "tool-response" }; +enum LanguageModelMessageRole { "system", "user", "assistant" }; // LINT.ThenChange(//third_party/blink/renderer/modules/ai/ai_metrics.h:LanguageModelInputRole) // LINT.IfChange @@ -65,24 +65,57 @@ dictionary LanguageModelToolResultContent { }; // Represents a tool call requested by the language model. -dictionary LanguageModelToolCall { - // Unique identifier for this tool call within the session. +[ + Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), + RuntimeEnabled=AIPromptAPI, + SecureContext +] +interface LanguageModelToolCall { + [RaisesException] constructor(LanguageModelToolCallInit init); + readonly attribute DOMString callID; + readonly attribute DOMString name; + [CallWith=ScriptState] readonly attribute object? arguments; +}; + +dictionary LanguageModelToolCallInit { required DOMString callID; - // The tool name to be invoked. required DOMString name; - // Object fitting the JSON input schema of the tool's declaration. object arguments; }; // Successful tool execution result. -dictionary LanguageModelToolSuccess { +[ + Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), + RuntimeEnabled=AIPromptAPI, + SecureContext +] +interface LanguageModelToolSuccess { + [RaisesException] constructor(LanguageModelToolSuccessInit init); + readonly attribute DOMString callID; + readonly attribute DOMString name; + readonly attribute FrozenArray result; +}; + +dictionary LanguageModelToolSuccessInit { required DOMString callID; required DOMString name; required sequence result; }; // Failed tool execution result. -dictionary LanguageModelToolError { +[ + Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), + RuntimeEnabled=AIPromptAPI, + SecureContext +] +interface LanguageModelToolError { + [RaisesException] constructor(LanguageModelToolErrorInit init); + readonly attribute DOMString callID; + readonly attribute DOMString name; + readonly attribute DOMString errorMessage; +}; + +dictionary LanguageModelToolErrorInit { required DOMString callID; required DOMString name; required DOMString errorMessage; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_creation_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_creation_options.idl index 6598e8e4..22681289 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_creation_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_creation_options.idl @@ -12,7 +12,6 @@ dictionary CredentialCreationOptions { PasswordCredentialInit password; FederatedCredentialInit federated; PublicKeyCredentialCreationOptions publicKey; - [RuntimeEnabled=WebAuthenticationConditionalCreate] CredentialMediationRequirement mediation = "optional"; [RuntimeEnabled=WebIdentityDigitalCredentialsCreation] DigitalCredentialCreationOptions digital; AbortSignal signal; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_request_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_request_options.idl index d36d4344..73242ac0 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_request_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential_request_options.idl @@ -8,13 +8,13 @@ enum CredentialMediationRequirement { "silent", "optional", "required", - "conditional", - "immediate" + "conditional" }; enum CredentialUiModeRequirement { "active", - "immediate" + "immediate", + "passive" }; dictionary CredentialRequestOptions { @@ -23,7 +23,7 @@ dictionary CredentialRequestOptions { boolean password = false; CredentialMediationRequirement mediation = "optional"; - [RuntimeEnabled=WebAuthenticationUiMode] CredentialUiModeRequirement uiMode = "active"; + [RuntimeEnabled=WebAuthenticationImmediateGet] CredentialUiModeRequirement uiMode = "active"; [RuntimeEnabled=WebOTP] OTPCredentialRequestOptions otp; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_provider.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_provider.idl index 4020bea5..df0dde43 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_provider.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_provider.idl @@ -11,6 +11,7 @@ dictionary IdentityUserInfo { dictionary IdentityResolveOptions { USVString accountId; + [RuntimeEnabled=FedCmNavigationInterception] boolean redirect = false; }; dictionary IdentityProviderToken { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl index 16c775be..ae87822a 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl @@ -21,6 +21,6 @@ dictionary TCPServerSocketOpenInfo { // A readable stream of TCPSocket objects. required ReadableStream readable; - DOMString localAddress; - unsigned short localPort; + required DOMString localAddress; + required unsigned short localPort; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/quota/storage_manager.idl b/tools/under-control/src/third_party/blink/renderer/modules/quota/storage_manager.idl index 11ebb9c2..3fee96c3 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/quota/storage_manager.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/quota/storage_manager.idl @@ -8,8 +8,8 @@ SecureContext, Exposed=(Window,Worker) ] interface StorageManager { - [CallWith=ScriptState, MeasureAs=DurableStoragePersisted, RaisesException] Promise persisted(); - [Exposed=Window, CallWith=ScriptState, MeasureAs=DurableStoragePersist, RaisesException] Promise persist(); + [CallWith=ScriptState, MeasureAs=PersistentStoragePersisted, RaisesException] Promise persisted(); + [Exposed=Window, CallWith=ScriptState, MeasureAs=PersistentStoragePersist, RaisesException] Promise persist(); - [CallWith=ScriptState, MeasureAs=DurableStorageEstimate, RaisesException] Promise estimate(); + [CallWith=ScriptState, MeasureAs=PersistentStorageEstimate, RaisesException] Promise estimate(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/subapps/navigator_sub_apps.idl b/tools/under-control/src/third_party/blink/renderer/modules/subapps/navigator_sub_apps.idl index 333fc759..167fb623 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/subapps/navigator_sub_apps.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/subapps/navigator_sub_apps.idl @@ -8,5 +8,5 @@ ImplementedAs=SubApps, IsolatedContext ] partial interface Navigator { - [SameObject, RuntimeEnabled=DesktopPWAsSubApps] readonly attribute SubApps subApps; + [SameObject, RuntimeEnabled=SubApps] readonly attribute SubApps subApps; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/subapps/sub_apps.idl b/tools/under-control/src/third_party/blink/renderer/modules/subapps/sub_apps.idl index d3818e30..4e5fc4fd 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/subapps/sub_apps.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/subapps/sub_apps.idl @@ -13,7 +13,7 @@ enum SubAppsResultCode { [ Exposed=Window, SecureContext, - RuntimeEnabled=DesktopPWAsSubApps, + RuntimeEnabled=SubApps, IsolatedContext ] interface SubApps { [CallWith=ScriptState, RaisesException] Promise> add(record sub_apps_to_add); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/web_install/navigator_web_install.idl b/tools/under-control/src/third_party/blink/renderer/modules/web_install/navigator_web_install.idl index 113131c6..7961d643 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/web_install/navigator_web_install.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/web_install/navigator_web_install.idl @@ -8,7 +8,7 @@ RuntimeEnabled=WebAppInstallation, ImplementedAs=NavigatorWebInstall ] partial interface Navigator { - [CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kDRAFT_WebInstallAPI"] Promise install(); - [CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kDRAFT_WebInstallAPI"] Promise install(USVString install_url); - [CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kDRAFT_WebInstallAPI"] Promise install(USVString install_url, USVString manifest_id); -}; \ No newline at end of file + [CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kNavigatorInstall"] Promise install(); + [CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kNavigatorInstall"] Promise install(USVString install_url); + [CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kNavigatorInstall"] Promise install(USVString install_url, USVString manifest_id); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webaudio/audio_context.idl b/tools/under-control/src/third_party/blink/renderer/modules/webaudio/audio_context.idl index bd27efb2..f052bc52 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webaudio/audio_context.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webaudio/audio_context.idl @@ -53,7 +53,8 @@ dictionary AudioSinkOptions { [RaisesException, MeasureAs=AudioContextCreateMediaElementSource] MediaElementAudioSourceNode createMediaElementSource(HTMLMediaElement mediaElement); [RaisesException, MeasureAs=AudioContextCreateMediaStreamSource] MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream); [RaisesException, MeasureAs=AudioContextCreateMediaStreamDestination] MediaStreamAudioDestinationNode createMediaStreamDestination(); - - // https://wicg.github.io/web_audio_playout + // https://webaudio.github.io/web-audio-api/#AudioPlaybackStats + [RuntimeEnabled=AudioContextPlaybackStats, MeasureAs=AudioContextPlaybackStats, SameObject] readonly attribute AudioPlaybackStats playbackStats; + // This interface will be removed after M147. [RuntimeEnabled=AudioContextPlayoutStats, MeasureAs=AudioContextPlayoutStats, SameObject] readonly attribute AudioPlayoutStats playoutStats; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webaudio/audio_playback_stats.idl b/tools/under-control/src/third_party/blink/renderer/modules/webaudio/audio_playback_stats.idl new file mode 100755 index 00000000..f504c1ec --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webaudio/audio_playback_stats.idl @@ -0,0 +1,15 @@ +// Copyright 2026 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +[RuntimeEnabled=AudioContextPlaybackStats, Exposed=Window, SecureContext +] interface AudioPlaybackStats { + [CallWith=ScriptState] readonly attribute double underrunDuration; + [CallWith=ScriptState] readonly attribute unsigned long underrunEvents; + [CallWith=ScriptState] readonly attribute double totalDuration; + [CallWith=ScriptState] readonly attribute double averageLatency; + [CallWith=ScriptState] readonly attribute double minimumLatency; + [CallWith=ScriptState] readonly attribute double maximumLatency; + [CallWith=ScriptState] void resetLatency(); + [CallWith=ScriptState] object toJSON(); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_layer_init.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_layer_init.idl index 622cc6f8..c0fe3291 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_layer_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_layer_init.idl @@ -8,6 +8,7 @@ dictionary XRProjectionLayerInit { GLenum colorFormat = 0x1908; // RGBA GLenum depthFormat = 0x1902; // DEPTH_COMPONENT double scaleFactor = 1.0; + boolean clearOnAccess = true; }; // https://www.w3.org/TR/webxrlayers-1/#xrlayerinittype diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_session.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_session.idl index 540dbf9d..97b1caab 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_session.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_session.idl @@ -54,6 +54,7 @@ enum XRReflectionFormat { readonly attribute XRReflectionFormat preferredReflectionFormat; [RuntimeEnabled=WebXREnabledFeatures] readonly attribute FrozenArray enabledFeatures; [RuntimeEnabled=WebXRSpecParity] readonly attribute boolean isSystemKeyboardSupported; + [RuntimeEnabled=WebXRLayers] readonly attribute unsigned short maxRenderLayers; attribute EventHandler onend; attribute EventHandler onselect; 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 fc3eb841..d6016c8f 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 @@ -487,6 +487,10 @@ name: "AlignZoomToCenter", status: "stable", }, + { + name: "AllImagesPaintedSentToElementTiming", + status: "experimental", + }, { name: "AllowContentInitiatedDataUrlNavigations", base_feature: "none", @@ -559,7 +563,7 @@ { // https://drafts.csswg.org/web-animations-2/#triggers name: "AnimationTrigger", - status: "experimental", + status: "stable", implied_by: ["EventTrigger", "TimelineTrigger"], }, { @@ -594,6 +598,10 @@ // base::Feature in the browser process. base_feature: "none", }, + { + name: "ApproximateGeolocationWebVisibleAPI", + depends_on: ["ApproximateGeolocationPermission"], + }, { name: "AppTitle", status: "experimental", @@ -630,6 +638,18 @@ base_feature: "none", public: true, }, + { + // The transition to "running" after construction happens asynchronously. + // Same for the transition to "suspended" after suspend() is called. + // https://webaudio.github.io/web-audio-api/#AudioContext-constructors + name: "AudioContextAsyncStateTransitions", + status: "experimental", + }, + { + // AudioContext.playbackStats interface. + name: "AudioContextPlaybackStats", + status: "stable", + }, { // AudioContext.playoutStats interface. // https://chromestatus.com/feature/5172818344148992 @@ -657,6 +677,11 @@ base_feature: "none", public: true, }, + { + // https://drafts.csswg.org/css-scroll-snap + name: "AuthorSpecifiedLayoutScrollSnapBehavior", + status: "stable", + }, { name: "AutoDarkMode", base_feature: "none", @@ -671,6 +696,7 @@ { name: "AutofillEvent", status: "experimental", + public: true, }, { name: "AutomationControlled", @@ -686,15 +712,16 @@ name: "AvoidForcedLayoutOnInvisibleDocumentClose", status: "test", }, - { // 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", + { + // Fix for https://crbug.com/471876082 + name: "AvoidMergingStyledSpanWithSiblings", status: "stable", }, { - // Killswitch for https://crbug.com/40947850. - name: "BackdropRootForClipPathWithBackdropFilter", + // 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, enforces new interoperable semantics for 3D transforms. @@ -916,21 +943,6 @@ name: "CanvasHDR", status: "experimental", }, - { - // crbug.com/389726691. - name: "CanvasTextMemoryPressure", - status: "stable", - }, - { - // crbug.com/450531794. - name: "CanvasTextSwitchFrameOnFinalize", - status: "stable", - }, - { - // crbug.com/450531794. - name: "CanvasTextTexImage2DFix", - status: "stable", - }, { // Canvas2D API for specifying HDR tone mapping behavior. // https:/crbug.com/448552449, https://github.com/whatwg/html/issues/11424 @@ -1016,6 +1028,13 @@ name: "ClearTargetOnlyIfInShadowTree", status: "stable", }, + { + // If the link has tabindex, the status bubble should not persist after + // mouse out. + // This was added in M146 and can be removed after M148. + name: "ClickFocusDoesntPersistStatusBubble", + status: "stable", + }, { // Allows top-level sites to restrict collection of high-entropy UA client // hints (from 3Ps, or itself) via the getHighEntropyValues API. @@ -1080,6 +1099,15 @@ name: "CollectWidthAndHeightAsStylesForNestedSvg", status: "stable", }, + { + // Allows to accept any valid CSS color value + // (named colors, rgb(), hsl(), system colors, etc.) in addition to + // the legacy 7-character hex format (#rrggbb). + // https://crbug.com/40226268 + // This was added in M146 and can be removed after M148. + name: "ColorInputAcceptsCSSColors", + status: "stable", + }, // Enable the display-p3-linear color space in CSS. // https://chromestatus.com/feature/5162372125818880 { @@ -1304,12 +1332,6 @@ name: "CSSAltCounter", status: "stable", }, - { - // An update of anchor positioning (primarily how scrolling affects - // layout, but includes other inter-connected changes). - name: "CSSAnchorUpdate", - status: "stable", - }, { // Let transforms affect anchor() and anchor-size() functions. name: "CSSAnchorWithTransforms", @@ -1369,10 +1391,6 @@ name: "CSSChUnitSpecCompliantFallback", status: "stable", }, - { - name: "CSSColorContrast", - status: "experimental", - }, { name: "CSSColorTypedOM", status: "experimental", @@ -1393,6 +1411,11 @@ name: "CSSContainerStyleQueriesRange", status: "stable", }, + { + // https://drafts.csswg.org/css-color-5/#contrast-color + name: "CSSContrastColor", + status: "experimental", + }, { // https://drafts.csswg.org/css-borders-4/#corner-shaping name: "CSSCornersShorthand", @@ -1439,6 +1462,10 @@ name: "CssFitWidthText", status: "experimental", }, + { + // crbug.com/417306102 + name: "CssFitWidthTextReshaping", + }, { name: "CSSFontSizeAdjust", status: "stable", @@ -1476,6 +1503,11 @@ name: "CSSIdentFunction", status: "test", }, + { + // https://chromestatus.com/feature/5078177326170112 + name: "CSSImageAnimation", + status: "test", + }, { // The inherit() function works like var(), except that it grabs // the computed value of the specified property from the parent style @@ -1485,27 +1517,6 @@ name: "CSSInheritFunction", status: "experimental", }, - { - // CSS if() function for custom properties. Flag is used only for media - // queries support in conditions. - // https://drafts.csswg.org/css-values-5/#if-notation. - name: "CSSInlineIfForMediaQueries", - status: "stable", - }, - { - // CSS if() function for custom properties. Flag is used only for style - // queries support in conditions. - // https://drafts.csswg.org/css-values-5/#if-notation. - name: "CSSInlineIfForStyleQueries", - status: "stable", - }, - { - // CSS if() function for custom properties. Flag is used only for supports - // queries support in conditions. - // https://drafts.csswg.org/css-values-5/#if-notation. - name: "CSSInlineIfForSupportsQueries", - status: "stable", - }, { // https://chromestatus.com/feature/6289894144212992 name: "CSSKeyframesRuleLength", @@ -1575,10 +1586,6 @@ // See crbug.com/1485525. name: "CSSParserIgnoreCharsetForURLs", }, - { - name: "CSSPositionAnchorNone", - status: "stable", - }, { name: "CSSPositionStickyStaticScrollPosition", status: "test", @@ -1733,6 +1740,15 @@ name: "CSSSupportsForImportRules", status: "stable", }, + { + // https://chromestatus.com/feature/5153932394102784 + name: "CSSSupportsNamedFeatureFunction", + // TODO(https://crbug.com/353715317): Before shipping this feature, we + // should decide whether to remove the "align-content-on-display-block" + // named feature (which is so far the only CSSWG-resolved feature name) + // since it's probably too late for it to be useful. + status: "experimental", + }, { // Allows the CSS "accent-color" property to support the system accent color as the default option. name: "CSSSystemAccentColor", @@ -1751,7 +1767,11 @@ { // crbug.com/434361099 name: "CssTextIndent", - status: "test", + status: "stable", + }, + { + name: "CssTextIndentAsPrimitive", + status: "stable", }, { // crbug.com/40321528 @@ -1769,6 +1789,19 @@ name: "CSSTextTransformFullWidth", status: "experimental", }, + { + // Support for the 'all' keyword of the 'timeline-scope' property. + // + // https://drafts.csswg.org/scroll-animations-1/#timeline-scope + name: "CSSTimelineScopeAll", + status: "experimental", + }, + { + // Makes timeline names global by default. + // + // https://github.com/w3c/csswg-drafts/issues/12581 + name: "CSSTimelineScopeGlobal", + }, { name: "CSSTypedArithmetic", status: "stable", @@ -1864,10 +1897,6 @@ name: "DesktopPWAsAdditionalWindowingControls", status: "test", }, - { - name: "DesktopPWAsSubApps", - status: "test", - }, { name: "DeviceAttributes", status: { @@ -1875,10 +1904,6 @@ "default": "experimental", }, }, - { - name: "DeviceAttributesPermissionPolicy", - status: "stable", - }, { name: "DeviceBoundSessionCredentials", origin_trial_feature_name: "DeviceBoundSessionCredentials", @@ -1968,6 +1993,12 @@ name: "DisableDocumentBeingDestroyed", status: "stable", }, + { + // Switch from ellipsis to clip when a container is scrolled. + // This shipped in M146 and the flag can be removed in M148. + name: "DisableEllipsisWhenScrolled", + status: "experimental", + }, { name: "DisableReduceAcceptLanguage", origin_trial_feature_name: "DisableReduceAcceptLanguage", @@ -1981,6 +2012,18 @@ name: "DisableRemoveFormatForPlainTextOnlyEditableDiv", status: "stable", }, + { + // Disconnected elements should not trigger navigation. + // This was added in M146, and can be removed in M148. + name: "DisallowDisconnectedAreaNavigation", + status: "stable", + }, + { + // For readonly inputs, do not allow access to the picker. + // This landed in M146 and can be removed in M148. + name: "DisallowPickerForReadonlyInputs", + status: "stable", + }, { // `kHidden` and `kHiddenButPainting` visibility states are treated as // hidden in the sense of `document.visibilityState`. However, they are @@ -2128,6 +2171,13 @@ { name: "DocumentWrite", }, + { + // DOMActivate event inherits bubbles from the underlying event to + // prevent activation behavior of parent elements when it doesn't bubble. + // crbug.com/41431966 + name: "DOMActivateBubblesInheritance", + status: "stable", + }, { name: "DOMPartsAPI", status: "experimental", @@ -2136,6 +2186,12 @@ { name: "DOMPartsAPIMinimal", }, + { + // When enabled, retarget the relatedTarget attribute of drag events. + // This landed in M146 and can be removed in M148. + name: "DontLeakShadowTreesInDragEvents", + status: "stable", + }, { // Enable drag and drop delegation to child frames in HTMLPlugInElements // (object/embed elements). Fixes drag and drop from text inputs/textareas @@ -2149,6 +2205,12 @@ status: "test", settable_from_internals: true }, + { + // Enables proper backspace handling for emoji tag sequences + // (e.g., subdivision flags like 🏴󠁧󠁢󠁥󠁮󠁧󠁿) per UTS #51 ED-14a. + name: "EditEmojiTagSequence", + status: "stable", + }, { name: "EditEmojiUnicode11", status: "stable", @@ -2207,11 +2269,6 @@ name: "EntropyIgnoredForFirstVideoFrameLCP", status: "experimental", }, - { - // See crbug.com/453919401 for more details. - name: "EquivalentEncompassRounding", - status: "stable", - }, { // `event.pseudoTarget` property to represent pseudo-elements in events. Returns `CSSPseudoElement` or null. name: "EventPseudoTargetProperty", @@ -2351,6 +2408,12 @@ origin_trial_os: ["win", "mac", "linux", "chromeos"], origin_trial_allows_third_party: true, }, + { + name: "FedCmNavigationInterception", + depends_on: ["FedCm"], + public: true, + base_feature: "none", + }, { name: "FedCmNonStringToken", depends_on: ["FedCm"], @@ -2512,6 +2575,11 @@ name: "FileSystemObserverUnobserve", status: "experimental", }, + { + // Fix for https://crbug.com/41153707 + name: "FilterContainerLevelStyles", + status: "stable" + }, { // crbug.com/438220615 name: "FindAcrossParagraphsInTextarea", @@ -2529,6 +2597,17 @@ name: "FirstLineTextMetrics", status: "stable", }, + { + name: "FixLinebreakForPreTag", + status: "stable", + }, + { + // This fixes the suppression of markers for
and + // list items for appearance:auto. + // This was added in M146 and can be removed after M148. + name: "FixMarkerSuppressionForAppearanceAuto", + status: "stable", + }, { // crbug.com/411739501 name: "FixNextPositionCalculationInInsertList", @@ -2635,12 +2714,6 @@ name: "FlexWrapBalance", status: "experimental", }, - { - name: "FluentOverlayScrollbars", - // The associated base feature is defined in - // ui/native_theme/features/native_theme_features.cc. - base_feature: "none", - }, { // https://open-ui.org/components/scoped-focusgroup.explainer/ name: "Focusgroup", @@ -2768,6 +2841,13 @@ status: "stable", public: true, }, + { + // A feature flag that controls whether the geometry mapper singular + // transform fix is enabled. + // https://issues.chromium.org/issues/441128445 + name: "GeometryMapperSingularTransformFix", + status: "stable", + }, { name: "GetAllScreensMedia", depends_on: ["GetDisplayMedia"], @@ -2906,16 +2986,17 @@ name: "HTMLCommandForScrollCommands", status: "experimental", }, - // Adds support for the 'request-close' command. - // https://open-ui.org/components/invokers.explainer/ - { - name: "HTMLCommandRequestClose", - status: "stable", - }, { name: "HTMLElementScrollParent", status: "experimental", }, + { + // Don't require a LayoutObject when the 'src' of an with 'type' + // unset changes from empty ("represents nothing") to something + // ("potentially active"). https://crbug.com/479233864 + name: "HTMLEmbedElementRepresentsNothingToActive", + status: "stable", + }, // Return a natural width/height of zero from // HTMLImageElement.naturalWidth/Height for SVG images that don't have a // natural width/height set. @@ -3075,8 +3156,9 @@ base_feature: "none", }, { + // https://chromestatus.com/feature/5152834368700416 name: "InstallElement", - status: "experimental" + status: {"Android": "", "default": "test"}, }, { name: "InstallOnDeviceSpeechRecognition", @@ -3139,6 +3221,14 @@ name: "KeyboardFocusabilityAfterFindInPage", status: "stable", }, + { + // Checks interactive content using EventPath captured at + // dispatch start instead of current DOM state. This was + // added in M145 and can be removed after M147. + // https://issues.chromium.org/issues/452084024 + name: "LabelInteractiveContentCheckBeforeHandler", + status: "stable", + }, { name: "LangAttributeAwareFormControlUI", settable_from_internals: true, @@ -3180,10 +3270,24 @@ depends_on: ["DisableDocumentBeingDestroyed"], status: "stable", }, + { + name: "LayoutReinsertOnInFlowStateChange", + depends_on: ["LayoutMergeAnonymousFix", "DisableDocumentBeingDestroyed"], + status: "stable", + }, { name: "LayoutTableCellAlignmentSafe", status: "stable", }, + { + // When enabled, brings chromium into compliance with the resolution of: + // https://github.com/whatwg/html/issues/10671 + // This flag can be used to easily revert to the old behavior if the new + // behavior causes breakage; otherwise, it can be removed after M145 + // reaches stable. + name: "LazyImageConformantLoadEventTiming", + status: "stable", + }, { // Allow triggering the word suggestion from left click. // From crbug.com/433209485 @@ -3258,6 +3362,12 @@ // Enabled by features::kLockedMode. public: true, }, + { + name: "LoginElement", + depends_on: ["FedCm"], + status: "experimental", + base_feature: "none", + }, { // Enable sourceCharPosition for the invoke-type resolve-promise // https://issues.chromium.org/issues/381529126 @@ -3277,6 +3387,12 @@ name: "LongAnimationFrameSourceLineColumnInterface", status: "test", }, + { + // Add styleDuration to PerformanceLongAnimationFrameTiming and + // forcedStyleDuration to PerformanceScriptTiming + name: "LongAnimationFrameStyleDuration", + status: "experimental", + }, { // Long press on a link selects the link text instead of bringing up // context menu. Enabled only on Android AuthView. @@ -3297,6 +3413,8 @@ }, { name: "MachineLearningNeuralNetwork", + origin_trial_feature_name: "WebMachineLearningNeuralNetwork", + origin_trial_os: ["win", "mac", "linux", "chromeos"], // Enabled by webnn::mojom::features::kWebMachineLearningNeuralNetwork. base_feature: "none", }, @@ -3318,6 +3436,11 @@ status: "test", base_feature: "none", }, + { + // CSS margin-trim property: https://drafts.csswg.org/css-box-4/#margin-trim + name: "MarginTrim", + status: "experimental", + }, { name: "MaskDeserializationTimeForCrossOriginMessages", status: "stable", @@ -3486,6 +3609,11 @@ name: "ModulePreloadReferrer", status: "experimental", }, + // https://crbug.com/466888680 + { + name: "ModulePreloadStyleJson", + status: "experimental", + }, { name: "MojoJS", status: "test", @@ -3522,7 +3650,7 @@ }, { name: "NavigateEventAddHandlerOnPrecommit", - status: "experimental", + status: "stable", }, { name: "NavigateEventCanTransition", @@ -3531,6 +3659,10 @@ name: "NavigateEventCommitBehavior", status: "stable", }, + { + name: "NavigateEventDeferCrossDocumentCommit", + status: "experimental", + }, { name: "NavigateEventPopstateLimitations", status: "stable", @@ -3642,6 +3774,12 @@ name: "OffscreenCanvasGetContextAttributes", status: "stable", }, + { + // Kill switch for a fix to offset-path transform invalidation for + // https://crbug.com/463409688. + name: "OffsetPathTransformUpdateFix", + status: "stable", + }, { name: "OmitBlurEventOnElementRemoval", status: "test" @@ -3676,7 +3814,6 @@ // This is a spec change since anchor positioning was shipped in Blink. // https://issues.chromium.org/issues/408223892 name: "OriginatingElementIsImplicitAnchor", - depends_on: ["CSSPositionAnchorNone"], status: "stable", }, { @@ -3950,7 +4087,6 @@ public: true, base_feature_status: "enabled", copied_from_base_feature_if: "overridden", - implied_by: ["InstallElement"], }, { name: "Permissions", @@ -4088,7 +4224,7 @@ // When enabled, preserves dropEffect in drag event set during dragover // events. See https://crbug.com/434151262 name: "PreserveDropEffect", - status: "test", + status: "stable", }, { // When enabled, prevents undo to be applied if the enclosing block @@ -4138,6 +4274,12 @@ { name: "ProgrammaticScrollPromise", }, + { + // When enabled, setting progress.max enforces a >0 constraint. + // This will be shipped in M146, and it can be removed in M148. + name: "ProgressMaxIsPositive", + status: "experimental", + }, { // Propagate overscroll-behavior from the root element rather than the // body element. crbug.com/41453796 @@ -4230,14 +4372,6 @@ name: "ReduceAcceptLanguage", base_feature: "none", }, - { - // If enabled, the deviceModel will be reduced to "K" and the - // androidVersion will be reduced to a static "10" string in android - // User-Agent string. - name: "ReduceUserAgentAndroidVersionDeviceModel", - depends_on: ["ReduceUserAgentMinorVersion"], - status: {"Android": "stable"}, - }, // If enabled, the platform version in User-Agent Data will be removed. // This feature is limited to Linux only. { @@ -4265,15 +4399,6 @@ // net::features::kRelatedWebsitePartitionAPI, which needs to be // enabled to make the whole feature work. }, - { - // This flag allows more characters to be accepted as valid names in the - // createElement and attribute related DOM APIs. - // https://github.com/whatwg/dom/pull/1079 - // http://crbug.com/40228234 - // https://chromestatus.com/feature/6278918763708416 - name: "RelaxDOMValidNames", - status: "stable", - }, { name: "RelOpenerBcgDependencyHint", status: "experimental", @@ -4323,6 +4448,11 @@ name: "RemoveFormatFilterBackgroundColor", status: "stable", }, + { + // See https://issues.chromium.org/issues/40779139 + name: "RemoveScrollNodeWorkaround", + status: "stable", + }, { // See https://issues.chromium.org/issues/41474791 name: "RemoveSelectionCanonicalizationInMoveParagraph", @@ -4504,7 +4634,7 @@ // Spec: https://wicg.github.io/sanitizer-api/ // Tracking bug: crbug.com/356601280 name: "SanitizerAPI", - status: "experimental", + status: "stable", }, { // https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries @@ -4513,6 +4643,7 @@ // https://github.com/whatwg/html/pull/10869 // https://github.com/whatwg/dom/pull/1341 name: "ScopedCustomElementRegistry", + status: "stable", }, { // https://github.com/WICG/view-transitions/blob/main/scoped-transitions.md @@ -4543,14 +4674,6 @@ status: "stable", base_feature: "none", }, - { - // crbug.com/378692756 - name: "ScriptRunIteratorCombiningMarkAlways", - status: "stable", - }, - { - name: "ScriptRunIteratorCombiningMarks", - }, { name: "ScrollAnchorPriorityCandidateSubtree", status: "stable", @@ -4721,7 +4844,7 @@ { // https://issues.chromium.org/issues/40502558 name: "SelectionRemoveRangeNotFoundError", - status: "experimental", + status: "stable", }, { // https://issues.chromium.org/issues/40502558 @@ -4933,12 +5056,15 @@ status: "stable", }, { - name: "SkipOofItemForBreakCandidate", + // When enabled, cursor movement (arrow keys) will skip over non-editable + // atomic or empty inline elements within editable content, instead of + // getting stuck or moving into the non-editable content. + name: "SkipNonEditableInAtomicMove", status: "stable", }, { - // crbug.com/403617975 - name: "SkipSetNeedsCollectInlines", + name: "SkipOofItemForBreakCandidate", + status: "stable", }, { // Skips the browser touch event filter, ensuring that events that reach @@ -4982,6 +5108,10 @@ name: "SoftNavigationDetection", status: "stable", }, + { + name: "SoftNavigationEagerIcpEntryEmission", + status: "test", + }, { name: "SoftNavigationHeuristics", status: "experimental", @@ -5070,6 +5200,10 @@ name: "StylusHandwriting", base_feature: "none", }, + { + name: "SubApps", + status: "test", + }, { name: "Svg2Cascade", status: "stable", @@ -5108,11 +5242,6 @@ name: "SvgIgnoreNegativeEllipseRadii", status: "stable", }, - { - // Disable "external" XSLT stylesheets in SVGImage. - name: "SvgImageNoExternalXslt", - status: "stable", - }, { name: "SvgInlineRootPixelSnappingScaleAdjustment", status: "test", @@ -5141,6 +5270,10 @@ name: "SvgSmilPruneInstanceTimes", status: "stable", }, + { + name: "SvgTextPathPathAttribute", + status: "experimental" + }, { name: "SvgTransformOnNestedSvgElement", status: "stable", @@ -5172,6 +5305,12 @@ name: "SystemWakeLock", status: "experimental", }, + { + // Don't trigger table border rendering with only bordercolor attribute. + // This shipped in M146 and can be removed in M148. + name: "TableBorderColorNoImplicitBorder", + status: "stable", + }, { name: "TableIsAutoFixedLayout", status: "test", @@ -5184,10 +5323,6 @@ name: "TabSizeWithSpacing", status: "stable", }, - { - name: "TabWidthNegativePosition", - status: "stable", - }, { // When checking the shadow tree during invoke(), // use the invocationTargetInShadowTree saved before @@ -5256,11 +5391,6 @@ name: "TestFeatureStable", status: "stable", }, - { - // crbug.com/414858401 - name: "TextareaLineEndingsAsBr", - status: "stable", - }, { // crbug.com/461332428 name: "TextCombineNoSideways", @@ -5315,7 +5445,7 @@ }, { name: "TextScaleMetaTag", - status: "experimental", + status: "stable", }, { // crbug.com/431660829 @@ -5346,7 +5476,7 @@ { // https://drafts.csswg.org/web-animations-2/#triggers name: "TimelineTrigger", - status: "experimental", + status: "stable", }, { name: "TimerThrottlingForBackgroundTabs", @@ -5572,6 +5702,10 @@ name: "UseBoundedSelectionOffsetsInEditContextDeleteOperations", status: "stable" }, + { + name: "UseLargestPaintedImageForLCPCandidate", + status: "stable", + }, { // Android currently uses low-quality interpolation, while other platforms // default to medium-quality. This flag is for experimenting with changing @@ -5737,6 +5871,12 @@ status: "experimental", base_feature: "none", }, + { + // If enabled, form controls will only render the OS accent color in a + // web app context. + name: "WebAppScopeSystemAccentColor", + status: "experimental", + }, { name: "WebAppTabStrip", status: { @@ -5832,18 +5972,12 @@ name: "WebAuthenticationChallengeUrl", status: "experimental", }, - // https://w3c.github.io/webauthn/#dom-clientcapability-conditionalcreate - { - name: "WebAuthenticationConditionalCreate", - status: "test", - base_feature: "none", - public: true, - }, - // Prototyping https://github.com/w3c/webauthn/issues/2228 + // Enables `uiMode` enumeration field in CredentialRequestOptions struct. + // and `get()` requests with `uiMode: 'immediate'`. + // See https://github.com/w3c/webauthn/issues/2228. { name: "WebAuthenticationImmediateGet", - origin_trial_feature_name: "WebAuthenticationImmediateGet", - origin_trial_os: ["win", "mac", "linux", "chromeos"], + status: "experimental", base_feature: "none", public: true, }, @@ -5857,13 +5991,7 @@ name: "WebAuthenticationSupplementalPubKeys", status: "experimental", }, - // Enables `uiMode` enumeration field in CredentialRequestOptions struct. - // This is an alternate API shape for `WebAuthenticationImmediateGet`. - // See https://github.com/w3c/webauthn/issues/2228. - { - name: "WebAuthenticationUiMode", - status: "experimental", - }, + // WebBluetooth is enabled by default on Android, ChromeOS, iOS, macOS and // Windows. { @@ -5945,7 +6073,7 @@ // https://chromestatus.com/feature/6436406437871616 name: "WebGPUCompatibilityMode", origin_trial_feature_name: "WebGPUCompatibilityMode", - status: "experimental", + status: "stable", // Also enabled as part of all experimental WebGPU features. implied_by: ["WebGPUExperimentalFeatures"], }, @@ -5985,8 +6113,7 @@ }, { name: "WebGPUTransientAttachment", - status: "experimental", - implied_by: ["WebGPUExperimentalFeatures"], + status: "stable", }, { name: "WebHID", @@ -6020,6 +6147,7 @@ }, { name: "WebMCP", + implied_by: ["WebMCPTesting"], status: "experimental", }, { @@ -6260,6 +6388,12 @@ name: "XMLSerializerConsistentDefaultNsDeclMatching", status: "test", }, + { + // Support XPath evaluation within Shadow DOM. + // This was added in M146 and can be removed after M148. + name: "XPathShadowDOMSupport", + status: "stable", + }, { // A feature flag that controls whether XSLT is supported by the browser. // The current default state is XSLT-enabled. Note that there is a Finch @@ -6268,6 +6402,7 @@ // crbug.com/435623334. name: "XSLT", status: "stable", + public: true, }, { // A feature flag that will be used for a "special trial" of disabling @@ -6278,10 +6413,5 @@ // crbug.com/435623334. name: "XSLTSpecialTrial", }, - { - // 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 85c62247..eaaebfbc 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 @@ -113,6 +113,12 @@ interface AnimationTimeline getter currentTime getter duration method constructor +interface AnimationTrigger + attribute @@toStringTag + method addAnimation + method constructor + method getAnimations + method removeAnimation interface AsyncDisposableStack attribute @@toStringTag getter disposed @@ -167,6 +173,7 @@ interface AudioContext : BaseAudioContext getter onerror getter onsinkchange getter outputLatency + getter playbackStats getter sinkId method close method constructor @@ -278,6 +285,17 @@ interface AudioParamMap method has method keys method values +interface AudioPlaybackStats + attribute @@toStringTag + getter averageLatency + getter maximumLatency + getter minimumLatency + getter totalDuration + getter underrunDuration + getter underrunEvents + method constructor + method resetLatency + method toJSON interface AudioProcessingEvent : Event attribute @@toStringTag getter inputBuffer @@ -1220,11 +1238,18 @@ interface CharacterData : Node setter data interface Clipboard : EventTarget attribute @@toStringTag + getter onclipboardchange method constructor method read method readText method write method writeText + setter onclipboardchange +interface ClipboardChangeEvent : Event + attribute @@toStringTag + getter changeId + getter types + method constructor interface ClipboardEvent : Event attribute @@toStringTag getter clipboardData @@ -1355,6 +1380,7 @@ interface CustomElementRegistry method define method get method getName + method initialize method upgrade method whenDefined interface CustomEvent : Event @@ -1715,6 +1741,7 @@ interface DisposableStack method move method use interface Document : Node + static method parseHTML static method parseHTMLUnsafe attribute @@toStringTag attribute @@unscopables @@ -1736,6 +1763,7 @@ interface Document : Node getter contentType getter cookie getter currentScript + getter customElementRegistry getter defaultView getter designMode getter dir @@ -2251,6 +2279,7 @@ interface Element : Node getter clientTop getter clientWidth getter currentCSSZoom + getter customElementRegistry getter elementTiming getter firstElementChild getter id @@ -2331,6 +2360,7 @@ interface Element : Node method setAttributeNS method setAttributeNode method setAttributeNodeNS + method setHTML method setHTMLUnsafe method setPointerCapture method toggleAttribute @@ -3071,7 +3101,11 @@ interface GPUSupportedLimits getter maxSampledTexturesPerShaderStage getter maxSamplersPerShaderStage getter maxStorageBufferBindingSize + getter maxStorageBuffersInFragmentStage + getter maxStorageBuffersInVertexStage getter maxStorageBuffersPerShaderStage + getter maxStorageTexturesInFragmentStage + getter maxStorageTexturesInVertexStage getter maxStorageTexturesPerShaderStage getter maxTextureArrayLayers getter maxTextureDimension1D @@ -3094,6 +3128,7 @@ interface GPUTexture getter label getter mipLevelCount getter sampleCount + getter textureBindingViewDimension getter usage getter width method constructor @@ -4827,11 +4862,13 @@ interface HTMLTemplateElement : HTMLElement attribute @@toStringTag getter content getter shadowRootClonable + getter shadowRootCustomElementRegistry getter shadowRootDelegatesFocus getter shadowRootMode getter shadowRootSerializable method constructor setter shadowRootClonable + setter shadowRootCustomElementRegistry setter shadowRootDelegatesFocus setter shadowRootMode setter shadowRootSerializable @@ -6202,6 +6239,7 @@ interface NavigationHistoryEntry : EventTarget setter ondispose interface NavigationPrecommitController attribute @@toStringTag + method addHandler method constructor method redirect interface NavigationPreloadManager @@ -8837,6 +8875,18 @@ interface SVGViewElement : SVGElement getter zoomAndPan method constructor setter zoomAndPan +interface Sanitizer + attribute @@toStringTag + method allowAttribute + method allowElement + method constructor + method get + method removeAttribute + method removeElement + method removeUnsafe + method replaceElementWithChildren + method setComments + method setDataAttributes interface Scheduler attribute @@toStringTag method constructor @@ -9040,6 +9090,7 @@ interface ShadowRoot : DocumentFragment getter activeElement getter adoptedStyleSheets getter clonable + getter customElementRegistry getter delegatesFocus getter fullscreenElement getter host @@ -9057,6 +9108,7 @@ interface ShadowRoot : DocumentFragment method getAnimations method getHTML method getSelection + method setHTML method setHTMLUnsafe setter adoptedStyleSheets setter fullscreenElement @@ -9567,6 +9619,28 @@ interface TimeRanges method constructor method end method start +interface TimelineTrigger : AnimationTrigger + attribute @@toStringTag + getter ranges + method constructor +interface TimelineTriggerRange + attribute @@toStringTag + getter activationRangeEnd + getter activationRangeStart + getter activeRangeEnd + getter activeRangeStart + getter timeline + method constructor +interface TimelineTriggerRangeList + attribute @@toStringTag + getter length + method @@iterator + method constructor + method entries + method forEach + method item + method keys + method values interface ToggleEvent : Event attribute @@toStringTag getter newState @@ -12228,6 +12302,7 @@ namespace GPUTextureUsage attribute RENDER_ATTACHMENT attribute STORAGE_BINDING attribute TEXTURE_BINDING + attribute TRANSIENT_ATTACHMENT namespace Temporal attribute @@toStringTag attribute Now