diff --git a/tools/under-control/src/RELEASE b/tools/under-control/src/RELEASE index e0525863..3fd7a6cc 100644 --- a/tools/under-control/src/RELEASE +++ b/tools/under-control/src/RELEASE @@ -1 +1 @@ -146.0.7680.31 +147.0.7727.56 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 fae9f145..df85e830 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 @@ -39,6 +39,7 @@ #include "android_webview/browser/network_service/aw_url_loader_throttle.h" #include "android_webview/browser/network_service/net_helpers.h" #include "android_webview/browser/prefetch/aw_prefetch_service_delegate.h" +#include "android_webview/browser/safe_browsing/aw_advanced_protection_status_manager_bridge.h" #include "android_webview/browser/safe_browsing/aw_safe_browsing_navigation_throttle.h" #include "android_webview/browser/safe_browsing/aw_url_checker_delegate_impl.h" #include "android_webview/browser/supervised_user/aw_supervised_user_throttle.h" @@ -200,7 +201,14 @@ base::WeakPtr GetAsyncCheckTracker( } // anonymous namespace std::string GetProduct() { - return embedder_support::GetProductAndVersion(); + // We cannot use `embedder_support::GetProductAndVersion()` here because that + // relies on base::FeatureList, which need not be initialized at this point - + // GetDefaultUserAgent can call this before browser startup is completed. + return base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kWebViewReduceUserAgentMinorVersion) + ? version_info::GetProductNameAndVersionForReducedUserAgent() + : std::string( + version_info::GetProductNameAndVersionForUserAgent()); } std::string GetUserAgent() { @@ -211,14 +219,14 @@ std::string GetUserAgent() { product += " Mobile"; } - if (base::FeatureList::IsEnabled( - features::kWebViewReduceUAAndroidVersionDeviceModel)) { + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kWebViewReduceUAAndroidVersionDeviceModel)) { // The user-agent reduction feature for WebView, when enabled, should // produce a consistent, unified platform string to ensure predictable - // behavior. This hardcoded value prevents device-specific platform details - // (e.g., "X11; Linux" on desktop devices) from appearing in the reduced - // User-Agent. The "Linux; Android 10; K; wv" string matches the expected - // format for a reduced WebView User-Agent. + // behavior. This hardcoded value prevents device-specific platform + // details (e.g., "X11; Linux" on desktop devices) from appearing in the + // reduced User-Agent. The "Linux; Android 10; K; wv" string matches the + // expected format for a reduced WebView User-Agent. constexpr char kUnifiedPlatformOsInfoWebview[] = "Linux; Android 10; K; wv"; return embedder_support::BuildUserAgentFromOSAndProduct( kUnifiedPlatformOsInfoWebview, product); @@ -309,8 +317,21 @@ void AwContentBrowserClient::ConfigureNetworkContextParams( // Pass the mojo::PendingRemote to // android_webview::CookieManager, so it can implement its APIs with this mojo // CookieManager. - aw_context->GetCookieManager()->SetMojoCookieManager( - std::move(cookie_manager_remote)); + if (base::FeatureList::IsEnabled( + features::kWebViewNonBlockingCookieStoreHandoff)) { + // New non-blocking path with proper close before handoff. + mojo::PendingRemote + ready_callback; + network_context_params->cookie_store_ready_callback = + ready_callback.InitWithNewPipeAndPassReceiver(); + + aw_context->GetCookieManager()->SetMojoCookieManagerNonBlocking( + std::move(cookie_manager_remote), std::move(ready_callback)); + } else { + // Original blocking path (for A/B comparison). + aw_context->GetCookieManager()->SetMojoCookieManager( + std::move(cookie_manager_remote)); + } } void AwContentBrowserClient::InitBrowserContextStore() { @@ -1525,4 +1546,8 @@ bool AwContentBrowserClient::OriginSupportsConcreteCrossOriginIsolation( return false; } +bool AwContentBrowserClient::IsAndroidAdvancedProtectionEnabled() { + return AwAdvancedProtectionStatusManagerBridge::IsUnderAdvancedProtection(); +} + } // 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 ee925a45..cd77dcfb 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 @@ -83,7 +83,7 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { aw_feature_overrides.DisableFeature(ui::kAndroidHDR); // Disable launch_handler on WebView. - aw_feature_overrides.DisableFeature(::features::kAndroidWebAppLaunchHandler); + aw_feature_overrides.DisableFeature(blink::features::kWebAppLaunchQueue); // Disable Reducing User Agent minor version on WebView. aw_feature_overrides.DisableFeature( @@ -140,6 +140,11 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { aw_feature_overrides.DisableFeature( blink::features::kSecurePaymentConfirmationAvailabilityAPI); + // WebView does not support Secure Payment Confirmation, and thus should not + // expose the PaymentRequest.securePaymentConfirmationCapabilities API. + aw_feature_overrides.DisableFeature( + blink::features::kSecurePaymentConfirmationCapabilities); + // WebView does not support handling payment links. aw_feature_overrides.DisableFeature(blink::features::kPaymentLinkDetection); @@ -233,7 +238,6 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // Disabling the permission element as it needs embedder support in order to // function and the webview permission manager cannot support it. - aw_feature_overrides.DisableFeature(blink::features::kPermissionElement); aw_feature_overrides.DisableFeature(blink::features::kGeolocationElement); aw_feature_overrides.DisableFeature(blink::features::kUserMediaElement); aw_feature_overrides.DisableFeature(blink::features::kInstallElement); @@ -317,4 +321,17 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // Launched for WebView. Experimentation needed for Chrome on Android. aw_feature_overrides.EnableFeature( stylus_handwriting::android::kProbeStylusWritingInBackground); + + // As WebSettings.setAllowContentAccess() allows this to be controlled by + // the WebView's host, we keep the old behavior for content:// URLs. + aw_feature_overrides.DisableFeature(blink::features::kContentSchemeIsLocal); + + // Disable No-Vary-Search in disk cache on WebView. + // See https://crbug.com/382394774. + aw_feature_overrides.DisableFeature(net::features::kHttpCacheNoVarySearch); + + // TODO(crbug.com/489450060): Disable DirectReceiver on Viz for WebView until + // its Viz thread is updated to handle IO. + aw_feature_overrides.DisableFeature( + ::features::kVizDirectCompositorThreadIpcFrameSinkManager); } 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 520532b8..dac57244 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 @@ -143,10 +143,6 @@ interface Attr : Node getter value method constructor setter value -interface AttributePart : NodePart - attribute @@toStringTag - getter localName - method constructor interface Audio attribute @@toStringTag method constructor @@ -980,6 +976,10 @@ interface CSSPseudoElement getter parent getter type method constructor + method convertPointFromNode + method convertQuadFromNode + method convertRectFromNode + method getBoxQuads method pseudo interface CSSRGB : CSSColorValue attribute @@toStringTag @@ -992,6 +992,9 @@ interface CSSRGB : CSSColorValue setter b setter g setter r +interface CSSResultRule : CSSGroupingRule + attribute @@toStringTag + method constructor interface CSSRotate : CSSTransformComponent attribute @@toStringTag getter angle @@ -1360,26 +1363,22 @@ interface CharacterData : Node getter nextElementSibling getter previousElementSibling method after + method afterHTML + method afterHTMLUnsafe method appendData method before + method beforeHTML + method beforeHTMLUnsafe method constructor method deleteData method insertData method remove method replaceData method replaceWith + method replaceWithHTML + method replaceWithHTMLUnsafe method substringData setter data -interface ChildNodePart : Part - attribute @@toStringTag - getter children - getter nextSibling - getter previousSibling - getter rootContainer - method clone - method constructor - method getParts - method replaceChildren interface Clipboard : EventTarget attribute @@toStringTag getter onclipboardchange @@ -2128,7 +2127,6 @@ interface Document : Node method getElementsByName method getElementsByTagName method getElementsByTagNameNS - method getPartRoot method getSelection method hasFocus method hasPrivateToken @@ -2306,18 +2304,11 @@ interface DocumentFragment : Node method append method constructor method getElementById - method getPartRoot method moveBefore method prepend method querySelector method querySelectorAll method replaceChildren -interface DocumentPartRoot - attribute @@toStringTag - getter rootContainer - method clone - method constructor - method getParts interface DocumentTimeline : AnimationTimeline attribute @@toStringTag method constructor @@ -2328,10 +2319,16 @@ interface DocumentType : Node getter publicId getter systemId method after + method afterHTML + method afterHTMLUnsafe method before + method beforeHTML + method beforeHTMLUnsafe method constructor method remove method replaceWith + method replaceWithHTML + method replaceWithHTMLUnsafe interface DragEvent : MouseEvent attribute @@toStringTag getter dataTransfer @@ -2373,7 +2370,6 @@ interface Element : Node attribute @@toStringTag attribute @@unscopables getter activeViewTransition - getter anchorElement getter ariaActiveDescendantElement getter ariaAtomic getter ariaAutoComplete @@ -2450,6 +2446,7 @@ interface Element : Node getter innerHTML getter lastElementChild getter localName + getter marker getter namespaceURI getter nextElementSibling getter onbeforecopy @@ -2473,11 +2470,17 @@ interface Element : Node getter slot getter tagName method after + method afterHTML + method afterHTMLUnsafe method animate method append + method appendHTML + method appendHTMLUnsafe method ariaNotify method attachShadow method before + method beforeHTML + method beforeHTMLUnsafe method checkVisibility method closest method computedStyleMap @@ -2504,6 +2507,8 @@ interface Element : Node method matches method moveBefore method prepend + method prependHTML + method prependHTMLUnsafe method pseudo method querySelector method querySelectorAll @@ -2514,6 +2519,8 @@ interface Element : Node method removeAttributeNode method replaceChildren method replaceWith + method replaceWithHTML + method replaceWithHTMLUnsafe method requestFullscreen method requestPointerLock method scroll @@ -2529,13 +2536,14 @@ interface Element : Node method setHTMLUnsafe method setPointerCapture method startViewTransition + method streamAppendHTML method streamAppendHTMLUnsafe + method streamHTML method streamHTMLUnsafe method toggleAttribute method webkitMatchesSelector method webkitRequestFullScreen method webkitRequestFullscreen - setter anchorElement setter ariaActiveDescendantElement setter ariaAtomic setter ariaAutoComplete @@ -2597,6 +2605,7 @@ interface Element : Node setter headingReset setter id setter innerHTML + setter marker setter onbeforecopy setter onbeforecut setter onbeforepaste @@ -2670,7 +2679,6 @@ interface ElementInternals getter role getter shadowRoot getter states - getter type getter validationMessage getter validity getter willValidate @@ -2678,6 +2686,7 @@ interface ElementInternals method constructor method reportValidity method setFormValue + method setToolParamSchema method setValidity setter ariaActiveDescendantElement setter ariaAtomic @@ -2732,7 +2741,6 @@ interface ElementInternals setter ariaValueText setter ariaVirtualContent setter role - setter type interface EncodedAudioChunk attribute @@toStringTag getter byteLength @@ -2938,7 +2946,6 @@ interface Float16Array : TypedArray method constructor interface FocusEvent : UIEvent attribute @@toStringTag - getter pseudoTarget getter relatedTarget method constructor interface FontFace @@ -2977,13 +2984,6 @@ interface FontFaceSetLoadEvent : Event attribute @@toStringTag getter fontfaces method constructor -interface FormControlRange : AbstractRange - attribute @@toStringTag - method constructor - method getBoundingClientRect - method getClientRects - method setFormControlRange - method toString interface FormData attribute @@toStringTag method @@iterator @@ -3679,17 +3679,20 @@ interface HTMLCanvasElement : HTMLElement attribute @@toStringTag getter height getter layoutSubtree + getter onpaint getter width method captureStream method configureHighDynamicRange method constructor method getContext method getElementTransform + method requestPaint method toBlob method toDataURL method transferControlToOffscreen setter height setter layoutSubtree + setter onpaint setter width interface HTMLCollection attribute @@toStringTag @@ -4391,6 +4394,7 @@ interface HTMLInputElement : HTMLElement getter willValidate method checkValidity method constructor + method createValueRange method reportValidity method select method setCustomValidity @@ -4563,6 +4567,7 @@ interface HTMLMediaElement : HTMLElement getter ended getter error getter latencyHint + getter loading getter loop getter mediaKeys getter muted @@ -4600,6 +4605,7 @@ interface HTMLMediaElement : HTMLElement setter defaultMuted setter defaultPlaybackRate setter latencyHint + setter loading setter loop setter muted setter onencrypted @@ -5068,14 +5074,12 @@ interface HTMLTableSectionElement : HTMLElement interface HTMLTemplateElement : HTMLElement attribute @@toStringTag getter content - getter parseparts getter shadowRootClonable getter shadowRootCustomElementRegistry getter shadowRootDelegatesFocus getter shadowRootMode getter shadowRootSerializable method constructor - setter parseparts setter shadowRootClonable setter shadowRootCustomElementRegistry setter shadowRootDelegatesFocus @@ -5109,6 +5113,7 @@ interface HTMLTextAreaElement : HTMLElement getter wrap method checkValidity method constructor + method createValueRange method reportValidity method select method setCustomValidity @@ -5566,6 +5571,7 @@ interface InteractionContentfulPaint : PerformanceEntry attribute @@toStringTag getter element getter id + getter interactionId getter loadTime getter paintTime getter presentationTime @@ -5623,7 +5629,6 @@ interface KeyboardEvent : UIEvent getter keyCode getter location getter metaKey - getter pseudoTarget getter repeat getter shiftKey method constructor @@ -6308,9 +6313,7 @@ interface MimeTypeArray method namedItem interface ModelContext attribute @@toStringTag - method clearContext method constructor - method provideContext method registerTool method unregisterTool interface Mojo @@ -6384,7 +6387,6 @@ interface MouseEvent : UIEvent getter offsetY getter pageX getter pageY - getter pseudoTarget getter relatedTarget getter screenX getter screenY @@ -6586,6 +6588,7 @@ interface Navigator getter preferences getter product getter productSub + getter rtc getter scheduling getter serviceWorker getter storage @@ -6617,7 +6620,6 @@ interface Navigator method share method vibrate method webkitGetUserMedia - setter modelContext setter modelContextTesting interface NavigatorManagedData : EventTarget attribute @@toStringTag @@ -6724,10 +6726,6 @@ interface NodeList method item method keys method values -interface NodePart : Part - attribute @@toStringTag - getter node - method constructor interface NotRestoredReasonDetails attribute @@toStringTag getter reason @@ -6908,6 +6906,12 @@ interface OffscreenCanvasRenderingContext2D setter textBaseline setter textRendering setter wordSpacing +interface OpaqueRange : AbstractRange + attribute @@toStringTag + method constructor + method disconnect + method getBoundingClientRect + method getClientRects interface Option attribute @@toStringTag getter defaultSelected @@ -6951,8 +6955,7 @@ interface OverconstrainedError : DOMException method constructor interface OverscrollEvent : Event attribute @@toStringTag - getter deltaX - getter deltaY + getter overscrollElement method constructor interface PageRevealEvent : Event attribute @@toStringTag @@ -6994,12 +6997,6 @@ interface PannerNode : AudioNode setter panningModel setter refDistance setter rolloffFactor -interface Part - attribute @@toStringTag - getter metadata - getter root - method constructor - method disconnect interface PasswordCredential : Credential attribute @@toStringTag getter iconURL @@ -7149,6 +7146,7 @@ interface PerformanceLongAnimationFrameTiming : PerformanceEntry attribute @@toStringTag getter blockingDuration getter firstUIEventTimestamp + getter layoutDuration getter paintTime getter presentationTime getter renderStart @@ -7254,6 +7252,7 @@ interface PerformanceResourceTiming : PerformanceEntry interface PerformanceScriptTiming : PerformanceEntry attribute @@toStringTag getter executionStart + getter forcedLayoutDuration getter forcedStyleAndLayoutDuration getter forcedStyleDuration getter invoker @@ -7398,6 +7397,13 @@ interface ProcessingInstruction : CharacterData getter sheet getter target method constructor + method getAttribute + method getAttributeNames + method hasAttribute + method hasAttributes + method removeAttribute + method setAttribute + method toggleAttribute interface Profiler : EventTarget attribute @@toStringTag getter sampleInterval @@ -7424,6 +7430,12 @@ interface QuotaExceededError : DOMException getter quota getter requested method constructor +interface RTC : EventTarget + attribute @@toStringTag + method cancelDiagnosticLogging + method constructor + method finishDiagnosticLogging + method startDiagnosticLogging interface RTCCertificate attribute @@toStringTag getter expires @@ -7825,6 +7837,7 @@ interface Request getter headers getter integrity getter isHistoryNavigation + getter isReloadNavigation getter keepalive getter method getter mode @@ -9324,6 +9337,7 @@ interface ShadowRoot : DocumentFragment getter fullscreenElement getter host getter innerHTML + getter marker getter mode getter onslotchange getter pictureInPictureElement @@ -9332,15 +9346,21 @@ interface ShadowRoot : DocumentFragment getter serializable getter slotAssignment getter styleSheets + method appendHTML + method appendHTMLUnsafe method constructor method elementFromPoint method elementsFromPoint method getAnimations method getHTML method getSelection + method prependHTML + method prependHTMLUnsafe method setHTML method setHTMLUnsafe + method streamAppendHTML method streamAppendHTMLUnsafe + method streamHTML method streamHTMLUnsafe setter adoptedStyleSheets setter fullscreenElement @@ -9388,6 +9408,9 @@ interface SnapEvent : Event method constructor interface SoftNavigationEntry : PerformanceEntry attribute @@toStringTag + getter interactionId + getter largestInteractionContentfulPaint + getter navigationType getter paintTime getter presentationTime method constructor @@ -9853,7 +9876,6 @@ interface TouchEvent : UIEvent getter changedTouches getter ctrlKey getter metaKey - getter pseudoTarget getter shiftKey getter targetTouches getter touches @@ -9921,6 +9943,11 @@ interface TrustedHTML method constructor method toJSON method toString +interface TrustedParserOptions + attribute @@toStringTag + getter runScripts + getter sanitizer + method constructor interface TrustedScript static method fromLiteral attribute @@toStringTag @@ -9938,6 +9965,7 @@ interface TrustedTypePolicy getter name method constructor method createHTML + method createParserOptions method createScript method createScriptURL interface TrustedTypePolicyFactory @@ -9956,6 +9984,7 @@ interface TrustedTypePolicyFactory interface UIEvent : Event attribute @@toStringTag getter detail + getter pseudoTarget getter sourceCapabilities getter view getter which @@ -11871,7 +11900,6 @@ interface XPathResult interface XRCompositionLayer : XRLayer attribute @@toStringTag getter blendTextureSourceAlpha - getter chromaticAberrationCorrection getter forceMonoPresentation getter layout getter mipLevels @@ -11880,7 +11908,6 @@ interface XRCompositionLayer : XRLayer method constructor method destroy setter blendTextureSourceAlpha - setter chromaticAberrationCorrection setter forceMonoPresentation setter opacity interface XRDOMOverlayState diff --git a/tools/under-control/src/chrome/android/java/AndroidManifest.xml b/tools/under-control/src/chrome/android/java/AndroidManifest.xml index 1aef3a49..5270a95e 100755 --- a/tools/under-control/src/chrome/android/java/AndroidManifest.xml +++ b/tools/under-control/src/chrome/android/java/AndroidManifest.xml @@ -72,11 +72,8 @@ by a child template that "extends" this file. - {% set is_desktop_android = is_desktop_android|default(0) %} - {% if is_desktop_android == "true" %} - {% endif %} {% set enable_screen_capture = enable_screen_capture|default(0) %} {% if enable_screen_capture == "true" %} @@ -126,6 +123,12 @@ by a child template that "extends" this file. + + + + + + {% set enable_vr = enable_vr|default(0) %} {% if enable_vr == "true" %} @@ -229,7 +232,6 @@ by a child template that "extends" this file. android:allowBackup="false" {% endif %} android:networkSecurityConfig="@xml/network_security_config" - android:allowAudioPlaybackCapture="false" android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory" android:enableOnBackInvokedCallback="true" {% if javaless_renderers is defined %} @@ -409,7 +411,7 @@ by a child template that "extends" this file. android:theme="@style/Theme.Chromium.Activity" android:excludeFromRecents="true" android:configChanges= - "screenSize|smallestScreenSize|screenLayout|orientation" + "screenSize|smallestScreenSize|screenLayout|orientation|density|uiMode" {{ self.supports_video_persistence() }} > @@ -526,6 +528,16 @@ by a child template that "extends" this file. + + + + + + + + + @@ -914,6 +926,11 @@ by a child template that "extends" this file. android:isolatedProcess="true" android:process=":decoder_service" /> + + + + @@ -1115,6 +1132,7 @@ by a child template that "extends" this file. + {% set num_sandboxed_services = 40 %} 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 33e3feb5..78fb67f8 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 @@ -62,7 +62,6 @@ import androidx.browser.customtabs.CustomTabsIntent.CloseButtonPosition; import androidx.browser.customtabs.CustomTabsIntent.OpenInBrowserState; import androidx.browser.customtabs.CustomTabsSessionToken; import androidx.browser.customtabs.ExperimentalCustomContentAction; -import androidx.browser.customtabs.ExperimentalOpenInBrowser; import androidx.browser.customtabs.TrustedWebUtils; import androidx.browser.trusted.FileHandlingData; import androidx.browser.trusted.LaunchHandlerClientMode; @@ -94,6 +93,7 @@ import org.chromium.chrome.browser.customtabs.CustomTabsFeatureUsage.CustomTabsF import org.chromium.chrome.browser.firstrun.FirstRunStatus; import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.CustomTabProfileType; import org.chromium.chrome.browser.share.ShareUtils; import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarButtonVariant; import org.chromium.chrome.browser.ui.google_bottom_bar.GoogleBottomBarCoordinator; @@ -309,7 +309,6 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid OpenInBrowserButtonState.OPEN_IN_BROWSER_STATE_DEFAULT }) @Retention(RetentionPolicy.SOURCE) - @ExperimentalOpenInBrowser public @interface OpenInBrowserButtonState { int OPEN_IN_BROWSER_STATE_OFF = CustomTabsIntent.OPEN_IN_BROWSER_STATE_OFF; int OPEN_IN_BROWSER_STATE_ON = CustomTabsIntent.OPEN_IN_BROWSER_STATE_ON; @@ -1056,7 +1055,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid * the UI surface. * * @param type {@link CustomTabsUiType} value. - * @param incognito Whether the {@link CustomTabProfileType} is incongnito. + * @param incognito Whether the {@link CustomTabProfileType} is incognito. */ public static boolean isOpenInBrowserDisallowed(int type, boolean incognito) { return !isOpenInBrowserAllowedForType(type) @@ -1833,7 +1832,6 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid return mResolvedDisplayMode; } - @ExperimentalOpenInBrowser @Override public @OpenInBrowserState int getOpenInBrowserButtonState() { return mOpenInBrowserState; diff --git a/tools/under-control/src/chrome/browser/about_flags.cc b/tools/under-control/src/chrome/browser/about_flags.cc index ec85200d..bdfa3ed5 100755 --- a/tools/under-control/src/chrome/browser/about_flags.cc +++ b/tools/under-control/src/chrome/browser/about_flags.cc @@ -33,13 +33,14 @@ #include "build/build_config.h" #include "cc/base/features.h" #include "cc/base/switches.h" +#include "chrome/browser/actor/actor_switches.h" #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/glic/public/features.h" #include "chrome/browser/login_detection/login_detection_util.h" #include "chrome/browser/media/router/discovery/access_code/access_code_cast_constants.h" #include "chrome/browser/media/router/discovery/access_code/access_code_cast_feature.h" @@ -114,7 +115,7 @@ #include "components/history_clusters/core/config.h" #include "components/history_clusters/core/features.h" #include "components/history_clusters/core/on_device_clustering_features.h" -#include "components/history_embeddings/history_embeddings_features.h" +#include "components/history_embeddings/core/history_embeddings_features.h" #include "components/input/features.h" #include "components/language/core/common/language_experiments.h" #include "components/lens/buildflags.h" @@ -163,13 +164,14 @@ #include "components/send_tab_to_self/features.h" #include "components/sensitive_content/features.h" #include "components/services/heap_profiling/public/cpp/switches.h" -#include "components/services/storage/public/cpp/buckets/bucket_info.h" +#include "components/services/storage/dom_storage/features.h" #include "components/shared_highlighting/core/common/shared_highlighting_features.h" #include "components/sharing_message/features.h" #include "components/signin/core/browser/dice_account_reconcilor_delegate.h" #include "components/signin/public/base/signin_buildflags.h" #include "components/signin/public/base/signin_switches.h" #include "components/site_isolation/features.h" +#include "components/skills/features.h" #include "components/soda/soda_features.h" #include "components/spellcheck/common/spellcheck_features.h" #include "components/spellcheck/spellcheck_buildflags.h" @@ -223,6 +225,7 @@ #include "media/webrtc/webrtc_features.h" #include "mojo/core/embedder/features.h" #include "net/base/features.h" +#include "net/base/switches.h" #include "net/net_buildflags.h" #include "net/nqe/effective_connection_type.h" #include "net/nqe/network_quality_estimator_params.h" @@ -236,6 +239,7 @@ #include "services/media_session/public/cpp/features.h" #include "services/network/public/cpp/features.h" #include "services/network/public/cpp/network_switches.h" +#include "services/on_device_model/public/cpp/features.h" #include "services/tracing/public/cpp/tracing_features.h" #include "services/webnn/public/mojom/features.mojom-features.h" #include "storage/browser/blob/features.h" @@ -326,6 +330,7 @@ #endif // BUILDFLAG(IS_MAC) #if BUILDFLAG(IS_WIN) +#include "chrome/browser/startup/startup_features.h" #include "chrome/browser/tracing/tracing_features.h" #include "chrome/browser/win/mica_titlebar.h" #include "components/stylus_handwriting/win/features.h" @@ -338,7 +343,6 @@ #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" @@ -346,6 +350,12 @@ #endif // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || // BUILDFLAG(IS_WIN) +#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || \ + BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) +#include "chrome/browser/contextual_cueing/contextual_cueing_features.h" // nogncheck +#endif // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || + // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) + #if BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) #include "components/on_device_translation/features.h" #endif // BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) @@ -355,7 +365,7 @@ #endif #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) -#include "chrome/browser/enterprise/reporting/reporting_features.h" +#include "components/enterprise/browser/reporting/reporting_features.h" #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) #if BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS) @@ -381,10 +391,6 @@ #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" @@ -419,17 +425,54 @@ const FeatureEntry::Choice kPullToRefreshChoices[] = { switches::kPullToRefresh, "2"}}; #endif // USE_AURA +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) +const FeatureEntry::FeatureParam kDefaultBrowserPromptSurfaces_Infobar[] = { + {"prompt_surface", "infobar"}}; +const FeatureEntry::FeatureParam kDefaultBrowserPromptSurfaces_BubbleDialog[] = + {{"prompt_surface", "bubble_dialog"}}; +const FeatureEntry::FeatureParam + kDefaultBrowserPromptSurfaces_ModalDialogWithSettingsIllustration[] = { + {"prompt_surface", "modal_dialog_with_settings_illustration"}}; +const FeatureEntry::FeatureParam + kDefaultBrowserPromptSurfaces_ModalDialogWithoutSettingsIllustration[] = { + {"prompt_surface", "modal_dialog_without_settings_illustration"}}; + +const FeatureEntry::FeatureVariation kDefaultBrowserPromptSurfacesVariations[] = + {{"with Infobar", kDefaultBrowserPromptSurfaces_Infobar, nullptr}, + {"with Bubble Dialog", kDefaultBrowserPromptSurfaces_BubbleDialog, + nullptr}, + {"with Modal Dialog with Settings Illustration", + kDefaultBrowserPromptSurfaces_ModalDialogWithSettingsIllustration, + nullptr}, + {"with Modal Dialog without Settings Illustration", + kDefaultBrowserPromptSurfaces_ModalDialogWithoutSettingsIllustration, + nullptr}}; +#endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) + const FeatureEntry::FeatureParam kLocalNetworkAccessChecksBlock[] = { {"LocalNetworkAccessChecksWarn", "false"}}; const FeatureEntry::FeatureVariation kLocalNetworkAccessChecksVariations[] = { {"(Blocking)", kLocalNetworkAccessChecksBlock, nullptr}}; +const FeatureEntry::FeatureParam + kUnthrottleAsyncTouchMoves_UnthrottledWhenGsuUnconsumed[] = { + {"policy", "unthrottled_when_gsu_unconsumed"}}; +const FeatureEntry::FeatureParam + kUnthrottleAsyncTouchMoves_UnthrottledAlways[] = { + {"policy", "unthrottled_always"}}; + +const FeatureEntry::FeatureVariation kUnthrottleAsyncTouchMovesVariations[] = { + {"unthrottled when GSU unconsumed", + kUnthrottleAsyncTouchMoves_UnthrottledWhenGsuUnconsumed, nullptr}, + {"unthrottled always", kUnthrottleAsyncTouchMoves_UnthrottledAlways, + nullptr}}; + const FeatureEntry::Choice kEnableBenchmarkingChoices[] = { {flag_descriptions::kEnableBenchmarkingChoiceDisabled, "", ""}, {flag_descriptions::kEnableBenchmarkingChoiceDefaultFeatureStates, - variations::switches::kEnableBenchmarking, ""}, + switches::kEnableBenchmarking, ""}, {flag_descriptions::kEnableBenchmarkingChoiceMatchFieldTrialTestingConfig, - variations::switches::kEnableBenchmarking, + switches::kEnableBenchmarking, variations::switches::kEnableFieldTrialTestingConfig}, }; @@ -810,52 +853,44 @@ const FeatureEntry::FeatureVariation #if !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam - kWebUIOmniboxAimPopupAddContextButtonBelowResults[] = { + kWebUIOmniboxAimPopupAddContextNoTextNoChips[] = { {"Omnibox_AddContextButtonVariant", "below_results"}, -}; -const FeatureEntry::FeatureParam kWebUIOmniboxAimPopupAddContextButtonInline[] = - { - {"Omnibox_AddContextButtonVariant", "inline"}, + {"Omnibox_ShowContextMenuDescription", "false"}, + {"Omnibox_ShowRecentTabChip", "false"}, + {"Omnibox_ShowLensSearchChip", "false"}, }; const FeatureEntry::FeatureParam - kWebUIOmniboxAimPopupAddContextButtonAboveResults[] = { - {"Omnibox_AddContextButtonVariant", "above_results"}, -}; -const FeatureEntry::FeatureParam - kWebUIOmniboxAimPopupAddContextButtonBelowResultsNoContextualChips[] = { + kWebUIOmniboxAimPopupHideClassicContextButton[] = { {"Omnibox_AddContextButtonVariant", "below_results"}, + {"Omnibox_ShowContextMenuDescription", "false"}, + {"Omnibox_HideClassicContextButton", "true"}, {"Omnibox_ShowRecentTabChip", "false"}, {"Omnibox_ShowLensSearchChip", "false"}, }; const FeatureEntry::FeatureParam - kWebUIOmniboxAimPopupAddContextButtonInlineNoContextualChips[] = { - {"Omnibox_AddContextButtonVariant", "inline"}, + kWebUIOmniboxAimPopupAddContextShowTextNoChips[] = { + {"Omnibox_AddContextButtonVariant", "below_results"}, + {"Omnibox_ShowContextMenuDescription", "true"}, {"Omnibox_ShowRecentTabChip", "false"}, {"Omnibox_ShowLensSearchChip", "false"}, }; const FeatureEntry::FeatureParam - kWebUIOmniboxAimPopupAddContextButtonAboveResultsNoContextualChips[] = { - {"Omnibox_AddContextButtonVariant", "above_results"}, - {"Omnibox_ShowRecentTabChip", "false"}, - {"Omnibox_ShowLensSearchChip", "false"}, + kWebUIOmniboxAimPopupAddContextShowTextShowChips[] = { + {"Omnibox_AddContextButtonVariant", "below_results"}, + {"Omnibox_ShowContextMenuDescription", "true"}, + {"Omnibox_ShowRecentTabChip", "true"}, + {"Omnibox_ShowLensSearchChip", "true"}, }; const FeatureEntry::FeatureVariation kWebUIOmniboxAimPopupVariations[] = { - {"- \"Add Context\" button below results", - kWebUIOmniboxAimPopupAddContextButtonBelowResults, nullptr}, - {"- \"Add Context\" button below results - no contextual chips", - kWebUIOmniboxAimPopupAddContextButtonBelowResultsNoContextualChips, - nullptr}, - {"- \"Add Context\" button inline", - kWebUIOmniboxAimPopupAddContextButtonInline, nullptr}, - {"- \"Add Context\" button inline - no contextual chips", - kWebUIOmniboxAimPopupAddContextButtonInlineNoContextualChips, nullptr}, - {"- \"Add Context\" button above results [deprecated]", - kWebUIOmniboxAimPopupAddContextButtonAboveResults, nullptr}, - {"- \"Add Context\" button above results - no contextual chips " - "[deprecated]", - kWebUIOmniboxAimPopupAddContextButtonAboveResultsNoContextualChips, - nullptr}}; + {"- \"Add Context\" button without text, no contextual chips", + kWebUIOmniboxAimPopupAddContextNoTextNoChips, nullptr}, + {"- No Classic \"Add Context\" button, no contextual chips", + kWebUIOmniboxAimPopupHideClassicContextButton, nullptr}, + {"- \"Add Context\" button with text, no contextual chips", + kWebUIOmniboxAimPopupAddContextShowTextNoChips, nullptr}, + {"- \"Add Context\" button with text, show contextual chips", + kWebUIOmniboxAimPopupAddContextShowTextShowChips, nullptr}}; const FeatureEntry::FeatureParam kWebUIOmniboxPopupDebugSxS[] = { {"SxS", "true"}}; @@ -886,18 +921,6 @@ const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = { switches::kDisableGpuRasterization, ""}, }; -const FeatureEntry::FeatureParam kEnableLazyLoadImageForAllInvisiblePage[] = { - {"enabled_page_type", "all_invisible_page"}}; -const FeatureEntry::FeatureParam kEnableLazyLoadImageForPrerenderPage[] = { - {"enabled_page_type", "prerender_page"}}; - -const FeatureEntry::FeatureVariation - kSearchSuggsetionPrerenderTypeVariations[] = { - {"for all invisible page", kEnableLazyLoadImageForAllInvisiblePage, - nullptr}, - {"for prerendering page", kEnableLazyLoadImageForPrerenderPage, - nullptr}}; - const FeatureEntry::Choice kTopChromeTouchUiChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, {flags_ui::kGenericExperimentChoiceAutomatic, switches::kTopChromeTouchUi, @@ -921,9 +944,6 @@ const FeatureEntry::FeatureVariation kBorealisZinkGlDriverVariations[] = { const char kArcEnableVirtioBlkForDataInternalName[] = "arc-enable-virtio-blk-for-data"; -const char kProjectorServerSideSpeechRecognition[] = - "enable-projector-server-side-speech-recognition"; - const char kArcEnableAttestationFlag[] = "arc-enable-attestation"; #endif // BUILDFLAG(IS_CHROMEOS) @@ -1066,6 +1086,24 @@ const FeatureEntry::FeatureVariation kTextSafetyClassifierVariations[] = { kTextSafetyClassifierNoRetractParams, nullptr}, }; +#if BUILDFLAG(IS_WIN) +const FeatureEntry::FeatureParam kStartupLaunchForegroundEnabledParams[] = { + {"mode", "foreground"}, + {"default_preference", "enabled"}, +}; + +const FeatureEntry::FeatureParam kStartupLaunchForegroundDisabledParams[] = { + {"mode", "foreground"}, + {"default_preference", "disabled"}, +}; +const FeatureEntry::FeatureVariation kStartupLaunchVariations[] = { + {"with Foreground launch enabled by default", + kStartupLaunchForegroundEnabledParams, nullptr}, + {"with Foreground launch disabled by default", + kStartupLaunchForegroundDisabledParams, nullptr}, +}; +#endif // BUILDFLAG(IS_WIN) + const FeatureEntry::FeatureParam kPageActionsMigrationParams[] = { {"ai_mode", "true"}, {"autofill_address", "true"}, @@ -1073,24 +1111,16 @@ const FeatureEntry::FeatureParam kPageActionsMigrationParams[] = { {"cookie_controls", "true"}, {"click_to_call", "true"}, {"collaboration_messaging", "true"}, - {"discounts", "true"}, {"file_system_access", "true"}, {"filled_card_information", "true"}, {"find", "true"}, {"intent_picker", "true"}, - {"lens_overlay", "true"}, {"lens_overlay_homework", "true"}, {"manage_passwords", "true"}, {"mandatory_reauth", "true"}, - {"memory_saver", "true"}, - {"offer_notification", "true"}, - {"price_insights", "true"}, - {"price_tracking", "true"}, - {"pwa_install", "true"}, {"reading_mode", "true"}, {"save_payments", "true"}, {"sharing_hub", "true"}, - {"translate", "true"}, {"virtual_card", "true"}, {"zoom", "true"}, }; @@ -1553,10 +1583,8 @@ const FeatureEntry::FeatureParam kComposeboxNextSingleContext[] = { const FeatureEntry::FeatureParam kComposeboxNextSingleContextForRealboxNext[] = { {"NtpComposeboxMaxNumFiles", "1"}, - {"NtpComposeboxShowRecentTabChip", "true"}, }; const FeatureEntry::FeatureParam kComposeboxNextForRealboxNext[] = { - {"NtpComposeboxShowRecentTabChip", "true"}, {"NtpComposeboxContextMenuEnableMultiTabSelection", "true"}, }; @@ -1568,14 +1596,6 @@ const FeatureEntry::FeatureVariation kNtpComposeboxVariations[] = { kComposeboxNextSingleContextForRealboxNext, nullptr}, }; -const FeatureEntry::FeatureParam kShowNextRealboxTallTopContext[] = { - {"RealboxLayoutMode", ntp_realbox::kRealboxLayoutModeTallTopContext}, -}; -const FeatureEntry::FeatureParam - kShowNextRealboxTallTopContextCyclingPlaceholders[] = { - {"RealboxLayoutMode", ntp_realbox::kRealboxLayoutModeTallTopContext}, - {"CyclingPlaceholders", "true"}, -}; const FeatureEntry::FeatureParam kShowNextRealboxCompact[] = { {"RealboxLayoutMode", ntp_realbox::kRealboxLayoutModeCompact}, }; @@ -1586,11 +1606,7 @@ const FeatureEntry::FeatureParam kShowNextRealboxCompactCyclingPlaceholders[] = }; const FeatureEntry::FeatureVariation kNtpRealboxNextVariations[] = { - {"- Show Next Realbox with Top Context Button (TallTopContext)", - kShowNextRealboxTallTopContext, nullptr}, {"- Show Next Realbox (Compact)", kShowNextRealboxCompact, nullptr}, - {"- Show Next Realbox: Top Context, Cycling placeholders", - kShowNextRealboxTallTopContextCyclingPlaceholders, nullptr}, {"- Show Next Realbox: Compact, Cycling placeholders", kShowNextRealboxCompactCyclingPlaceholders, nullptr}, }; @@ -1611,6 +1627,13 @@ const FeatureEntry::FeatureParam {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, }; +const FeatureEntry::FeatureParam + kNtpNextShowChipsUIWithChromeNtpActionClientAndCanvas[] = { + {"NtpNextShowDeepDiveSuggestionsParam", "true"}, + {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, + {"NtpNextEnableCanvasChipParam", "true"}, +}; + const FeatureEntry::FeatureParam kNtpNextShowSimplificationUIWithChromeNtpActionClient[] = { {"NtpNextShowSimplificationUIParam", "true"}, @@ -1618,6 +1641,14 @@ const FeatureEntry::FeatureParam {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, }; +const FeatureEntry::FeatureParam + kNtpNextShowSimplificationUIWithChromeNtpActionClientAndCanvas[] = { + {"NtpNextShowSimplificationUIParam", "true"}, + {"NtpNextShowDeepDiveSuggestionsParam", "true"}, + {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, + {"NtpNextEnableCanvasChipParam", "true"}, +}; + const FeatureEntry::FeatureParam kNtpNextShowChipsUIWithNtpActionClientWithNoRecentTabInSteadyState[] = { {"NtpNextShowDeepDiveSuggestionsParam", "true"}, @@ -1625,6 +1656,15 @@ const FeatureEntry::FeatureParam {"kNtpNextShowStaticRecentTabChipParam", "false"}, }; +const FeatureEntry::FeatureParam + kNtpNextShowChipsUIWithNtpActionClientWithCanvasAndNoRecentTabInSteadyState + [] = { + {"NtpNextShowDeepDiveSuggestionsParam", "true"}, + {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, + {"kNtpNextShowStaticRecentTabChipParam", "false"}, + {"NtpNextEnableCanvasChipParam", "true"}, +}; + const FeatureEntry::FeatureParam kNtpNextShowSimplificationUIWithNtpActionClientWithNoRecentTabInSteadyState [] = { @@ -1634,6 +1674,16 @@ const FeatureEntry::FeatureParam {"kNtpNextShowStaticRecentTabChipParam", "false"}, }; +const FeatureEntry::FeatureParam + kNtpNextShowSimplificationUIWithNtpActionClientWithCanvasAndNoRecentTabInSteadyState + [] = { + {"NtpNextShowSimplificationUIParam", "true"}, + {"NtpNextShowDeepDiveSuggestionsParam", "true"}, + {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, + {"kNtpNextShowStaticRecentTabChipParam", "false"}, + {"NtpNextEnableCanvasChipParam", "true"}, +}; + const FeatureEntry::FeatureParam kNtpNextShowSimplificationUIWithDismissal[] = { {"NtpNextShowSimplificationUIParam", "true"}, {"NtpNextShowDeepDiveSuggestionsParam", "true"}, @@ -1641,6 +1691,10 @@ const FeatureEntry::FeatureParam kNtpNextShowSimplificationUIWithDismissal[] = { {"NtpNextShowDismissalUIParam", "true"}, }; +const FeatureEntry::FeatureParam kNtpNextAllowDisablement[] = { + {"NtpNextDisablementContextMenuParam", "true"}, +}; + const FeatureEntry::FeatureVariation kNtpNextVariations[] = { {"- Show Deep Dive Suggestions", kNtpNextShowDeepDiveSuggestions, nullptr}, {"- Show Row UI With Deep Dive", kNtpNextShowSimplificationUIWithDeepDive, @@ -1653,11 +1707,24 @@ const FeatureEntry::FeatureVariation kNtpNextVariations[] = { "State", kNtpNextShowChipsUIWithNtpActionClientWithNoRecentTabInSteadyState, nullptr}, - {"- Show Row UI with a New Client and No Recent Tab Chip in the Steady " + {"- Show Row UI with a New Client and No Recent Tab Chip in the Steady " "State", kNtpNextShowSimplificationUIWithNtpActionClientWithNoRecentTabInSteadyState, nullptr}, + {"- Show Chips UI with a New Suggestions Client and Canvas Chip", + kNtpNextShowChipsUIWithChromeNtpActionClientAndCanvas, nullptr}, + {"- Show Row UI with a New Suggestions Client and Canvas Chip", + kNtpNextShowSimplificationUIWithChromeNtpActionClientAndCanvas, nullptr}, + {"- Show Chips UI with a New Client, Canvas Chip, and No Recent Tab Chip " + "in the Steady State", + kNtpNextShowChipsUIWithNtpActionClientWithCanvasAndNoRecentTabInSteadyState, + nullptr}, + {"- Show Row UI with a New Client, Canvas Chip, and No Recent Tab Chip in " + "the Steady State", + kNtpNextShowSimplificationUIWithNtpActionClientWithCanvasAndNoRecentTabInSteadyState, + nullptr}, {"- Show Dismissal UI", kNtpNextShowSimplificationUIWithDismissal, nullptr}, + {"- Allow Disable", kNtpNextAllowDisablement, nullptr}, }; const FeatureEntry::FeatureParam kNtpFeatureOptimizationModuleRemovalDefault[] = @@ -2244,9 +2311,16 @@ const FeatureEntry::FeatureVariation kNumSrpZpsRelatedSearches[] = { #if !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kTabGroupsFocusingPinnedTabs[] = { {"tab_groups_focusing_pinned_tabs", "true"}}; +const FeatureEntry::FeatureParam kTabGroupsFocusingDefaultToFocusedOnly[] = { + {"tab_groups_focusing_default_to_focused", "true"}}; +const FeatureEntry::FeatureParam kTabGroupsFocusingAll[] = { + {"tab_groups_focusing_pinned_tabs", "true"}, + {"tab_groups_focusing_default_to_focused", "true"}}; const FeatureEntry::FeatureVariation kTabGroupsFocusingVariations[] = { {" - show pinned tabs", kTabGroupsFocusingPinnedTabs}, + {" - autofocus opened groups only", kTabGroupsFocusingDefaultToFocusedOnly}, + {" - autofocus and show pinned tabs", kTabGroupsFocusingAll}, }; #endif @@ -2667,24 +2741,21 @@ const FeatureEntry::FeatureParam kNewTabPageCustomizationV2_ShowLogoAndSearchBox[] = { {"show_logo_and_search_box", "true"}}; +const FeatureEntry::FeatureParam kNewTabPageCustomizationV2_EnableLogs[] = { + {"enable_logs", "true"}}; + const FeatureEntry::FeatureVariation kNewTabPageCustomizationV2Variations[] = { {"Show color picker", kNewTabPageCustomizationV2_ShowColorPicker, nullptr}, {"Daily refresh after 20s", kNewTabPageCustomizationV2_DailyRefreshThresholdMs, nullptr}, {"Show logo and search box in the preview dialog", - kNewTabPageCustomizationV2_ShowLogoAndSearchBox, nullptr}}; + kNewTabPageCustomizationV2_ShowLogoAndSearchBox, nullptr}, + {"Enable logs", kNewTabPageCustomizationV2_EnableLogs, nullptr}}; -const FeatureEntry::FeatureParam kAndroidComposeplate_V2Enabled[] = { - {"v2_enabled", "true"}}; -const FeatureEntry::FeatureParam kAndroidComposeplate_HideIncognitoButton[] = { - {"hide_incognito_button", "true"}}; const FeatureEntry::FeatureParam kAndroidComposeplate_SkipLocaleCheck[] = { {"skip_locale_check", "true"}}; const FeatureEntry::FeatureVariation kAndroidComposeplateVariations[] = { - {"V2 enabled", kAndroidComposeplate_V2Enabled, nullptr}, - {"Hide incognito button", kAndroidComposeplate_HideIncognitoButton, - nullptr}, {"Skip locale check", kAndroidComposeplate_SkipLocaleCheck, nullptr}}; const FeatureEntry::FeatureParam @@ -2727,28 +2798,10 @@ const FeatureEntry::FeatureVariation kAuxiliarySearchDonationVariations[] = { {"500 counts", kAuxiliarySearchDonation_MaxDonation_500, nullptr}, }; -const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_AA[] = { - {features::kBoardingPassDetectorUrlParamName, - "https://www.aa.com/checkin/viewMobileBoardingPass"}}; -const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_All[] = { - {features::kBoardingPassDetectorUrlParamName, - "https://www.aa.com/checkin/viewMobileBoardingPass,https://united.com"}}; -const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_Test[] = { - {features::kBoardingPassDetectorUrlParamName, "http"}}; -const FeatureEntry::FeatureVariation kBoardingPassDetectorVariations[] = { - {"AA", kBoardingPassDetectorUrl_AA, nullptr}, - {"All", kBoardingPassDetectorUrl_All, nullptr}, - {"Test", kBoardingPassDetectorUrl_Test, nullptr}, -}; #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kShowNewTabAnimationsLogs[] = { - {"logs", "true"}}; -const FeatureEntry::FeatureVariation kShowNewTabAnimationsVariations[] = { - {"- Add logs", kShowNewTabAnimationsLogs, nullptr}}; - const FeatureEntry::FeatureParam kTabStorageSqlitePrototypeAuthoritativeReads[] = { {"authoritative_read_source", "true"}}; @@ -2789,6 +2842,17 @@ const FeatureEntry::Choice kWebOtpBackendChoices[] = { }; #endif // BUILDFLAG(IS_ANDROID) +// The choices for the Send Tab To Self enhanced handoff experiment. +const FeatureEntry::Choice kSendTabToSelfEnhancedHandoffChoices[] = { + {flags_ui::kGenericExperimentChoiceDefault, "", ""}, + {flags_ui::kGenericExperimentChoiceEnabled, switches::kEnableFeatures, + "SendTabToSelfPropagateFormFields," + "SendTabToSelfPropagateScrollPosition"}, + {flags_ui::kGenericExperimentChoiceDisabled, switches::kDisableFeatures, + "SendTabToSelfPropagateFormFields," + "SendTabToSelfPropagateScrollPosition"}, +}; + // The choices for --enable-experimental-cookie-features. This really should // just be a SINGLE_VALUE_TYPE, but it is misleading to have the choices be // labeled "Disabled"/"Enabled". So instead this is made to be a @@ -3301,39 +3365,6 @@ const FeatureEntry::FeatureVariation kVcSegmentationModelVariations[] = { {"Lower resolution model", kVcSegmentationModelLowerResolution, nullptr}, }; -const FeatureEntry::FeatureParam kVcLightIntensity10[] = { - {"light_intensity", "1.0"}, -}; - -const FeatureEntry::FeatureParam kVcLightIntensity13[] = { - {"light_intensity", "1.3"}, -}; - -const FeatureEntry::FeatureParam kVcLightIntensity15[] = { - {"light_intensity", "1.5"}, -}; - -const FeatureEntry::FeatureParam kVcLightIntensity17[] = { - {"light_intensity", "1.7"}, -}; - -const FeatureEntry::FeatureParam kVcLightIntensity18[] = { - {"light_intensity", "1.8"}, -}; - -const FeatureEntry::FeatureParam kVcLightIntensity20[] = { - {"light_intensity", "2.0"}, -}; - -const FeatureEntry::FeatureVariation kVcLightIntensityVariations[] = { - {"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 kCrOSLateBootMissiveDisableStorageDegradation[] = { {"controlled_degradation", "false"}}; @@ -3443,16 +3474,19 @@ const FeatureEntry::Choice kReplaceSyncPromosWithSignInPromosChoices[] = { {"Disabled", switches::kDisableFeatures, "ReplaceSyncPromosWithSignInPromos"}, {"Enabled", switches::kEnableFeatures, - "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/false"}, + "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/" + "false/explicit_signin_for_bookmarks/false"}, {"Enabled with follow-ups", switches::kEnableFeatures, "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", + "false/explicit_signin_for_bookmarks/false,UnoPhase2FollowUp"}, + {"Enabled with explicit signin for extensions and bookmarks", switches::kEnableFeatures, - "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/true," - "UnoPhase2FollowUp"}, + "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/" + "true/explicit_signin_for_bookmarks/true"}, + {"Enabled with explicit signin for extensions and bookmarks and follow-ups", + switches::kEnableFeatures, + "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/" + "true/explicit_signin_for_bookmarks/true,UnoPhase2FollowUp"}, }; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) @@ -3470,10 +3504,6 @@ const FeatureEntry::FeatureVariation kLinkPreviewTriggerTypeVariations[] = { {"Long Press", kLinkPreviewTriggerTypeLongPress, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_ANDROID) - -#endif // BUILDFLAG(IS_ANDROID) - const FeatureEntry::FeatureParam kGroupSuggestionEnableRecentlyOpenedOnly[] = { {"group_suggestion_enable_recently_opened", "true"}, {"group_suggestion_enable_switch_between", "false"}, @@ -3636,7 +3666,7 @@ const FeatureEntry::FeatureVariation kSensitiveContentVariations[] = { #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_CHROMEOS) + BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kContextualCueingEnabledNoEngagementCap[] = { {"BackoffTime", "0h"}, {"BackoffMultiplierBase", "0.0"}, @@ -3648,7 +3678,7 @@ const FeatureEntry::FeatureVariation kContextualCueingEnabledOptions[] = { {"no engagement caps", kContextualCueingEnabledNoEngagementCap, nullptr}, }; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || - // BUILDFLAG(IS_CHROMEOS) + // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) #if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) const FeatureEntry::FeatureParam @@ -3679,13 +3709,6 @@ const FeatureEntry::FeatureVariation nullptr}}; #endif // PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) -const FeatureEntry::FeatureParam kSendTabIOSPushNotificationsWithURLImage[] = { - {send_tab_to_self::kSendTabIOSPushNotificationsURLImageParam, "true"}}; -const FeatureEntry::FeatureVariation kSendTabIOSPushNotificationsVariations[] = - { - {"With URL Image", kSendTabIOSPushNotificationsWithURLImage, nullptr}, -}; - #if BUILDFLAG(IS_ANDROID) && PA_BUILDFLAG(HAS_MEMORY_TAGGING) && \ PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) // Feature variations for kPartitionAllocMemoryTagging. @@ -3822,7 +3845,6 @@ const FeatureEntry::FeatureVariation {"30 days", kAutofillVcnEnrollStrikeExpiryTime_30Days, nullptr}}; // LINT.ThenChange(//ios/chrome/browser/flags/about_flags.mm:AutofillVcnEnrollStrikeExpiryTime) -#if BUILDFLAG(ENABLE_GLIC) // Variations of the glic panel reset for the top Chrome button. const FeatureEntry::FeatureParam kGlicPanelResetTopChromeButtonOnOpen_1s[] = { {"glic-panel-reset-delay-ms", "1000"}}; @@ -3984,16 +4006,18 @@ const FeatureEntry::Choice kGlicSetG1ForMultiInstance[] = { const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypeAutopush[] = { {"glic-guest-url-preset-type", "0"}}; -const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypePreprod[] = { +const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypeStaging[] = { {"glic-guest-url-preset-type", "1"}}; -const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypeProd[] = { +const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypePreprod[] = { {"glic-guest-url-preset-type", "2"}}; +const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypeProd[] = { + {"glic-guest-url-preset-type", "3"}}; const FeatureEntry::FeatureVariation kGlicGuestUrlPresetTypes[] = { {"Auto-push", kGlicGuestUrlPresetTypeAutopush, nullptr}, + {"Staging", kGlicGuestUrlPresetTypeStaging, nullptr}, {"Pre-prod", kGlicGuestUrlPresetTypePreprod, nullptr}, {"Prod", kGlicGuestUrlPresetTypeProd, nullptr}}; -#endif // BUILDFLAG(ENABLE_GLIC) const FeatureEntry::FeatureParam kAutofillShowTypePredictionsAsTitle[] = { {"as-title", "true"}}; @@ -4215,14 +4239,6 @@ const FeatureEntry::FeatureVariation kAndroidHubSearchTabGroupsVariations[] = { #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kAndroidTabHighlightingForceCtrlClick[] = { - {"force_ctrl_click", "true"}}; -const FeatureEntry::FeatureParam kAndroidTabHighlightingForceShiftClick[] = { - {"force_shift_click", "true"}}; -const FeatureEntry::FeatureVariation kAndroidTabHighlightingVariations[] = { - {"Force Ctrl Click", kAndroidTabHighlightingForceCtrlClick, nullptr}, - {"Force Shift Click", kAndroidTabHighlightingForceShiftClick, nullptr}}; - const FeatureEntry::FeatureParam kTabBottomSheetDontShowFusebox[] = { {"dont_show_fusebox", "true"}}; const FeatureEntry::FeatureVariation kTabBottomSheetVariations[] = { @@ -4283,6 +4299,18 @@ const FeatureEntry::FeatureVariation kAndroidTipsNotificationsVariations[] = { kAndroidTipsNotificationsResetFeatureTipShown, nullptr}, }; +const FeatureEntry::FeatureParam kAndroidTipsNotificationsV2EcosystemLockIn[] = + {{"ecosystem_lock_in", "true"}}; +const FeatureEntry::FeatureParam + kAndroidTipsNotificationsV2UtilityAndOrganization[] = { + {"utility_and_organization", "true"}}; +const FeatureEntry::FeatureVariation kAndroidTipsNotificationsV2Variations[] = { + {" - Ecosystem Lock In", kAndroidTipsNotificationsV2EcosystemLockIn, + nullptr}, + {" - Utility and Organization", + kAndroidTipsNotificationsV2UtilityAndOrganization, nullptr}, +}; + const FeatureEntry::FeatureParam kRobustWindowManagementBulkCloseEnabled[] = { {"bulk_close", "true"}}; const FeatureEntry::FeatureVariation kRobustWindowManagementVariations[] = { @@ -4296,6 +4324,11 @@ const FeatureEntry::FeatureVariation {"Open Fullscreen", kRobustWindowManagementExperimentalOpenAdjacently, nullptr}}; +const FeatureEntry::FeatureParam kAndroidNavigationBlurSkipSrpParams[] = { + {"skip_srp", "true"}}; +const FeatureEntry::FeatureVariation kNavigationBlurVariations[] = { + {"- Skip SRP", kAndroidNavigationBlurSkipSrpParams, nullptr}}; + #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) @@ -4304,6 +4337,19 @@ constexpr char kWebiumFeatures[] = "Webium,AttachUnownedInnerWebContents,ExtensionsMenuAccessControl"; #endif // !BUILDFLAG(IS_ANDROID) +const FeatureEntry::FeatureParam kMobileNTPPromoOnDesktopGeneral[] = { + {kMobileNTPPromoOnDesktopVariationParam, "0"}}; +const FeatureEntry::FeatureParam kMobileNTPPromoOnDesktopPasswords[] = { + {kMobileNTPPromoOnDesktopVariationParam, "1"}}; +const FeatureEntry::FeatureParam kMobileNTPPromoOnDesktopAll[] = { + {kMobileNTPPromoOnDesktopVariationParam, "2"}}; + +const FeatureEntry::FeatureVariation kMobileNTPPromoOnDesktopVariations[] = { + {"General", kMobileNTPPromoOnDesktopGeneral, nullptr}, + {"Passwords", kMobileNTPPromoOnDesktopPasswords, nullptr}, + {"All", kMobileNTPPromoOnDesktopAll, nullptr}, +}; + const FeatureEntry::FeatureParam kMobilePromoOnDesktopForcePromoTypeQRCode[] = { {kMobilePromoOnDesktopForcePromoTypeParam, "0"}}; const FeatureEntry::FeatureParam kMobilePromoOnDesktopForcePromoTypeReminder[] = @@ -4348,30 +4394,37 @@ const FeatureEntry::FeatureParam {kMobilePromoOnDesktopNotificationParam, "true"}}; const FeatureEntry::FeatureVariation kMobilePromoOnDesktopVariations[] = { - {" - Lens Promo", kMobilePromoOnDesktopLens, nullptr}, - {" - Lens Promo with push notification", - kMobilePromoOnDesktopLensNotification, nullptr}, {" - ESB", kMobilePromoOnDesktopESB, nullptr}, {" - ESB with push notification", kMobilePromoOnDesktopESBNotification, nullptr}, {" - PW Autofill", kMobilePromoOnDesktopAutofill, nullptr}, {" - PW Autofill with push notification", kMobilePromoOnDesktopAutofillNotification, nullptr}, +}; + +const FeatureEntry::FeatureVariation + kMobilePromoOnDesktopWithQRCodeVariations[] = { + {" - ESB", kMobilePromoOnDesktopESB, nullptr}, + {" - PW Autofill", kMobilePromoOnDesktopAutofill, nullptr}, +}; + +const FeatureEntry::FeatureVariation kMobilePromoOnDesktopVariationsWave1[] = { {" - Tab Groups", kMobilePromoOnDesktopTabGroups, nullptr}, {" - Tab Groups with push notification", kMobilePromoOnDesktopTabGroupsNotification, nullptr}, {" - Price Tracking", kMobilePromoOnDesktopPriceTracking, nullptr}, {" - Price Tracking with push notification", kMobilePromoOnDesktopPriceTrackingNotification, nullptr}, + {" - Lens Promo", kMobilePromoOnDesktopLens, nullptr}, + {" - Lens Promo with push notification", + kMobilePromoOnDesktopLensNotification, nullptr}, }; const FeatureEntry::FeatureVariation - kMobilePromoOnDesktopWithQRCodeVariations[] = { - {" - Lens Promo", kMobilePromoOnDesktopLens, nullptr}, - {" - ESB", kMobilePromoOnDesktopESB, nullptr}, - {" - PW Autofill", kMobilePromoOnDesktopAutofill, nullptr}, + kMobilePromoOnDesktopWithQRCodeVariationsWave1[] = { {" - Tab Groups", kMobilePromoOnDesktopTabGroups, nullptr}, {" - Price Tracking", kMobilePromoOnDesktopPriceTracking, nullptr}, + {" - Lens Promo", kMobilePromoOnDesktopLens, nullptr}, }; #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ @@ -4452,6 +4505,19 @@ const FeatureEntry::FeatureVariation }; #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ + BUILDFLAG(IS_CHROMEOS) +const FeatureEntry::FeatureParam kProjectsPanelWithoutThreadsVariation[] = { + {"include_threads_in_projects_panel", "false"}}; +const FeatureEntry::FeatureParam kProjectsPanelWithThreadsVariation[] = { + {"include_threads_in_projects_panel", "true"}}; + +const FeatureEntry::FeatureVariation kProjectsPanelVariations[] = { + {"without threads", kProjectsPanelWithoutThreadsVariation, nullptr}, + {"with threads", kProjectsPanelWithThreadsVariation, nullptr}}; +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ + // BUILDFLAG(IS_CHROMEOS) + #if BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kSeamlessSigninTwoButtonsContinue[] = { {"seamless-signin-promo-type", "twoButtons"}, @@ -4496,20 +4562,36 @@ const FeatureEntry::FeatureVariation kProfilePickerTextVariations[] = { {"V4: Sharing a computer?", kProfilePickerTextVariation4, nullptr}, {"V5: Keep everything in Chrome", kProfilePickerTextVariation5, nullptr}, }; + +const FeatureEntry::FeatureParam kDisableU18FeedbackDesktopForced[] = { + {"state", "forced"}}; +const FeatureEntry::FeatureVariation kDisableU18FeedbackDesktopVariations[] = { + {"Forced", kDisableU18FeedbackDesktopForced, nullptr}, +}; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) #if BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kAndroidBookmarkBarFastFollowStandard[] = { - {"dynamic_width_enabled", "false"}}; +const FeatureEntry::FeatureParam kAndroidBookmarkBarFastFollowDynamic[] = { + {"dynamic_width_enabled", "true"}}; const FeatureEntry::FeatureVariation kAndroidBookmarkBarFastFollowVariations[] = - {{"(Standard Width - with animations)", - kAndroidBookmarkBarFastFollowStandard, nullptr}}; + {{"(Dynamic Width - no animations)", kAndroidBookmarkBarFastFollowDynamic, + nullptr}}; const FeatureEntry::FeatureParam kDefaultBrowserPromoEntryPointSettingsOnly[] = {{"show_app_menu_item", "false"}}; const FeatureEntry::FeatureVariation kDefaultBrowserPromoEntryPointVariations[] = { {"(Settings Only - No App Menu)", kDefaultBrowserPromoEntryPointSettingsOnly, nullptr}}; +const FeatureEntry::FeatureParam kDefaultBrowserPromoFrePrimerNoInstructions[] = + {{"fre_promo_arm", "primer_no_instructions"}}; +const FeatureEntry::FeatureParam + kDefaultBrowserPromoFrePrimerWithPromotionalText[] = { + {"fre_promo_arm", "primer_with_promotional_text"}}; +const FeatureEntry::FeatureVariation kDefaultBrowserPromoFreVariations[] = { + {"(Primer - no instructions)", kDefaultBrowserPromoFrePrimerNoInstructions, + nullptr}, + {"(Primer - with promotional text)", + kDefaultBrowserPromoFrePrimerWithPromotionalText, nullptr}}; const FeatureEntry::FeatureParam kAndroidDesktopZoomScalingFactorSmall[] = { {"desktop-zoom-scaling-factor", "109"}, {"monitor-zoom-scaling-factor", "120"}}; @@ -4526,30 +4608,53 @@ const FeatureEntry::FeatureVariation kAndroidDesktopZoomScalingVariations[] = { nullptr}, {"with 120 scaling, 130 monitor", kAndroidDesktopZoomScalingFactorLarge, nullptr}}; + #endif // BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kContextualTaskPermanentButton[] = { - {"ContextualTasksEntryPoint", "toolbar-permanent"}}; -const FeatureEntry::FeatureParam kContextualTaskEphemeralButton[] = { - {"ContextualTasksEntryPoint", "toolbar-revisit"}}; -const FeatureEntry::FeatureParam kContextualTaskPageAction[] = { - {"ContextualTasksEntryPoint", "page-action-revisit"}}; -const FeatureEntry::FeatureParam kContextualTaskDisableSidePanel[] = { - {"ContextualTasksEntryPoint", "toolbar-revisit"}, - {"ContextualTasksOpenSidePanelOnLinkClicked", "false"}}; -const FeatureEntry::FeatureParam kContextualTaskDisableLens[] = { - {"ContextualTasksEntryPoint", "toolbar-revisit"}, - {"ContextualTasksEnableLensInContextualTasks", "false"}}; +// LINT.IfChange(ContextualTasksArms) +const FeatureEntry::FeatureParam kArm1FullBundleWithExpandoButton[] = { + {"ContextualTasksExpandButtonOptions", "side-panel-expand-button"}}; +const FeatureEntry::FeatureParam + kArm2FullBundleNoAutoSidePanelOpenWithExpandoButton[] = { + {"ContextualTasksExpandButtonOptions", "side-panel-expand-button"}, + {"ContextualTasksOpenSidePanelOnLinkClicked", "false"}}; +const FeatureEntry::FeatureParam + kArm3FullBundleWithoutLensMigrationWithExpandoButton[] = { + {"ContextualTasksExpandButtonOptions", "side-panel-expand-button"}, + {"ContextualTasksEnableLensInContextualTasks", "false"}}; +const FeatureEntry::FeatureParam + kArm4FullBundleNoAutoAddedContextInSidePanelWithExpandoButton[] = { + {"ContextualTasksExpandButtonOptions", "side-panel-expand-button"}, + {"ContextualTasksTabAutoSuggestionChipEnabled", "false"}}; +const FeatureEntry::FeatureParam kArm5FullBundleWithCloseToExpandButton[] = { + {"ContextualTasksExpandButtonOptions", "toolbar-close-button"}}; +const FeatureEntry::FeatureParam + kArm6FullBundleWithoutLensMigrationWithCloseToExpandButton[] = { + {"ContextualTasksExpandButtonOptions", "toolbar-close-button"}, + {"ContextualTasksEnableLensInContextualTasks", "false"}}; +const FeatureEntry::FeatureParam + kArm7FullBundleNoAutoAddedContextInSidePanelWithCloseToExpandButton[] = { + {"ContextualTasksExpandButtonOptions", "toolbar-close-button"}, + {"ContextualTasksTabAutoSuggestionChipEnabled", "false"}}; -const FeatureEntry::FeatureVariation kContextualTaskEntryPointVariations[] = { - {"Arm 1: Full bundle with ephemeral toolbar button", - kContextualTaskEphemeralButton, nullptr}, - {"Arm 2: Full bundle, without AIM link clicks opening side panel", - kContextualTaskDisableSidePanel, nullptr}, - {"Arm 3: Full bundle, without Lens migration", kContextualTaskDisableLens, +const FeatureEntry::FeatureVariation kContextualTasksVariations[] = { + {"Arm 1: Full bundle with expando button", kArm1FullBundleWithExpandoButton, nullptr}, - {"permanent toolbar button", kContextualTaskPermanentButton, nullptr}, - {"page action chip", kContextualTaskPageAction, nullptr}}; + {"Arm 2: Full bundle, no auto side panel open, expando button", + kArm2FullBundleNoAutoSidePanelOpenWithExpandoButton, nullptr}, + {"Arm 3: Full bundle, without Lens migration, expando button", + kArm3FullBundleWithoutLensMigrationWithExpandoButton, nullptr}, + {"Arm 4: Full bundle, No auto added context in side panel, expando button", + kArm4FullBundleNoAutoAddedContextInSidePanelWithExpandoButton, nullptr}, + {"Arm 5: Full bundle with close to expand button", + kArm5FullBundleWithCloseToExpandButton, nullptr}, + {"Arm 6: Full bundle, without Lens migration, close to expand button", + kArm6FullBundleWithoutLensMigrationWithCloseToExpandButton, nullptr}, + {"Arm 7: Full bundle, No auto added context in side panel, close to expand " + "button", + kArm7FullBundleNoAutoAddedContextInSidePanelWithCloseToExpandButton, + nullptr}}; +// LINT.ThenChange(chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc) const FeatureEntry::FeatureParam kTaskScopedSidePanel[] = { {"ContextualTasksTaskScopedSidePanel", "true"}}; @@ -4604,6 +4709,56 @@ const FeatureEntry::FeatureVariation {"- set_from_flags", kDeviceBoundSessionsForRestrictedSitesExperimentIdFromFlags, nullptr}}; +#if !BUILDFLAG(IS_ANDROID) +const FeatureEntry::FeatureParam + kCastStreamingExponentialVideoBitrateAlgorithmDefault[] = { + {"window_size", "30"}, + {"drop_threshold", "1"}, + {"increase_factor", "1.05"}, + {"decrease_factor", "0.9"}, + {"dynamic_window_multiplier", "0.0"}, +}; + +const FeatureEntry::FeatureParam + kCastStreamingExponentialVideoBitrateAlgorithmAggressive[] = { + {"window_size", "30"}, + {"drop_threshold", "1"}, + {"increase_factor", "1.1"}, + {"decrease_factor", "0.9"}, + {"dynamic_window_multiplier", "0.0"}, +}; + +const FeatureEntry::FeatureParam + kCastStreamingExponentialVideoBitrateAlgorithmConservative[] = { + {"window_size", "30"}, + {"drop_threshold", "1"}, + {"increase_factor", "1.05"}, + {"decrease_factor", "0.8"}, + {"dynamic_window_multiplier", "0.0"}, +}; + +const FeatureEntry::FeatureParam + kCastStreamingExponentialVideoBitrateAlgorithmLargeWindow[] = { + {"window_size", "60"}, + {"drop_threshold", "2"}, + {"increase_factor", "1.05"}, + {"decrease_factor", "0.9"}, + {"dynamic_window_multiplier", "0.0"}, +}; + +const FeatureEntry::FeatureVariation + kCastStreamingExponentialVideoBitrateAlgorithmVariations[] = { + {"Default (30, 1, 1.05, 0.9)", + kCastStreamingExponentialVideoBitrateAlgorithmDefault, nullptr}, + {"Aggressive Increase (1.1)", + kCastStreamingExponentialVideoBitrateAlgorithmAggressive, nullptr}, + {"Conservative Decrease (0.8)", + kCastStreamingExponentialVideoBitrateAlgorithmConservative, nullptr}, + {"Large Window (60)", + kCastStreamingExponentialVideoBitrateAlgorithmLargeWindow, nullptr}, +}; +#endif // !BUILDFLAG(IS_ANDROID) + const FeatureEntry::FeatureParam kPermissionsGestureGatedPromptsMuteNotifications[] = { {"mute_notifications", "true"}}; @@ -4623,6 +4778,28 @@ const FeatureEntry::FeatureVariation {"Mute Both", kPermissionsGestureGatedPromptsMuteBoth, nullptr}, }; +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +const FeatureEntry::FeatureParam kSearchEngineExplicitChoiceDialogEscapable[] = + {{"escapable", "true"}}; + +const FeatureEntry::FeatureVariation + kSearchEngineExplicitChoiceDialogVariations[] = { + {"Escapable", kSearchEngineExplicitChoiceDialogEscapable, nullptr}, +}; +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) + +#if BUILDFLAG(ENABLE_DICE_SUPPORT) +const FeatureEntry::FeatureParam kSigninPromoOnAvatarPillShortDelays[] = { + {"startup_delay_for_promo_show", "3s"}, + {"delay_for_next_promo_allowed", "15s"}, +}; + +const FeatureEntry::FeatureVariation kSigninPromoOnAvatarPillVariation[] = { + {"Short delays (for testing)", kSigninPromoOnAvatarPillShortDelays, + nullptr}, +}; +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) + // RECORDING USER METRICS FOR FLAGS: // ----------------------------------------------------------------------------- // The first line of the entry is the internal name. @@ -4651,8 +4828,7 @@ const FeatureEntry kFeatureEntries[] = { // //tools/flags/generate_unexpire_flags.py. #include "build/chromeos_buildflags.h" #include "chrome/browser/unexpire_flags_gen.inc" - {variations::switches::kEnableBenchmarking, - flag_descriptions::kEnableBenchmarkingName, + {switches::kEnableBenchmarking, flag_descriptions::kEnableBenchmarkingName, flag_descriptions::kEnableBenchmarkingDescription, kOsAll, MULTI_VALUE_TYPE(kEnableBenchmarkingChoices)}, {"ignore-gpu-blocklist", flag_descriptions::kIgnoreGpuBlocklistName, @@ -4772,6 +4948,12 @@ const FeatureEntry kFeatureEntries[] = { autofill::features::debug::kAutofillShowTypePredictions, kAutofillShowTypePredictionsVariations, "AutofillShowTypePredictions")}, +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_CHROMEOS) + {"autofill-at-memory", flag_descriptions::kAutofillAtMemoryName, + flag_descriptions::kAutofillAtMemoryDescription, kOsDesktop, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAtMemory)}, +#endif {"autofill-more-prominent-popup", flag_descriptions::kAutofillMoreProminentPopupName, flag_descriptions::kAutofillMoreProminentPopupDescription, kOsDesktop, @@ -4818,18 +5000,14 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( features::kOverlayScrollbarFlashOnlyOnceVisibleOnViewport)}, #endif // USE_AURA - {"enable-lazy-load-image-for-invisible-pages", - flag_descriptions::kEnableLazyLoadImageForInvisiblePageName, - flag_descriptions::kEnableLazyLoadImageForInvisiblePageDescription, kOsAll, - FEATURE_WITH_PARAMS_VALUE_TYPE( - blink::features::kEnableLazyLoadImageForInvisiblePage, - kSearchSuggsetionPrerenderTypeVariations, - "EnableLazyLoadImageForInvisiblePage")}, #if BUILDFLAG(ENABLE_JXL_DECODER) {"enable-jxl-image-format", flag_descriptions::kJxlImageFormatName, flag_descriptions::kJxlImageFormatDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kJXLImageFormat)}, #endif // BUILDFLAG(ENABLE_JXL_DECODER) + {"enable-rusty-bmp", flag_descriptions::kRustyBmpName, + flag_descriptions::kRustyBmpDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kRustyBmpFeature)}, {"soft-navigation-heuristics", flag_descriptions::kSoftNavigationHeuristicsName, flag_descriptions::kSoftNavigationHeuristicsDescription, kOsAll, @@ -4851,11 +5029,6 @@ const FeatureEntry kFeatureEntries[] = { {"enable-javascript-harmony", flag_descriptions::kJavascriptHarmonyName, flag_descriptions::kJavascriptHarmonyDescription, kOsAll, SINGLE_VALUE_TYPE(switches::kJavaScriptHarmony)}, - {"enable-enterprise-badging-for-ntp-footer", - flag_descriptions::kEnterpriseBadgingForNtpFooterName, - flag_descriptions::kEnterpriseBadgingForNtpFooterDescription, - kOsMac | kOsWin | kOsLinux, - FEATURE_VALUE_TYPE(features::kEnterpriseBadgingForNtpFooter)}, {"enable-experimental-webassembly-features", flag_descriptions::kExperimentalWebAssemblyFeaturesName, flag_descriptions::kExperimentalWebAssemblyFeaturesDescription, kOsAll, @@ -4891,6 +5064,10 @@ const FeatureEntry kFeatureEntries[] = { {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName, flag_descriptions::kGpuRasterizationDescription, kOsAll, MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)}, + {"fallback-to-sw-if-gles3-not-supported", + flag_descriptions::kFallbackToSWIfGLES3NotSupportedName, + flag_descriptions::kFallbackToSWIfGLES3NotSupportedDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kFallbackToSWIfGLES3NotSupported)}, {"enable-experimental-web-platform-features", flag_descriptions::kExperimentalWebPlatformFeaturesName, flag_descriptions::kExperimentalWebPlatformFeaturesDescription, kOsAll, @@ -5468,6 +5645,12 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDesktopPWAsAppTitleName, flag_descriptions::kDesktopPWAsAppTitleDescription, kOsDesktop, FEATURE_VALUE_TYPE(blink::features::kWebAppEnableAppTitle)}, + {"tab-strip-declutter", flag_descriptions::kTabStripDeclutterName, + flag_descriptions::kTabStripDeclutterDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kTabStripDeclutter)}, + {"detached-tabs", flag_descriptions::kDetachedTabsName, + flag_descriptions::kDetachedTabsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kDetachedTabs)}, {"enable-desktop-pwas-elided-extensions-menu", flag_descriptions::kDesktopPWAsElidedExtensionsMenuName, flag_descriptions::kDesktopPWAsElidedExtensionsMenuDescription, kOsDesktop, @@ -5485,7 +5668,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDesktopPWAsTabStripCustomizationsDescription, kOsDesktop, FEATURE_VALUE_TYPE(blink::features::kDesktopPWAsTabStripCustomizations)}, - {"enable-desktop-pwas-sub-apps", flag_descriptions::kSubAppsName, + {"enable-sub-apps", flag_descriptions::kSubAppsName, flag_descriptions::kSubAppsDescription, kOsDesktop, FEATURE_VALUE_TYPE(blink::features::kSubApps)}, // TODO(crbug.com/466441366): Remove "borderless". @@ -5525,6 +5708,16 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kCastMessageLoggingDescription, kOsDesktop, FEATURE_VALUE_TYPE(media_router::kCastMessageLogging)}, + {"cast-streaming-exponential-video-bitrate-algorithm", + flag_descriptions::kCastStreamingExponentialVideoBitrateAlgorithmName, + flag_descriptions:: + kCastStreamingExponentialVideoBitrateAlgorithmDescription, + kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE( + media::kCastStreamingExponentialVideoBitrateAlgorithm, + kCastStreamingExponentialVideoBitrateAlgorithmVariations, + "CastStreamingExponentialVideoBitrateAlgorithm")}, + {"cast-streaming-hardware-h264", flag_descriptions::kCastStreamingHardwareH264Name, flag_descriptions::kCastStreamingHardwareH264Description, kOsDesktop, @@ -5645,8 +5838,8 @@ const FeatureEntry kFeatureEntries[] = { kOsWin | kOsAndroid, FEATURE_VALUE_TYPE(device::features::kSpatialEntitesDepthHitTest)}, #endif // BUILDFLAG(ENABLE_OPENXR) - {"webxr-projection-layers", flag_descriptions::kWebXrProjectionLayersName, - flag_descriptions::kWebXrProjectionLayersDescription, kOsWin | kOsAndroid, + {"webxr-projection-layers", flag_descriptions::kWebXrLayersName, + flag_descriptions::kWebXrLayersDescription, kOsWin | kOsAndroid, FEATURE_VALUE_TYPE(device::features::kWebXRLayers)}, {"webxr-webgpu-binding", flag_descriptions::kWebXrWebGpuBindingName, flag_descriptions::kWebXrWebGpuBindingDescription, kOsWin | kOsAndroid, @@ -5697,11 +5890,6 @@ const FeatureEntry kFeatureEntries[] = { chrome::android::kNotificationPermissionVariant, kNotificationPermissionRationaleVariations, "NotificationPermissionVariant")}, - {"notification-permission-rationale-bottom-sheet", - flag_descriptions::kNotificationPermissionRationaleBottomSheetName, - flag_descriptions::kNotificationPermissionRationaleBottomSheetDescription, - kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kNotificationPermissionBottomSheet)}, {"reengagement-notification", flag_descriptions::kReengagementNotificationName, flag_descriptions::kReengagementNotificationDescription, kOsAndroid, @@ -5730,17 +5918,21 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kNavBarColorAnimationDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kNavBarColorAnimation)}, + {"android-navigation-blur-transition-animation", + flag_descriptions::kAndroidNavigationBlurTransitionAnimationName, + flag_descriptions::kAndroidNavigationBlurTransitionAnimationDescription, + kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE( + features::kAndroidNavigationBlurTransitionAnimation, + kNavigationBlurVariations, + "AndroidNavigationBlurTransitionAnimation")}, + // Tab closure methods refactor. {"tab-closure-method-refactor", flag_descriptions::kTabClosureMethodRefactorName, flag_descriptions::kTabClosureMethodRefactorDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kTabClosureMethodRefactor)}, - // Grid tab switcher update. - {"grid-tab-switcher-update", flag_descriptions::kGridTabSwitcherUpdateName, - flag_descriptions::kGridTabSwitcherUpdateDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kGridTabSwitcherUpdate)}, - // Pinned tabs. {"android-pinned-tabs", flag_descriptions::kAndroidPinnedTabsName, flag_descriptions::kAndroidPinnedTabsDescription, kOsAndroid, @@ -5760,11 +5952,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kHomeModulePrefRefactorDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kHomeModulePrefRefactor)}, - {"tab-freezing-uses-discard", - flag_descriptions::kTabFreezingUsesDiscardName, - flag_descriptions::kTabFreezingUsesDiscardDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kTabFreezingUsesDiscard)}, - {"toolbar-phone-animation-refactor", flag_descriptions::kToolbarPhoneAnimationRefactorName, flag_descriptions::kToolbarPhoneAnimationRefactorDescription, kOsAndroid, @@ -5847,6 +6034,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kOmahaMinSdkVersionAndroid, kOmahaMinSdkVersionAndroidVariations, "OmahaMinSdkVersionAndroidStudy")}, + {"on-demand-background-tab-context-capture", + flag_descriptions::kOnDemandBackgroundTabContextCaptureName, + flag_descriptions::kOnDemandBackgroundTabContextCaptureDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kOnDemandBackgroundTabContextCapture)}, #endif // BUILDFLAG(IS_ANDROID) {"enable-tls13-early-data", flag_descriptions::kEnableTLS13EarlyDataName, flag_descriptions::kEnableTLS13EarlyDataDescription, kOsAll, @@ -6039,14 +6231,6 @@ const FeatureEntry kFeatureEntries[] = { kOsCrOS, FEATURE_VALUE_TYPE( features::kExperimentalAccessibilityDictationContextChecking)}, - {"enable-experimental-accessibility-google-tts-high-quality-voices", - flag_descriptions:: - kExperimentalAccessibilityGoogleTtsHighQualityVoicesName, - flag_descriptions:: - kExperimentalAccessibilityGoogleTtsHighQualityVoicesDescription, - kOsCrOS, - FEATURE_VALUE_TYPE( - features::kExperimentalAccessibilityGoogleTtsHighQualityVoices)}, {"enable-experimental-accessibility-manifest-v3", flag_descriptions::kExperimentalAccessibilityManifestV3Name, flag_descriptions::kExperimentalAccessibilityManifestV3Description, @@ -6098,10 +6282,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kRetryGetVideoCaptureDeviceInfosName, flag_descriptions::kRetryGetVideoCaptureDeviceInfosDescription, kOsMac, FEATURE_VALUE_TYPE(features::kRetryGetVideoCaptureDeviceInfos)}, - {"enable-immersive-fullscreen-toolbar", - flag_descriptions::kImmersiveFullscreenName, - flag_descriptions::kImmersiveFullscreenDescription, kOsMac, - FEATURE_VALUE_TYPE(features::kImmersiveFullscreen)}, #endif // BUILDFLAG(IS_MAC) {"enable-web-payments-experimental-features", flag_descriptions::kWebPaymentsExperimentalFeaturesName, @@ -6128,11 +6308,20 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(password_manager::features::kFillOnAccountSelect)}, #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + {"first-run-desktop-choice-screen-refresh", + flag_descriptions::kFirstRunDesktopChoiceScreenRefreshName, + flag_descriptions::kFirstRunDesktopChoiceScreenRefreshDescription, + kOsMac | kOsWin | kOsLinux, + FEATURE_VALUE_TYPE(switches::kFirstRunDesktopChoiceScreenRefresh)}, {"first-run-desktop-refresh", flag_descriptions::kFirstRunDesktopRefreshName, flag_descriptions::kFirstRunDesktopRefreshDescription, kOsMac | kOsWin | kOsLinux, - FEATURE_VALUE_TYPE(features::kFirstRunDesktopRefresh)}, + FEATURE_VALUE_TYPE(switches::kFirstRunDesktopRefresh)}, + {"first-run-desktop-revamp", flag_descriptions::kFirstRunDesktopRevampName, + flag_descriptions::kFirstRunDesktopRevampDescription, + kOsMac | kOsWin | kOsLinux, + FEATURE_VALUE_TYPE(switches::kFirstRunDesktopRevamp)}, #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_CHROMEOS) @@ -6155,10 +6344,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kArcExtendServiceAnrTimeoutName, flag_descriptions::kArcExtendServiceAnrTimeoutDescription, kOsCrOS, FEATURE_VALUE_TYPE(arc::kExtendServiceAnrTimeout)}, - {"arc-external-storage-access", - flag_descriptions::kArcExternalStorageAccessName, - flag_descriptions::kArcExternalStorageAccessDescription, kOsCrOS, - FEATURE_VALUE_TYPE(arc::kExternalStorageAccess)}, {"arc-friendlier-error-dialog", flag_descriptions::kArcFriendlierErrorDialogName, flag_descriptions::kArcFriendlierErrorDialogDescription, kOsCrOS, @@ -6172,16 +6357,9 @@ const FeatureEntry kFeatureEntries[] = { {"arc-resize-compat", flag_descriptions::kArcResizeCompatName, flag_descriptions::kArcResizeCompatDescription, kOsCrOS, FEATURE_VALUE_TYPE(arc::kResizeCompat)}, - {"arc-rt-vcpu-dual-core", flag_descriptions::kArcRtVcpuDualCoreName, - flag_descriptions::kArcRtVcpuDualCoreDesc, kOsCrOS, - FEATURE_VALUE_TYPE(arc::kRtVcpuDualCore)}, {"arc-rt-vcpu-quad-core", flag_descriptions::kArcRtVcpuQuadCoreName, flag_descriptions::kArcRtVcpuQuadCoreDesc, kOsCrOS, FEATURE_VALUE_TYPE(arc::kRtVcpuQuadCore)}, - {"arc-sync-install-priority", - flag_descriptions::kArcSyncInstallPriorityName, - flag_descriptions::kArcSyncInstallPriorityDescription, kOsCrOS, - FEATURE_VALUE_TYPE(arc::kSyncInstallPriority)}, {"arc-unthrottle-on-active-audio-v2", flag_descriptions::kArcUnthrottleOnActiveAudioV2Name, flag_descriptions::kArcUnthrottleOnActiveAudioV2Description, kOsCrOS, @@ -6330,10 +6508,10 @@ const FeatureEntry kFeatureEntries[] = { kAndroidAppIntegrationMultiDataSourceVariations, "AndroidAppIntegrationMultiDataSource")}, - {"new-tab-page-customization", - flag_descriptions::kNewTabPageCustomizationName, - flag_descriptions::kNewTabPageCustomizationDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kNewTabPageCustomization)}, + {"android-history-clustering", + flag_descriptions::kAndroidHistoryClusteringName, + flag_descriptions::kAndroidHistoryClusteringDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kAndroidHistoryClustering)}, {"new-tab-page-customization-v2", flag_descriptions::kNewTabPageCustomizationV2Name, @@ -6357,13 +6535,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kNewTabPageCustomizationForMvtDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kNewTabPageCustomizationForMvt)}, - {"new-tab-page-customization-toolbar-button", - flag_descriptions::kNewTabPageCustomizationToolbarButtonName, - flag_descriptions::kNewTabPageCustomizationToolbarButtonDescription, - kOsAndroid, - FEATURE_VALUE_TYPE( - chrome::android::kNewTabPageCustomizationToolbarButton)}, - {"android-bottom-toolbar-v2", flag_descriptions::kAndroidBottomToolbarV2Name, flag_descriptions::kAndroidBottomToolbarV2Description, kOsAndroid, @@ -6383,10 +6554,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAuxiliarySearchHistoryDonationDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kAuxiliarySearchHistoryDonation)}, - {"disable-instance-limit", flag_descriptions::kDisableInstanceLimitName, - flag_descriptions::kDisableInstanceLimitDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kDisableInstanceLimit)}, - {"change-unfocused-priority", flag_descriptions::kChangeUnfocusedPriorityName, flag_descriptions::kChangeUnfocusedPriorityDescription, kOsAndroid, @@ -6923,13 +7090,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kPageContentCacheDescription, kOsAndroid, FEATURE_VALUE_TYPE(page_content_annotations::features::kPageContentCache)}, - {"page-visibility-page-content-annotations", - flag_descriptions::kPageVisibilityPageContentAnnotationsName, - flag_descriptions::kPageVisibilityPageContentAnnotationsDescription, - kOsDesktop | kOsAndroid, - FEATURE_VALUE_TYPE(page_content_annotations::features:: - kPageVisibilityPageContentAnnotations)}, - #if BUILDFLAG(IS_CHROMEOS) {"language-packs-in-settings", flag_descriptions::kLanguagePacksInSettingsName, @@ -6955,6 +7115,12 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kVerticalTabsDescription, kOsDesktop, FEATURE_VALUE_TYPE(tabs::kVerticalTabs)}, + {"side-panel-flyover-animation", + flag_descriptions::kSidePanelFlyoverAnimationName, + flag_descriptions::kSidePanelFlyoverAnimationDescription, + kOsWin | kOsLinux | kOsCrOS, + FEATURE_VALUE_TYPE(features::kSidePanelFlyoverAnimation)}, + #endif #if BUILDFLAG(IS_ANDROID) @@ -6987,11 +7153,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(chrome::android::kShareCustomActionsInCCT)}, #endif // BUILDFLAG(IS_ANDROID) - {"product-specifications", - commerce::flag_descriptions::kProductSpecificationsName, - commerce::flag_descriptions::kProductSpecificationsDescription, kOsDesktop, - FEATURE_VALUE_TYPE(commerce::kProductSpecifications)}, - {"shopping-list", commerce::flag_descriptions::kShoppingListName, commerce::flag_descriptions::kShoppingListDescription, kOsAndroid | kOsDesktop, FEATURE_VALUE_TYPE(commerce::kShoppingList)}, @@ -7145,25 +7306,12 @@ const FeatureEntry kFeatureEntries[] = { kNtpOutlookCalendarModuleVariations, "DesktopNtpModules")}, - {"ntp-realbox-contextual-and-trending-suggestions", - flag_descriptions::kNtpRealboxContextualAndTrendingSuggestionsName, - flag_descriptions::kNtpRealboxContextualAndTrendingSuggestionsDescription, - kOsDesktop, - FEATURE_VALUE_TYPE( - omnibox_feature_configs::RealboxContextualAndTrendingSuggestions:: - kRealboxContextualAndTrendingSuggestions)}, - {"ntp-realbox-cr23-theming", flag_descriptions::kNtpRealboxCr23ThemingName, flag_descriptions::kNtpRealboxCr23ThemingDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(ntp_features::kRealboxCr23Theming, kNtpRealboxCr23ThemingVariations, "NtpRealboxCr23Theming")}, - {"ntp-realbox-use-google-g-icon", - flag_descriptions::kNtpRealboxUseGoogleGIconName, - flag_descriptions::kNtpRealboxUseGoogleGIconDescription, kOsDesktop, - FEATURE_VALUE_TYPE(ntp_features::kRealboxUseGoogleGIcon)}, - {"ntp-safe-browsing-module", flag_descriptions::kNtpSafeBrowsingModuleName, flag_descriptions::kNtpSafeBrowsingModuleDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(ntp_features::kNtpSafeBrowsingModule, @@ -7244,7 +7392,7 @@ const FeatureEntry kFeatureEntries[] = { {"enable-network-logging-to-file", flag_descriptions::kEnableNetworkLoggingToFileName, flag_descriptions::kEnableNetworkLoggingToFileDescription, kOsAll, - SINGLE_VALUE_TYPE(network::switches::kLogNetLog)}, + SINGLE_VALUE_TYPE(net::switches::kLogNetLog)}, #if !BUILDFLAG(IS_ANDROID) {"web-authentication-permit-enterprise-attestation", @@ -7342,6 +7490,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kEnableWindowsGamingInputDataFetcherDescription, kOsWin, FEATURE_VALUE_TYPE(features::kEnableWindowsGamingInputDataFetcher)}, + {"gamepad-raw-input-change-event", + flag_descriptions::kGamepadRawInputChangeEventName, + flag_descriptions::kGamepadRawInputChangeEventDescription, kOsWin, + FEATURE_VALUE_TYPE(features::kGamepadRawInputChangeEvent)}, + {"windows11-mica-titlebar", flag_descriptions::kWindows11MicaTitlebarName, flag_descriptions::kWindows11MicaTitlebarDescription, kOsWin, FEATURE_VALUE_TYPE(kWindows11MicaTitlebar)}, @@ -7446,12 +7599,6 @@ const FeatureEntry kFeatureEntries[] = { kMostVisitedTilesReselectVariations, "kMostVisitedTilesReselect")}, - {"show-new-tab-animations", flag_descriptions::kShowNewTabAnimationsName, - flag_descriptions::kShowNewTabAnimationsDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kShowNewTabAnimations, - kShowNewTabAnimationsVariations, - "ShowNewTabAnimations")}, - {"global-cache-list-for-gating-notification-protections", flag_descriptions::kGlobalCacheListForGatingNotificationProtectionsName, flag_descriptions:: @@ -7491,6 +7638,10 @@ const FeatureEntry kFeatureEntries[] = { kReportNotificationContentDetectionDataVariations, "ReportNotificationContentDetectionData")}, + {"report-unsafe-site", flag_descriptions::kReportUnsafeSiteName, + flag_descriptions::kReportUnsafeSiteDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kReportUnsafeSite)}, + {"show-warnings-for-suspicious-notifications", flag_descriptions::kShowWarningsForSuspiciousNotificationsName, flag_descriptions::kShowWarningsForSuspiciousNotificationsDescription, @@ -7689,12 +7840,6 @@ const FeatureEntry kFeatureEntries[] = { #endif #if BUILDFLAG(IS_CHROMEOS) - {"allow-dsp-based-ns", flag_descriptions::kCrOSDspBasedNsAllowedName, - flag_descriptions::kCrOSDspBasedNsAllowedDescription, kOsCrOS, - FEATURE_VALUE_TYPE(media::kCrOSDspBasedNsAllowed)}, - {"allow-dsp-based-agc", flag_descriptions::kCrOSDspBasedAgcAllowedName, - flag_descriptions::kCrOSDspBasedAgcAllowedDescription, kOsCrOS, - FEATURE_VALUE_TYPE(media::kCrOSDspBasedAgcAllowed)}, {"enforce-mono-audio-capture", flag_descriptions::kCrOSEnforceMonoAudioCaptureName, flag_descriptions::kCrOSEnforceMonoAudioCaptureDescription, kOsCrOS, @@ -7723,6 +7868,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kShowForceRespectUiGainsToggleName, flag_descriptions::kShowForceRespectUiGainsToggleDescription, kOsCrOS, FEATURE_VALUE_TYPE(media::kShowForceRespectUiGainsToggle)}, + {"audio-flexible-loopback-for-system-loopback", + flag_descriptions::kAudioFlexibleLoopbackForSystemLoopbackName, + flag_descriptions::kAudioFlexibleLoopbackForSystemLoopbackDescription, + kOsCrOS, + FEATURE_VALUE_TYPE(media::kAudioFlexibleLoopbackForSystemLoopback)}, {"show-spatial-audio-toggle", flag_descriptions::kShowSpatialAudioToggleName, flag_descriptions::kShowSpatialAudioToggleDescription, kOsCrOS, @@ -7739,6 +7889,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSingleCaCertVerificationPhase2Name, flag_descriptions::kSingleCaCertVerificationPhase2Description, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kSingleCaCertVerificationPhase2)}, + {"fix-static-ip-for-two-managed-ethernet-ports", + flag_descriptions::kFixStaticIpForTwoManagedEthPortsName, + flag_descriptions::kFixStaticIpForTwoManagedEthPortsDescription, kOsCrOS, + FEATURE_VALUE_TYPE(ash::features::kFixStaticIpForTwoManagedEthPorts)}, #endif {"boundary-event-dispatch-tracks-node-removal", @@ -7986,21 +8140,12 @@ const FeatureEntry kFeatureEntries[] = { kOsCrOS, FEATURE_VALUE_TYPE(features::kEnableNearbyBleV2ExtendedAdvertising)}, - {"nearby-ble-v2-gatt-server", - flag_descriptions::kEnableNearbyBleV2GattServerName, - flag_descriptions::kEnableNearbyBleV2GattServerDescription, kOsCrOS, - FEATURE_VALUE_TYPE(features::kEnableNearbyBleV2GattServer)}, - {"nearby-bluetooth-classic-adv", flag_descriptions::kEnableNearbyBluetoothClassicAdvertisingName, flag_descriptions::kEnableNearbyBluetoothClassicAdvertisingDescription, kOsCrOS, FEATURE_VALUE_TYPE(features::kEnableNearbyBluetoothClassicAdvertising)}, - {"nearby-mdns", flag_descriptions::kEnableNearbyMdnsName, - flag_descriptions::kEnableNearbyMdnsDescription, kOsCrOS, - FEATURE_VALUE_TYPE(features::kEnableNearbyMdns)}, - {"nearby-presence", flag_descriptions::kNearbyPresenceName, flag_descriptions::kNearbyPresenceDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kNearbyPresence)}, @@ -8096,12 +8241,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAccessibilityManifestV3GoogleTtsDescription, kOsCrOS, FEATURE_VALUE_TYPE(::features::kAccessibilityManifestV3GoogleTts)}, - {"enable-accessibility-manifest-v3-switch-access", - flag_descriptions::kAccessibilityManifestV3SwitchAccessName, - flag_descriptions::kAccessibilityManifestV3SwitchAccessDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(features::kAccessibilityManifestV3SwitchAccess)}, - {"enable-accessibility-mousekeys", flag_descriptions::kAccessibilityMouseKeysName, flag_descriptions::kAccessibilityMouseKeysDescription, kOsCrOS, @@ -8192,13 +8331,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_CHROMEOS) - {"settings-app-notification-settings", - flag_descriptions::kSettingsAppNotificationSettingsName, - flag_descriptions::kSettingsAppNotificationSettingsDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kSettingsAppNotificationSettings)}, -#endif // BUILDFLAG(IS_CHROMEOS) - #if BUILDFLAG(IS_ANDROID) {"web-otp-backend", flag_descriptions::kWebOtpBackendName, flag_descriptions::kWebOtpBackendDescription, kOsAndroid, @@ -8361,10 +8493,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDoubleBufferCompositingDescription, kOsCrOS, SINGLE_VALUE_TYPE(switches::kDoubleBufferCompositing)}, -#if BUILDFLAG(IS_CHROMEOS) - -#endif // BUILDFLAG(IS_CHROMEOS) - #if BUILDFLAG(IS_WIN) {"enable-media-foundation-video-capture", flag_descriptions::kEnableMediaFoundationVideoCaptureName, @@ -8455,17 +8583,14 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(webnn::mojom::features::kWebNNOnnxRuntime)}, #endif // BUILDFLAG(IS_WIN) - {"permission-element", - flag_descriptions::kPageEmbeddedPermissionControlName, - flag_descriptions::kPageEmbeddedPermissionControlDescription, - kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux, - FEATURE_VALUE_TYPE(blink::features::kPermissionElement)}, - - {"geolocation-element", - flag_descriptions::kGeolocationPermissionControlName, - flag_descriptions::kGeolocationPermissionControlDescription, - kOsMac | kOsWin | kOsLinux | kOsAndroid, - FEATURE_VALUE_TYPE(blink::features::kGeolocationElement)}, +#if BUILDFLAG(IS_ANDROID) + {"permission-promise-lifetime-modulation-android", + flag_descriptions::kPermissionPromiseLifetimeModulationAndroidName, + flag_descriptions::kPermissionPromiseLifetimeModulationAndroidDescription, + kOsAndroid, + FEATURE_VALUE_TYPE( + permissions::features::kPermissionPromiseLifetimeModulationAndroid)}, +#endif // BUILDFLAG(IS_ANDROID) {"left-hand-side-activity-indicators", flag_descriptions::kLeftHandSideActivityIndicatorsName, @@ -8503,10 +8628,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kLauncherKeywordExtractionScoring, flag_descriptions::kLauncherKeywordExtractionScoringDescription, kOsCrOS, FEATURE_VALUE_TYPE(search_features::kLauncherKeywordExtractionScoring)}, - {"hybrid-charger-notifications", - flag_descriptions::kHybridChargerNotificationsName, - flag_descriptions::kHybridChargerNotificationsDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kHybridChargerNotifications)}, {"launcher-local-image-search", flag_descriptions::kLauncherLocalImageSearchName, flag_descriptions::kLauncherLocalImageSearchDescription, kOsCrOS, @@ -8761,6 +8882,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(ui::kEnableInputEventLogging)}, #endif + {"lens-enable-raw-file-media-types", + flag_descriptions::kLensEnableSendRawFileMediaTypesName, + flag_descriptions::kLensEnableSendRawFileMediaTypesDescription, kOsAll, + FEATURE_VALUE_TYPE(lens::features::kLensSendRawFileMediaTypes)}, + {flag_descriptions::kEnableLensStandaloneFlagId, flag_descriptions::kEnableLensStandaloneName, flag_descriptions::kEnableLensStandaloneDescription, kOsDesktop, @@ -9032,10 +9158,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // ENABLE_EXTENSIONS #if !BUILDFLAG(IS_ANDROID) - {"captured-surface-control", flag_descriptions::kCapturedSurfaceControlName, - flag_descriptions::kCapturedSurfaceControlDescription, kOsDesktop, - FEATURE_VALUE_TYPE(blink::features::kCapturedSurfaceControl)}, - {"region-capture-cross-tab", flag_descriptions::kCrossTabRegionCaptureName, flag_descriptions::kCrossTabRegionCaptureDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kRegionCaptureOfOtherTabs)}, @@ -9150,6 +9272,11 @@ const FeatureEntry kFeatureEntries[] = { // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_ANDROID) + {"allow-delayed-audio-focus-gain-android", + flag_descriptions::kAllowDelayedAudioFocusGainAndroidName, + flag_descriptions::kAllowDelayedAudioFocusGainAndroidDescription, + kOsAndroid, FEATURE_VALUE_TYPE(media::kAllowDelayedAudioFocusGainAndroid)}, + {"auto-doc-pip-permission-prompt-android", flag_descriptions::kAutoDocPiPPermissionPromptAndroidName, flag_descriptions::kAutoDocPiPPermissionPromptAndroidDescription, @@ -9176,10 +9303,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDsePreload2OnPressDescription, kOsAll, FEATURE_VALUE_TYPE(features::kDsePreload2OnPress)}, - {"http-cache-no-vary-search", flag_descriptions::kHttpCacheNoVarySearchName, - flag_descriptions::kHttpCacheNoVarySearchDescription, kOsAll, - FEATURE_VALUE_TYPE(net::features::kHttpCacheNoVarySearch)}, - {"http-cache-custom-backend", flag_descriptions::kHttpCacheCustomBackendName, flag_descriptions::kHttpCacheCustomBackendDescription, kOsAll, @@ -9234,11 +9357,6 @@ const FeatureEntry kFeatureEntries[] = { ash::features::kVcSegmentationInferenceBackend, kVcSegmentationInferenceBackendVariations, "VcSegmentationInferenceBackend")}, - {"vc-light-intensity", flag_descriptions::kVcLightIntensityName, - flag_descriptions::kVcLightIntensityDescription, kOsCrOS, - FEATURE_WITH_PARAMS_VALUE_TYPE(ash::features::kVcLightIntensity, - kVcLightIntensityVariations, - "VCLightIntensity")}, {"vc-web-api", flag_descriptions::kVcWebApiName, flag_descriptions::kVcWebApiDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kVcWebApi)}, @@ -9320,12 +9438,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kProjectorAppDebugDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kProjectorAppDebug)}, - {kProjectorServerSideSpeechRecognition, - flag_descriptions::kProjectorServerSideSpeechRecognitionName, - flag_descriptions::kProjectorServerSideSpeechRecognitionDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kInternalServerSideSpeechRecognition)}, - {"enable-projector-server-side-usm", flag_descriptions::kProjectorServerSideUsmName, flag_descriptions::kProjectorServerSideUsmDescription, kOsCrOS, @@ -9405,11 +9517,6 @@ const FeatureEntry kFeatureEntries[] = { content_settings::features::kSafetyCheckUnusedSitePermissions, kSafetyCheckUnusedSitePermissionsVariations, "SafetyCheckUnusedSitePermissions")}, - {"permission-site-settings-radio-button", - flag_descriptions::kPermissionSiteSettingsRadioButtonName, - flag_descriptions::kPermissionSiteSettingsRadioButtonDescription, kOsAll, - FEATURE_VALUE_TYPE( - permissions::features::kPermissionSiteSettingsRadioButton)}, #if BUILDFLAG(IS_ANDROID) {"safety-hub-weak-reused-passwords", @@ -9517,6 +9624,12 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kWebUIOmniboxPopupDebug, kWebUIOmniboxPopupDebugVariations, "WebUIOmniboxPopupDebugVariations")}, + + {"webui-omnibox-popup-selection-control", + flag_descriptions::kWebUIOmniboxPopupSelectionControlName, + flag_descriptions::kWebUIOmniboxPopupSelectionControlDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(omnibox::kWebUIOmniboxPopupSelectionControl)}, #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_CHROMEOS) @@ -9713,6 +9826,10 @@ const FeatureEntry kFeatureEntries[] = { kOsDesktop, FEATURE_VALUE_TYPE(media::kGetDisplayMediaConfersActivation)}, #endif + {"glass-toolbar", flag_descriptions::kGlassToolbarName, + flag_descriptions::kGlassToolbarDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kGlassToolbar)}, + {"render-document", flag_descriptions::kRenderDocumentName, flag_descriptions::kRenderDocumentDescription, kOsAll, FEATURE_WITH_PARAMS_VALUE_TYPE(features::kRenderDocument, @@ -9783,12 +9900,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( autofill::features::kAutofillEnablePrefetchingRiskDataForRetrieval)}, -#if BUILDFLAG(IS_ANDROID) - {"read-aloud", flag_descriptions::kReadAloudName, - flag_descriptions::kReadAloudDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kReadAloud)}, -#endif - {"rcaps-dynamic-profile-country", flag_descriptions::kRcapsDynamicProfileCountryName, flag_descriptions::kRcapsDynamicProfileCountryDescription, kOsAll, @@ -9801,11 +9912,6 @@ const FeatureEntry kFeatureEntries[] = { kOsLinux | kOsMac | kOsWin, FEATURE_VALUE_TYPE(profile_management::features:: kEnableGenericOidcAuthProfileManagement)}, - {"enable-user-link-capturing-scope-extensions-pwa", - flag_descriptions::kDesktopPWAsUserLinkCapturingScopeExtensionsName, - flag_descriptions::kDesktopPWAsUserLinkCapturingScopeExtensionsDescription, - kOsLinux | kOsMac | kOsWin, - FEATURE_VALUE_TYPE(features::kPwaNavigationCapturingWithScopeExtensions)}, #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ @@ -9938,11 +10044,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kBackgroundNotPerceptibleBindingName, flag_descriptions::kBackgroundNotPerceptibleBindingDescription, kOsAndroid, FEATURE_VALUE_TYPE(base::features::kBackgroundNotPerceptibleBinding)}, - {"boarding-pass-detector", flag_descriptions::kBoardingPassDetectorName, - flag_descriptions::kBoardingPassDetectorDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(features::kBoardingPassDetector, - kBoardingPassDetectorVariations, - "Allowed Urls")}, + #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_CHROMEOS) @@ -9976,14 +10078,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAssistantIphDescription, kOsCrOS, FEATURE_VALUE_TYPE(feature_engagement::kIPHLauncherSearchHelpUiFeature)}, - {"battery-charge-limit", flag_descriptions::kBatteryChargeLimitName, - flag_descriptions::kBatteryChargeLimitDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kBatteryChargeLimit)}, - - {"mahi-debugging", flag_descriptions::kMahiDebuggingName, - flag_descriptions::kMahiDebuggingDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kMahiDebugging)}, - {"mahi-panel-resizable", flag_descriptions::kMahiPanelResizableName, flag_descriptions::kMahiPanelResizableDescription, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kMahiPanelResizable)}, @@ -10053,13 +10147,10 @@ const FeatureEntry kFeatureEntries[] = { "LinkPreview")}, #endif // !BUILDFLAG_(IS_ANDROID) - {"send-tab-ios-push-notifications", - flag_descriptions::kSendTabToSelfIOSPushNotificationsName, - flag_descriptions::kSendTabToSelfIOSPushNotificationsDescription, kOsAll, - FEATURE_WITH_PARAMS_VALUE_TYPE( - send_tab_to_self::kSendTabToSelfIOSPushNotifications, - kSendTabIOSPushNotificationsVariations, - "SendTabToSelfIOSPushNotifications")}, + {"send-tab-to-self-enhanced-handoff", + flag_descriptions::kSendTabToSelfEnhancedHandoffName, + flag_descriptions::kSendTabToSelfEnhancedHandoffDescription, kOsAll, + MULTI_VALUE_TYPE(kSendTabToSelfEnhancedHandoffChoices)}, #if BUILDFLAG(IS_CHROMEOS) {"enable-display-performance-mode", @@ -10069,12 +10160,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_ANDROID) - {"android-tab-highlighting", flag_descriptions::kAndroidTabHighlightingName, - flag_descriptions::kAndroidTabHighlightingDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kAndroidTabHighlighting, - kAndroidTabHighlightingVariations, - "AndroidTabHighlightingVariations")}, - {"android-zoom-indicator", flag_descriptions::kAndroidZoomIndicatorName, flag_descriptions::kAndroidZoomIndicatorDescription, kOsAndroid, FEATURE_VALUE_TYPE(browser_ui::kAndroidZoomIndicator)}, @@ -10096,8 +10181,10 @@ const FeatureEntry kFeatureEntries[] = { {"android-tips-notifications-v2", flag_descriptions::kAndroidTipsNotificationsV2Name, flag_descriptions::kAndroidTipsNotificationsV2Description, kOsAndroid, - FEATURE_VALUE_TYPE( - segmentation_platform::features::kAndroidTipsNotificationsV2)}, + FEATURE_WITH_PARAMS_VALUE_TYPE( + segmentation_platform::features::kAndroidTipsNotificationsV2, + kAndroidTipsNotificationsV2Variations, + "AndroidTipsNotificationsV2")}, {"chrome-finds", flag_descriptions::kChromeFindsName, flag_descriptions::kChromeFindsDescription, kOsAndroid, @@ -10130,6 +10217,14 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(ash::features::kMultiCalendarSupport)}, #endif // BUILDFLAG(IS_CHROMEOS) +#if BUILDFLAG(IS_ANDROID) + {"multi-instance-shared-prefs-migration", + flag_descriptions::kMultiInstanceSharedPrefsMigrationName, + flag_descriptions::kMultiInstanceSharedPrefsMigrationDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kMultiInstanceSharedPrefsMigration)}, +#endif + #if BUILDFLAG(IS_ANDROID) {"enable-pix-account-linking", flag_descriptions::kEnablePixAccountLinkingName, @@ -10226,6 +10321,16 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( password_manager::features::kShowSuggestionsOnAutofocus)}, +#if !BUILDFLAG(IS_ANDROID) + {"password-save-in-context-error-resolution-on-desktop", + flag_descriptions::kPasswordSaveInContextErrorResolutionOnDesktopName, + flag_descriptions:: + kPasswordSaveInContextErrorResolutionOnDesktopDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(password_manager::features:: + kPasswordSaveInContextErrorResolutionOnDesktop)}, +#endif + #if BUILDFLAG(IS_ANDROID) {"android-desktop-density", flag_descriptions::kAndroidDesktopDensityName, flag_descriptions::kAndroidDesktopDensityDescription, kOsAndroid, @@ -10308,6 +10413,27 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(blink::features::kAIProofreadingAPI), flag_descriptions::kAIAPIsForGeminiNanoLinks}, + {"summarizer-api-performance-preference", + flag_descriptions::kSummarizerAPIWithPerformancePreferenceName, + flag_descriptions::kSummarizerAPIWithPerformancePreferenceDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(blink::features::kAISummarizationPerformancePreference), + flag_descriptions::kSummarizerAPIWithPerformancePreferenceLink}, + + {"summarizer-api-for-gemini-nano", + flag_descriptions::kSummarizerAPIForGeminiNanoName, + flag_descriptions::kSummarizerAPIForGeminiNanoDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kAISummarizationAPI, + kAILangsVariation, + "kAISummarizationAPI"), + flag_descriptions::kAIAPIsForGeminiNanoLinks}, + + {"on-device-model-litert-lm-backend", + flag_descriptions::kOnDeviceModelLitertLmBackendName, + flag_descriptions::kOnDeviceModelLitertLmBackendDescription, kOsDesktop, + FEATURE_VALUE_TYPE( + on_device_model::features::kOnDeviceModelLitertLmBackend)}, + {"css-grid-lanes-layout", flag_descriptions::kCSSGridLanesLayoutName, flag_descriptions::kCSSGridLanesLayoutDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kCSSGridLanesLayout)}, @@ -10466,19 +10592,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDevToolsPrivacyUIDescription, kOsAll, FEATURE_VALUE_TYPE(features::kDevToolsPrivacyUI)}, - {"devtools-individual-request-throttling", - flag_descriptions::kDevToolsIndividualRequestThrottlingName, - flag_descriptions::kDevToolsIndividualRequestThrottlingDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kDevToolsIndividualRequestThrottling)}, - {"devtools-live-edit", flag_descriptions::kDevToolsLiveEditName, flag_descriptions::kDevToolsLiveEditDescription, kOsAll, FEATURE_VALUE_TYPE(features::kDevToolsLiveEdit)}, - {"permissions-ai-v3", flag_descriptions::kPermissionsAIv3Name, - flag_descriptions::kPermissionsAIv3Description, kOsDesktop, - FEATURE_VALUE_TYPE(permissions::features::kPermissionsAIv3)}, - {"permissions-ai-v4", flag_descriptions::kPermissionsAIv4Name, flag_descriptions::kPermissionsAIv4Description, kOsAll, FEATURE_VALUE_TYPE(permissions::features::kPermissionsAIv4)}, @@ -10510,11 +10627,6 @@ const FeatureEntry kFeatureEntries[] = { {"enable-task-manager-clank", flag_descriptions::kTaskManagerClankName, flag_descriptions::kTaskManagerClankDescription, kOsAndroid, FEATURE_VALUE_TYPE(features::kTaskManagerClank)}, -#else - {"enable-task-manager-desktop-refresh", - flag_descriptions::kTaskManagerDesktopRefreshName, - flag_descriptions::kTaskManagerDesktopRefreshDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kTaskManagerDesktopRefresh)}, #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) @@ -10647,14 +10759,14 @@ const FeatureEntry kFeatureEntries[] = { password_manager::features::kPasswordFormClientsideClassifier)}, #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_CHROMEOS) + BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) {"contextual-cueing", flag_descriptions::kContextualCueingName, - flag_descriptions::kContextualCueingDescription, kOsDesktop, + flag_descriptions::kContextualCueingDescription, kOsDesktop | kOsAndroid, FEATURE_WITH_PARAMS_VALUE_TYPE(contextual_cueing::kContextualCueing, kContextualCueingEnabledOptions, "ContextualCueingEnabledOptions")}, #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || - // BUILDFLAG(IS_CHROMEOS) + // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) {"separate-local-and-account-search-engines", @@ -10722,21 +10834,23 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(lens::features::kLensOverlayTranslateLanguages)}, #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(ENABLE_GLIC) {"glic", flag_descriptions::kGlicName, flag_descriptions::kGlicDescription, kOsAll, FEATURE_VALUE_TYPE(features::kGlic)}, {"glic-z-order-changes", flag_descriptions::kGlicZOrderChangesName, flag_descriptions::kGlicZOrderChangesDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicZOrderChanges)}, {"glic-actor", flag_descriptions::kGlicActorName, - flag_descriptions::kGlicActorDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kGlicActor)}, + flag_descriptions::kGlicActorDescription, kOsDesktop | kOsAndroid, + ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(switches::kEnableFeatures, + "GlicActor,GlicActorUi", + switches::kDisableFeatures, + "GlicActor,GlicActorUi")}, {"glic-actor-autofill", flag_descriptions::kGlicActorAutofillName, flag_descriptions::kGlicActorAutofillDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicActorAutofill)}, {"glic-actor-cursor", flag_descriptions::kGlicActorCursorName, flag_descriptions::kGlicActorCursorDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kGlicActorUiOverlayMagicCursor)}, + FEATURE_VALUE_TYPE(features::kGlicActorUiMagicCursor)}, {"glic-detached", flag_descriptions::kGlicDetachedName, flag_descriptions::kGlicDetachedDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicDetached)}, @@ -10778,15 +10892,16 @@ const FeatureEntry kFeatureEntries[] = { {"glic-side-panel", flag_descriptions::kGlicSidePanelName, flag_descriptions::kGlicSidePanelDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicMultiInstance)}, - {"glic-fre-pre-warming", flag_descriptions::kGlicFreWarmingName, - flag_descriptions::kGlicFreWarmingDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kGlicFreWarming)}, {"glic-entrypoint-variations", flag_descriptions::kGlicEntrypointVariationsName, flag_descriptions::kGlicEntrypointVariationsDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicEntrypointVariations, kGlicEntrypointVariations, "GlicEntrypointVariations")}, + {"glic-contextual-cue-bubble", + flag_descriptions::kGlicContextualCueBubbleName, + flag_descriptions::kGlicContextualCueBubbleDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicContextualCueBubble)}, {"glic-default-to-last-active-conversation", flag_descriptions::kGlicDefaultToLastActiveConversationName, flag_descriptions::kGlicDefaultToLastActiveConversationDescription, @@ -10810,6 +10925,9 @@ const FeatureEntry kFeatureEntries[] = { {"glic-capture-region", flag_descriptions::kGlicCaptureRegionName, flag_descriptions::kGlicCaptureRegionDescription, kOsAll, FEATURE_VALUE_TYPE(features::kGlicCaptureRegion)}, + {"glic-chrome-status-icon", flag_descriptions::kGlicChromeStatusIconName, + flag_descriptions::kGlicChromeStatusIconDescription, kOsMac, + FEATURE_VALUE_TYPE(features::kGlicChromeStatusIcon)}, {"glic-daisy-chain-new-tabs", flag_descriptions::kGlicDaisyChainNewTabsName, flag_descriptions::kGlicDaisyChainNewTabsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicDaisyChainNewTabs)}, @@ -10857,12 +10975,26 @@ const FeatureEntry kFeatureEntries[] = { kGlicGuestUrlPresetTypes, "GlicGuestUrlPresets")}, + {"glic-selection-prompt", flag_descriptions::kGlicSelectionPromptName, + flag_descriptions::kGlicSelectionPromptDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicSelectionPrompt)}, + + {"glic-disable-actor-safety-checks", + flag_descriptions::kGlicDisableActorSafetyChecksName, + flag_descriptions::kGlicDisableActorSafetyChecksDescription, kOsDesktop, + SINGLE_VALUE_TYPE(actor::switches::kDisableActorSafetyChecks)}, + #if BUILDFLAG(IS_CHROMEOS) {"glic-use-non-client", flag_descriptions::kGlicUseNonClientName, flag_descriptions::kGlicUseNonClientDescription, kOsCrOS, FEATURE_VALUE_TYPE(features::kGlicUseNonClient)}, #endif // BUILDFLAG(IS_CHROMEOS) -#endif // BUILDFLAG(ENABLE_GLIC) + +#if !BUILDFLAG(IS_ANDROID) + {"skills", flag_descriptions::kSkillsEnabledName, + flag_descriptions::kSkillsEnabledDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kSkillsEnabled)}, +#endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) {"enable-client-certificate-provisioning-on-android", @@ -10904,6 +11036,13 @@ const FeatureEntry kFeatureEntries[] = { chrome::android::kDefaultBrowserPromoEntryPoint, kDefaultBrowserPromoEntryPointVariations, "DefaultBrowserPromoEntryPoint")}, + + {"default-browser-promo-fre", + flag_descriptions::kDefaultBrowserPromoFreName, + flag_descriptions::kDefaultBrowserPromoFreDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kDefaultBrowserPromoFre, + kDefaultBrowserPromoFreVariations, + "DefaultBrowserPromoFre")}, #endif // BUILDFLAG(IS_ANDROID) {"happy-eyeballs-v3", flag_descriptions::kHappyEyeballsV3Name, @@ -11106,6 +11245,12 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(safe_browsing::kMaliciousApkDownloadCheck, kMaliciousApkDownloadCheckChoices, "MaliciousApkDownloadCheck")}, + + {"make-identity-manager-source-of-accounts", + flag_descriptions::kMakeIdentityManagerSourceOfAccountsName, + flag_descriptions::kMakeIdentityManagerSourceOfAccountsDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(switches::kMakeIdentityManagerSourceOfAccounts)}, #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -11139,6 +11284,14 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDefaultBrowserFrameworkName, flag_descriptions::kDefaultBrowserFrameworkDescription, kOsDesktop, FEATURE_VALUE_TYPE(default_browser::kDefaultBrowserFramework)}, + + {"default-browser-prompt-surfaces", + flag_descriptions::kDefaultBrowserPromptSurfacesName, + flag_descriptions::kDefaultBrowserPromptSurfacesDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE( + default_browser::kDefaultBrowserPromptSurfaces, + kDefaultBrowserPromptSurfacesVariations, + "DefaultBrowserPromptSurfaces")}, #endif // !BUILDFLAG(IS_ANDROID) && ! BUILDFLAG(IS_CHROMEOS) {"privacy-sandbox-ad-topics-content-parity", @@ -11246,6 +11399,13 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSupervisedUserBlockInterstitialV3Description, kOsAll, FEATURE_VALUE_TYPE(supervised_user::kSupervisedUserBlockInterstitialV3)}, + {"supervised-user-emit-log-record-separately", + flag_descriptions::kSupervisedUserEmitLogRecordSeparatelyName, + flag_descriptions::kSupervisedUserEmitLogRecordSeparatelyDescription, + kOsAll, + FEATURE_VALUE_TYPE( + supervised_user::kSupervisedUserEmitLogRecordSeparately)}, + {"supervised-user-merge-device-parental-controls-and-family-link-prefs", flag_descriptions:: kSupervisedUserMergeDeviceParentalControlsAndFamilyLinkPrefsName, @@ -11376,12 +11536,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(lens::features::kLensSearchSidePanelNewFeedback)}, #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_ANDROID) - {"headless-tab-model", flag_descriptions::kHeadlessTabModelName, - flag_descriptions::kHeadlessTabModelDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kHeadlessTabModel)}, -#endif // BUILDFLAG(IS_ANDROID) - {"autofill-vcn-enroll-strike-expiry-time", flag_descriptions::kAutofillVcnEnrollStrikeExpiryTimeName, flag_descriptions::kAutofillVcnEnrollStrikeExpiryTimeDescription, kOsAll, @@ -11518,6 +11672,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kBrowserControlsDebuggingName, flag_descriptions::kBrowserControlsDebuggingDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kBrowserControlsDebugging)}, + + {"browser-window-interface-mobile", + flag_descriptions::kBrowserWindowInterfaceMobileName, + flag_descriptions::kBrowserWindowInterfaceMobileDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kBrowserWindowInterfaceMobile)}, #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_CHROMEOS) @@ -11544,13 +11703,6 @@ const FeatureEntry kFeatureEntries[] = { commerce::flag_descriptions::kDiscountAutofillDescription, kOsDesktop, FEATURE_VALUE_TYPE(commerce::kDiscountAutofill)}, -#if BUILDFLAG(IS_ANDROID) - {"android-web-app-launch-handler", - flag_descriptions::kAndroidWebAppLaunchHandlerName, - flag_descriptions::kAndroidWebAppLaunchHandlerDescription, kOsAndroid, - FEATURE_VALUE_TYPE(features::kAndroidWebAppLaunchHandler)}, -#endif // BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_WIN) {"ui-automation-provider", flag_descriptions::kUiaProviderName, flag_descriptions::kUiaProviderDescription, kOsWin, @@ -11620,7 +11772,13 @@ const FeatureEntry kFeatureEntries[] = { kOsAll, FEATURE_VALUE_TYPE(features::kNewContentForCheckerboardedScrolls), }, - +#if BUILDFLAG(IS_WIN) + {"startup-launch", flag_descriptions::kStartupLaunchName, + flag_descriptions::kStartupLaunchDescription, kOsWin, + FEATURE_WITH_PARAMS_VALUE_TYPE(features::kLaunchOnStartup, + kStartupLaunchVariations, + "LaunchOnStartup")}, +#endif // BUILDFLAG(IS_WIN) {"page-actions-migration", flag_descriptions::kPageActionsMigrationName, flag_descriptions::kPageActionsMigrationDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(features::kPageActionsMigration, @@ -11660,6 +11818,10 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_CHROMEOS) #if !BUILDFLAG(IS_ANDROID) + {"web-app-install-element", flag_descriptions::kWebAppInstallElementName, + flag_descriptions::kWebAppInstallElementDescription, kOsDesktop, + FEATURE_VALUE_TYPE(blink::features::kInstallElement)}, + {"web-app-installation-api", flag_descriptions::kWebAppInstallationApiName, flag_descriptions::kWebAppInstallationApiDescription, kOsDesktop, FEATURE_VALUE_TYPE(blink::features::kWebAppInstallation)}, @@ -11706,14 +11868,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(lens::features::kLensOverlayPermissionBubbleAlt)}, #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(ENABLE_DICE_SUPPORT) - {"web-signin-leads-to-implicitly-signed-in-state", - flag_descriptions::kWebSigninLeadsToImplicitlySignedInStateName, - flag_descriptions::kWebSigninLeadsToImplicitlySignedInStateDescription, - kOsDesktop, - FEATURE_VALUE_TYPE(switches::kWebSigninLeadsToImplicitlySignedInState)}, -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) - {"autofill-enable-downstream-card-awareness-iph", flag_descriptions::kAutofillEnableDownstreamCardAwarenessIphName, flag_descriptions::kAutofillEnableDownstreamCardAwarenessIphDescription, @@ -11740,13 +11894,6 @@ const FeatureEntry kFeatureEntries[] = { blink::features::kEnableDevtoolsDeepLinkViaExtensibilityApi)}, #endif -#if BUILDFLAG(ENABLE_DICE_SUPPORT) - {"offer-migration-to-dice-users", - flag_descriptions::kOfferMigrationToDiceUsersName, - flag_descriptions::kOfferMigrationToDiceUsersDescription, kOsDesktop, - FEATURE_VALUE_TYPE(switches::kOfferMigrationToDiceUsers)}, -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) {"autofill-enable-buy-now-pay-later-for-externally-linked", @@ -11772,6 +11919,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidOpenIncognitoAsWindowDescription, kOsAndroid, FEATURE_VALUE_TYPE(feed::kAndroidOpenIncognitoAsWindow)}, + {"android-desktop-ua-platform", + flag_descriptions::kAndroidDesktopUAPlatformName, + flag_descriptions::kAndroidDesktopUAPlatformDescription, kOsAndroid, + FEATURE_VALUE_TYPE(blink::features::kAndroidDesktopUAPlatform)}, + {"android-desktop-webprefs-large-display", flag_descriptions::kAndroidDesktopWebPrefsLargeDisplaysName, flag_descriptions::kAndroidDesktopWebPrefsLargeDisplaysDescription, @@ -11961,12 +12113,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) - {"browsing-history-actor-integration-M1", - flag_descriptions::kBrowsingHistoryActorIntegrationM1Name, - flag_descriptions::kBrowsingHistoryActorIntegrationM1Description, - kOsDesktop, - FEATURE_VALUE_TYPE(history::kBrowsingHistoryActorIntegrationM1)}, - {"browsing-history-actor-integration-M2", flag_descriptions::kBrowsingHistoryActorIntegrationM2Name, flag_descriptions::kBrowsingHistoryActorIntegrationM2Description, @@ -12074,11 +12220,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) - {"tab-group-menu-improvements", - flag_descriptions::kTabGroupMenuImprovementsName, - flag_descriptions::kTabGroupMenuImprovementsDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kTabGroupMenuImprovements)}, - {"tab-group-more-entry-points", flag_descriptions::kTabGroupMenuMoreEntryPointsName, flag_descriptions::kTabGroupMenuMoreEntryPointsDescription, kOsDesktop, @@ -12114,16 +12255,18 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) - {"multicast-in-direct-sockets", - flag_descriptions::kMulticastInDirectSocketsName, - flag_descriptions::kMulticastInDirectSocketsDescription, kOsDesktop, - FEATURE_VALUE_TYPE(blink::features::kMulticastInDirectSockets)}, {"controlled-frame-web-request-security-info", flag_descriptions::kControlledFrameWebRequestSecurityInfoName, flag_descriptions::kControlledFrameWebRequestSecurityInfoDescription, kOsDesktop, FEATURE_VALUE_TYPE( blink::features::kControlledFrameWebRequestSecurityInfo)}, + {"source-specific-multicast-in-direct-sockets", + flag_descriptions::kSourceSpecificMulticastInDirectSocketsName, + flag_descriptions::kSourceSpecificMulticastInDirectSocketsDescription, + kOsDesktop, + FEATURE_VALUE_TYPE( + blink::features::kSourceSpecificMulticastInDirectSockets)}, #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -12187,22 +12330,19 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( autofill::features::kAutofillPreferBuyNowPayLaterBlocklists)}, -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_CHROMEOS) {"autofill-enable-ai-based-amount-extraction", flag_descriptions::kAutofillEnableAiBasedAmountExtractionName, flag_descriptions::kAutofillEnableAiBasedAmountExtractionDescription, - kOsDesktop, + kOsAll, FEATURE_VALUE_TYPE( autofill::features::kAutofillEnableAiBasedAmountExtraction)}, -#endif {"contextual-tasks", contextual_tasks::flag_descriptions::kContextualTasksName, contextual_tasks::flag_descriptions::kContextualTasksDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(contextual_tasks::kContextualTasks, - kContextualTaskEntryPointVariations, + kContextualTasksVariations, "ContextualTasks")}, {"omnibox-debug-logs", omnibox::flag_descriptions::kOmniboxDebugLogsName, @@ -12232,13 +12372,6 @@ const FeatureEntry kFeatureEntries[] = { kOsDesktop, FEATURE_VALUE_TYPE(contextual_tasks::kContextualTasksContextLibrary)}, - {"contextual-tasks-expand-button", - contextual_tasks::flag_descriptions::kContextualTasksExpandButtonName, - contextual_tasks::flag_descriptions:: - kContextualTasksExpandButtonDescription, - kOsDesktop, - FEATURE_VALUE_TYPE(contextual_tasks::kContextualTasksExpandButton)}, - #if !BUILDFLAG(IS_ANDROID) {"create-new-tab-group-app-menu-top-level", flag_descriptions::kCreateNewTabGroupAppMenuTopLevelName, @@ -12381,6 +12514,16 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kHandleMdmErrorsForDasherAccountsDescription, kOsAll, FEATURE_VALUE_TYPE(switches::kHandleMdmErrorsForDasherAccounts)}, +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + {"disable-u18-feedback-desktop", + flag_descriptions::kDisableU18FeedbackDesktopName, + flag_descriptions::kDisableU18FeedbackDesktopDescription, + kOsWin | kOsMac | kOsLinux, + FEATURE_WITH_PARAMS_VALUE_TYPE(switches::kDisableU18FeedbackDesktop, + kDisableU18FeedbackDesktopVariations, + "DisableU18FeedbackDesktop")}, +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) + #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) {"profile-creation-decline-signin-cta-experiment", flag_descriptions::kProfileCreationDeclineSigninCTAExperimentName, @@ -12425,6 +12568,12 @@ const FeatureEntry kFeatureEntries[] = { kProfileCreationFrictionReductionExperimentSkipCustomizeProfile)}, #endif +#if !BUILDFLAG(IS_ANDROID) + {"search-settings-update", flag_descriptions::kSearchSettingsUpdateName, + flag_descriptions::kSearchSettingsUpdateDescription, kOsDesktop, + FEATURE_VALUE_TYPE(switches::kSearchSettingsUpdate)}, +#endif + #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) {"show-profile-picker-to-all-users-experiment", flag_descriptions::kShowProfilePickerToAllUsersExperimentName, @@ -12447,6 +12596,22 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( enterprise_signals::features::kProfileSignalsReportingEnabled)}, +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_CHROMEOS) + {"projects-panel", flag_descriptions::kProjectsPanelName, + flag_descriptions::kProjectsPanelDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(tab_groups::kProjectsPanel, + kProjectsPanelVariations, + "ProjectsPanel")}, + {"sync-ai-threads", flag_descriptions::kSyncAIThreadsName, + flag_descriptions::kSyncAIThreadsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(syncer::kSyncAIThread)}, + {"sync-gemini-threads", flag_descriptions::kSyncGeminiThreadsName, + flag_descriptions::kSyncGeminiThreadsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(syncer::kSyncGeminiThread)}, +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ + // BUILDFLAG(IS_CHROMEOS) + #if BUILDFLAG(IS_ANDROID) {"autofill-enable-keyboard-accessory-chip-width-adjustment", flag_descriptions::kAutofillEnableKeyboardAccessoryChipWidthAdjustmentName, @@ -12499,6 +12664,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWebAppMigratePreinstalledChatName, flag_descriptions::kWebAppMigratePreinstalledChatDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kWebAppMigratePreinstalledChat)}, + + {"web-app-install-dialog", flag_descriptions::kWebAppInstallDialogName, + flag_descriptions::kWebAppInstallDialogDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kWebAppInstallDialog)}, #endif {"connection-allowlists", flag_descriptions::kConnectionAllowlistsName, @@ -12582,18 +12751,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(lens::features::kLensOverlayNonBlockingPrivacyNotice)}, #endif -#if BUILDFLAG(IS_ANDROID) - {"android-pb-disable-pulse-animation", - flag_descriptions::kAndroidPbDisablePulseAnimationName, - flag_descriptions::kAndroidPbDisablePulseAnimationDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kAndroidPbDisablePulseAnimation)}, - - {"android-pb-disable-smooth-animation", - flag_descriptions::kAndroidPbDisableSmoothAnimationName, - flag_descriptions::kAndroidPbDisableSmoothAnimationDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kAndroidPbDisableSmoothAnimation)}, -#endif - {"migrate-syncing-user-to-signed-in", flag_descriptions::kMigrateSyncingUserToSignedInName, flag_descriptions::kMigrateSyncingUserToSignedInDescription, @@ -12619,6 +12776,10 @@ const FeatureEntry kFeatureEntries[] = { autofill::features::kAutofillEnableNewFopDisplayAndroid)}, #endif + {"dom-storage-sqlite", flag_descriptions::kDomStorageSqliteName, + flag_descriptions::kDomStorageSqliteDescription, kOsAll, + FEATURE_VALUE_TYPE(storage::kDomStorageSqlite)}, + {"idb-sqlite-backing-store", flag_descriptions::kIdbSqliteBackingStoreName, flag_descriptions::kIdbSqliteBackingStoreDescription, kOsAll, FEATURE_VALUE_TYPE(features::kIdbSqliteBackingStore)}, @@ -12790,6 +12951,14 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(chrome::android::kEnableAndroidSidePanel)}, #endif +#if BUILDFLAG(IS_ANDROID) + {"enable-android-side-panel-dev-feature", + flag_descriptions::kEnableAndroidSidePanelDevFeatureName, + flag_descriptions::kEnableAndroidSidePanelDevFeatureDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kEnableAndroidSidePanelDevFeature)}, +#endif + #if BUILDFLAG(IS_ANDROID) {"signin-level-up-button", flag_descriptions::kSigninLevelUpButtonName, flag_descriptions::kSigninLevelUpButtonDescription, kOsAndroid, @@ -12827,6 +12996,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDevToolsProtocolMonitorDescription, kOsAll, FEATURE_VALUE_TYPE(features::kDevToolsProtocolMonitor)}, + {"devtools-webmcp-support", flag_descriptions::kDevToolsWebMCPSupportName, + flag_descriptions::kDevToolsWebMCPSupportDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kDevToolsWebMCPSupport)}, + #if BUILDFLAG(IS_ANDROID) {"use-surface-view-for-thin-webview", flag_descriptions::kUseSurfaceViewForThinWebViewName, @@ -12859,8 +13032,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSearchEngineExplicitChoiceDialogName, flag_descriptions::kSearchEngineExplicitChoiceDialogDescription, kOsWin | kOsMac, - FEATURE_VALUE_TYPE( - extensions_features::kSearchEngineExplicitChoiceDialog)}, + FEATURE_WITH_PARAMS_VALUE_TYPE( + extensions_features::kSearchEngineExplicitChoiceDialog, + kSearchEngineExplicitChoiceDialogVariations, + "SearchEngineExplicitChoiceDialogVariations")}, {"search-engine-unconditional-dialog", flag_descriptions::kSearchEngineUnconditionalDialogName, @@ -12869,17 +13044,144 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(extensions_features::kSearchEngineUnconditionalDialog)}, #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) + {"enable-webmcp-testing", flag_descriptions::kWebMCPTestingName, + flag_descriptions::kWebMCPTestingDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kWebMCPTesting)}, + #if BUILDFLAG(IS_ANDROID) {"persist-across-reboots-debug-logs", flag_descriptions::kPersistAcrossRebootsDebugLogsName, flag_descriptions::kPersistAcrossRebootsDebugLogsDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kPersistAcrossRebootsDebugLogs)}, + + {"browser-controls-scroll-snap-animation", + flag_descriptions::kBrowserControlsScrollSnapAnimationDialogName, + flag_descriptions::kBrowserControlsScrollSnapAnimationDialogDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(features::kBrowserControlsScrollSnapAnimation)}, + + {"edge-to-edge-extra-logs", flag_descriptions::kEdgeToEdgeExtraLogsName, + flag_descriptions::kEdgeToEdgeExtraLogsDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kEdgeToEdgeExtraLogs)}, + + {"compositor-view-remeasure-fix", + flag_descriptions::kCompositorViewRemeasureFixName, + flag_descriptions::kCompositorViewRemeasureFixDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kCompositorViewRemeasureFix)}, +#endif // BUILDFLAG(IS_ANDROID) + + {"autofill-enable-new-amex-network-art", + flag_descriptions::kAutofillEnableNewAmexNetworkArtName, + flag_descriptions::kAutofillEnableNewAmexNetworkArtDescription, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableNewAmexNetworkArt)}, + +#if BUILDFLAG(IS_ANDROID) + {"in-flow-trusted-vault-key-retrieval-android", + flag_descriptions::kInFlowTrustedVaultKeyRetrievalAndroidName, + flag_descriptions::kInFlowTrustedVaultKeyRetrievalAndroidDescription, + kOsAndroid, + FEATURE_VALUE_TYPE( + password_manager::features::kInFlowTrustedVaultKeyRetrievalAndroid)}, +#endif // BUILDFLAG(IS_ANDROID) + + {"chrome-finds-internals", flag_descriptions::kChromeFindsInternalsName, + flag_descriptions::kChromeFindsInternalsDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kChromeFindsInternals)}, + + {"devtools-enable-durable-messages", + flag_descriptions::kDevToolsEnableDurableMessagesName, + flag_descriptions::kDevToolsEnableDurableMessagesDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kDevToolsEnableDurableMessages)}, + + {"unthrottle-async-touch-moves", + flag_descriptions::kUnthrottleAsyncTouchMovesName, + flag_descriptions::kUnthrottleAsyncTouchMovesDescription, kOsAll, + FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kUnthrottleAsyncTouchMoves, + kUnthrottleAsyncTouchMovesVariations, + "UnthrottleAsyncTouchMoves")}, + +#if !BUILDFLAG(IS_ANDROID) + {"horizontal-tab-strip-combo-button", + flag_descriptions::kHorizontalTabStripComboButtonName, + flag_descriptions::kHorizontalTabStripComboButtonDescription, kOsDesktop, + FEATURE_VALUE_TYPE(tabs::kHorizontalTabStripComboButton)}, +#endif // BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_ANDROID) + {"ntp-mvc-refactor", flag_descriptions::kNtpMvcRefactorName, + flag_descriptions::kNtpMvcRefactorDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kNtpMvcRefactor)}, + + {"fullscreen-video-picture-in-picture", + flag_descriptions::kFullscreenVideoPictureInPictureName, + flag_descriptions::kFullscreenVideoPictureInPictureDescription, kOsAndroid, + FEATURE_VALUE_TYPE(media::kFullscreenVideoPictureInPicture)}, #endif - {"enable-webmcp-testing", flag_descriptions::kWebMCPTestingName, - flag_descriptions::kWebMCPTestingDescription, kOsAll, - FEATURE_VALUE_TYPE(blink::features::kWebMCPTesting)}, +#if BUILDFLAG(IS_ANDROID) + {"ntp-simplification", flag_descriptions::kNtpSimplificationName, + flag_descriptions::kNtpSimplificationDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kNtpSimplification)}, +#endif +#if BUILDFLAG(IS_ANDROID) + {"new-tab-page-customization-theme-sync", + flag_descriptions::kNewTabPageCustomizationThemeSyncName, + flag_descriptions::kNewTabPageCustomizationThemeSyncDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kNewTabPageCustomizationThemeSync)}, +#endif +#if BUILDFLAG(IS_ANDROID) + {"your-saved-info-settings-page-android", + flag_descriptions::kYourSavedInfoSettingsPageAndroidName, + flag_descriptions::kYourSavedInfoSettingsPageAndroidDescription, + kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kYourSavedInfoSettingsPageAndroid)}, +#endif + {"mobile-ntp-promo-on-desktop", + flag_descriptions::kMobileNTPPromoOnDesktopName, + flag_descriptions::kMobileNTPPromoOnDesktopDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(kMobileNTPPromoOnDesktop, + kMobileNTPPromoOnDesktopVariations, + "MobileNTPPromoOnDesktop")}, +#if BUILDFLAG(IS_ANDROID) + {"autofill-touch-to-fill-show-manual-fill-for-vcn-fix", + flag_descriptions::kAutofillTouchToFillShowManualFillForVcnFixName, + flag_descriptions::kAutofillTouchToFillShowManualFillForVcnFixDescription, + kOsAndroid, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillTouchToFillShowManualFillForVcnFix)}, +#endif // BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch1", flag_descriptions::kApb144Patch1Name, + flag_descriptions::kApb144Patch1Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch1)}, +#endif + +#if BUILDFLAG(ENABLE_DICE_SUPPORT) + {"signin-promo-on-avatar-pill", + flag_descriptions::kSigninPromoOnAvatarPillName, + flag_descriptions::kSigninPromoOnAvatarPillDescription, + kOsMac | kOsWin | kOsLinux, + FEATURE_WITH_PARAMS_VALUE_TYPE(switches::kSigninPromoOnAvatarPill, + kSigninPromoOnAvatarPillVariation, + "SigninPromoOnAvatarPillVariation")}, +#endif + {"mobile-promo-on-desktop-with-qr-code-wave-1", + flag_descriptions::kMobilePromoOnDesktopWithQRCodeWave1Name, + flag_descriptions::kMobilePromoOnDesktopWithQRCodeWave1Description, kOsAll, + FEATURE_WITH_PARAMS_VALUE_TYPE( + kMobilePromoOnDesktopWithQRCodeWave1, + kMobilePromoOnDesktopWithQRCodeVariationsWave1, + "MobilePromoOnDesktopWithQRCodeWave1")}, + {"mobile-promo-on-desktop-with-reminder-wave-1", + flag_descriptions::kMobilePromoOnDesktopWithReminderWave1Name, + flag_descriptions::kMobilePromoOnDesktopWithReminderWave1Description, + kOsAll, + FEATURE_WITH_PARAMS_VALUE_TYPE(kMobilePromoOnDesktopWithReminderWave1, + kMobilePromoOnDesktopVariationsWave1, + "MobilePromoOnDesktopWithReminderWave1")}, // 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 @@ -12984,16 +13286,6 @@ bool ShouldSkipConditionalFeatureEntry(const flags_ui::FlagsStorage* storage, const FeatureEntry& entry) { #if BUILDFLAG(IS_CHROMEOS) version_info::Channel channel = chrome::GetChannel(); - // enable-projector-server-side-speech-recognition is only available in Chrome - // branded builds. - if (std::string_view(kProjectorServerSideSpeechRecognition) == - entry.internal_name) { -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) - return false; -#else - return true; -#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) - } // enable-ui-devtools is only available on for non Stable channels. if (std::string_view(ui_devtools::switches::kEnableUiDevTools) == 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 0ec41022..9c3d04b2 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 @@ -512,7 +512,6 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( if (lens::features::IsLensOverlayTranslateLanguagesFetchEnabled()) { profile_->GetDefaultStoragePartition()->ClearDataForOrigin( content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE, - /*quota_storage_remove_mask=*/0, GURL(chrome::kChromeUILensOverlayUntrustedURL), base::DoNothing()); } #endif @@ -698,8 +697,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( profile_->GetDefaultStoragePartition()->ClearDataForOrigin( content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE, - /*quota_storage_remove_mask=*/0, GURL(chrome::kChromeUINewTabPageURL), - base::DoNothing()); + GURL(chrome::kChromeUINewTabPageURL), base::DoNothing()); } #endif // !BUILDFLAG(IS_ANDROID) @@ -1405,10 +1403,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( ->registrar_unsafe(); for (const web_app::WebApp& web_app : web_app_registrar.GetAppsIncludingStubs()) { - if (!web_app_registrar.AppMatches( - web_app.app_id(), - web_app::WebAppFilter::IsIsolatedWebAppIncludingUninstalling()) || - !filter.Run(web_app.scope())) { + if (!filter.Run(web_app.scope())) { continue; } std::vector partitions = 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 7ca1e306..25458578 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 @@ -24,7 +24,6 @@ #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" #include "base/functional/bind.h" #include "base/functional/callback.h" @@ -98,11 +97,13 @@ #include "chrome/browser/media/audio_service_util.h" #include "chrome/browser/media/prefs/capture_device_ranking.h" #include "chrome/browser/media/router/media_router_feature.h" +#include "chrome/browser/media/unified_autoplay_config.h" #include "chrome/browser/media/webrtc/audio_debug_recordings_handler.h" #include "chrome/browser/media/webrtc/capture_policy_utils.h" #include "chrome/browser/media/webrtc/chrome_screen_enumerator.h" #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_device_salt_service_factory.h" +#include "chrome/browser/media/webrtc/rtc_diagnostic_logging_utils.h" #include "chrome/browser/media/webrtc/webrtc_logging_controller.h" #include "chrome/browser/metrics/chrome_feature_list_creator.h" #include "chrome/browser/navigation_predictor/anchor_element_preloader.h" @@ -359,6 +360,7 @@ #include "device/vr/buildflags/buildflags.h" #include "extensions/browser/browser_frame_context_data.h" #include "extensions/buildflags/buildflags.h" +#include "extensions/common/switches.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/google_api_keys.h" #include "gpu/config/gpu_switches.h" @@ -369,7 +371,6 @@ #include "media/mojo/mojom/speech_recognizer.mojom.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/base/data_url.h" -#include "net/base/features.h" #include "net/cookies/cookie_setting_override.h" #include "net/cookies/site_for_cookies.h" #include "net/ssl/client_cert_store.h" @@ -395,10 +396,12 @@ #include "services/network/public/mojom/web_transport.mojom.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" +#include "third_party/blink/public/common/mime_util/mime_util.h" #include "third_party/blink/public/common/navigation/navigation_policy.h" #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-forward.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" @@ -524,7 +527,6 @@ #include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/digital_credentials/digital_identity_provider_desktop.h" #include "chrome/browser/direct_sockets/chrome_direct_sockets_delegate.h" -#include "chrome/browser/media/unified_autoplay_config.h" #include "chrome/browser/metrics/usage_scenario/chrome_responsiveness_calculator_delegate.h" #include "chrome/browser/new_tab_page/new_tab_page_util.h" #include "chrome/browser/picture_in_picture/auto_picture_in_picture_tab_helper.h" @@ -551,6 +553,7 @@ #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" +#include "chrome/browser/web_applications/web_app_filter.h" #include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" @@ -571,6 +574,7 @@ #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_CHROMEOS) +#include "ash/constants/webui_url_constants.h" #include "ash/shell.h" #include "base/debug/leak_annotations.h" #include "chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h" @@ -633,8 +637,13 @@ #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #endif -#elif BUILDFLAG(IS_ANDROID) +#else // !BUILDFLAG(ENABLE_EXTENSIONS_CORE) +#if BUILDFLAG(IS_ANDROID) #include "chrome/browser/android/guest_view/chrome_content_browser_client_guest_view_part.h" +#endif +#if BUILDFLAG(ENABLE_GUEST_VIEW) +#include "components/guest_view/browser/slim_web_view/slim_web_view_url_loader_factory_interceptor.h" // nogncheck +#endif #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) #if BUILDFLAG(ENABLE_EXTENSIONS) @@ -784,6 +793,13 @@ bool g_disable_advanced_protection_caching_for_tests = false; BASE_FEATURE(kPrewarmServiceWorkerRegistrationForDSE, base::FEATURE_DISABLED_BY_DEFAULT); +#if BUILDFLAG(ENABLE_REQUEST_HEADER_INTEGRITY) +// Kill-switch for the request integrity headers support for prefetches +// initiated by `content::PrefetchContainer`. +BASE_FEATURE(kPrefetchRequestIntegrityHeaders, + base::FEATURE_ENABLED_BY_DEFAULT); +#endif + // Cached version of the locale so we can return the locale on the I/O // thread. std::string& GetIOThreadApplicationLocale() { @@ -854,10 +870,17 @@ bool IsFileOrDirectoryPickerWithoutGestureAllowed( contents->GetURL(), prefs, prefs::kFileOrDirectoryPickerWithoutGestureAllowedForOrigins); } +#endif // !BUILDFLAG(IS_ANDROID) // Check if autoplay is allowed by policy configuration. bool IsAutoplayAllowedByPolicy(content::WebContents* contents, PrefService* prefs) { +#if BUILDFLAG(IS_ANDROID) + if (!base::FeatureList::IsEnabled(media::kAutoplayPoliciesAndroid)) { + return false; + } +#endif + if (!contents) { return false; } @@ -866,7 +889,67 @@ bool IsAutoplayAllowedByPolicy(content::WebContents* contents, prefs::kAutoplayAllowlist, prefs::kAutoplayAllowed); } -#endif // !BUILDFLAG(IS_ANDROID) + +blink::mojom::AutoplayPolicy DetermineWebContentsAutoplayPolicy( + content::WebContents* web_contents, + blink::mojom::AutoplayPolicy current_policy) { + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + PrefService* prefs = profile->GetPrefs(); + + if (IsAutoplayAllowedByPolicy(web_contents, prefs)) { + return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; + } + + // If we can show a setting to disable autoplay policy and are currently set + // to `kDocumentUserActivationRequired`, return the user preference. + if (base::FeatureList::IsEnabled(media::kAutoplayDisableSettings) && + current_policy == + blink::mojom::AutoplayPolicy::kDocumentUserActivationRequired) { + return UnifiedAutoplayConfig::ShouldBlockAutoplay(profile) + ? blink::mojom::AutoplayPolicy::kDocumentUserActivationRequired + : blink::mojom::AutoplayPolicy::kNoUserGestureRequired; + } + + // If the domain policy allows autoplay and has delegated that to an iframe, + // allow autoplay within the iframe. Only allow a nesting of single depth. + if (web_contents->GetPrimaryMainFrame()->IsFeatureEnabled( + network::mojom::PermissionsPolicyFeature::kAutoplay) && + IsAutoplayAllowedByPolicy(web_contents->GetOuterWebContents(), prefs)) { + return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; + } + + // Allow Autoplay if the user provided mic/cam access. This is for cases such + // as received-video-call rings occurring before the user interacted with the + // page. + if (base::FeatureList::IsEnabled(media::kAutoplayBypassForMicCamera)) { + const HostContentSettingsMap* const content_settings = + HostContentSettingsMapFactory::GetForProfile(profile); + const GURL& url = web_contents->GetLastCommittedURL(); + + if (content_settings->GetContentSetting( + url, url, ContentSettingsType::MEDIASTREAM_MIC) == + CONTENT_SETTING_ALLOW || + content_settings->GetContentSetting( + url, url, ContentSettingsType::MEDIASTREAM_CAMERA) == + CONTENT_SETTING_ALLOW) { + return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; + } + } + +#if BUILDFLAG(IS_ANDROID) + // TWAs don't require a user gesture for unmuted autoplay. + if (base::FeatureList::IsEnabled(features::kAllowUnmutedAutoplayForTWA)) { + if (auto* delegate = TabAndroid::FromWebContents(web_contents)) { + if (delegate->IsTrustedWebActivity()) { + return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; + } + } + } +#endif // BUILDFLAG(IS_ANDROID) + + return current_policy; +} blink::mojom::AutoplayPolicy GetAutoplayPolicyForWebContents( WebContents* web_contents) { @@ -888,40 +971,7 @@ blink::mojom::AutoplayPolicy GetAutoplayPolicyForWebContents( NOTREACHED(); } -#if !BUILDFLAG(IS_ANDROID) - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - PrefService* prefs = profile->GetPrefs(); - - // Override autoplay policy used in internal switch in case of enabling - // features such as policy, allowlisting or disabling from settings. - if (IsAutoplayAllowedByPolicy(web_contents, prefs)) { - result = blink::mojom::AutoplayPolicy::kNoUserGestureRequired; - } else if (base::FeatureList::IsEnabled(media::kAutoplayDisableSettings) && - result == blink::mojom::AutoplayPolicy:: - kDocumentUserActivationRequired) { - result = UnifiedAutoplayConfig::ShouldBlockAutoplay(profile) - ? blink::mojom::AutoplayPolicy::kDocumentUserActivationRequired - : blink::mojom::AutoplayPolicy::kNoUserGestureRequired; - } else if (web_contents->GetPrimaryMainFrame()->IsFeatureEnabled( - network::mojom::PermissionsPolicyFeature::kAutoplay) && - IsAutoplayAllowedByPolicy(web_contents->GetOuterWebContents(), - prefs)) { - // If the domain policy allows autoplay and has delegated that to an iframe, - // allow autoplay within the iframe. Only allow a nesting of single depth. - result = blink::mojom::AutoplayPolicy::kNoUserGestureRequired; - } -#else // !BUILDFLAG(IS_ANDROID) - // TWAs don't require a user gesture for unmuted autoplay. - if (base::FeatureList::IsEnabled(features::kAllowUnmutedAutoplayForTWA)) { - if (auto* delegate = TabAndroid::FromWebContents(web_contents)) { - if (delegate->IsTrustedWebActivity()) { - result = blink::mojom::AutoplayPolicy::kNoUserGestureRequired; - } - } - } -#endif // BUILDFLAG(IS_ANDROID) - return result; + return DetermineWebContentsAutoplayPolicy(web_contents, result); } #if BUILDFLAG(IS_ANDROID) @@ -1462,9 +1512,9 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterDictionaryPref( prefs::kDevToolsBackgroundServicesExpirationDict); registry->RegisterBooleanPref(prefs::kSignedHTTPExchangeEnabled, true); -#if !BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kAutoplayAllowed, false); registry->RegisterListPref(prefs::kAutoplayAllowlist); +#if !BUILDFLAG(IS_ANDROID) registry->RegisterListPref( prefs::kFileOrDirectoryPickerWithoutGestureAllowedForOrigins); registry->RegisterIntegerPref(prefs::kFetchKeepaliveDurationOnShutdown, 0); @@ -1632,7 +1682,7 @@ void ChromeContentBrowserClient::MaybeProxyNetworkBoundRequest( // the hijacked remote to this. network::mojom::URLLoaderFactoryParamsPtr params = network::mojom::URLLoaderFactoryParams::New(); - params->process_id = network::OriginatingProcess::browser(); + params->process_id = network::OriginatingProcessId::browser(); params->is_trusted = true; params->isolation_info = isolation_info; // Disable CORS wrapping, this is already handled by the caller. @@ -1813,11 +1863,18 @@ void ChromeContentBrowserClient::OnRendererProcessLockedStateUpdated( if (!base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) { return; } - chrome::mojom::StaticParamsPtr params = chrome::mojom::StaticParams::New(); Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); - if (search::ShouldAssignURLToInstantRenderer(site_url, profile)) { - params->is_instant_process = true; + const bool is_instant_process = + search::ShouldAssignURLToInstantRenderer(site_url, profile); + if (is_instant_process) { + // Grant commit scheme access to chrome-search for instant processes. + // Browser-side enforcement ensures non-instant processes cannot access + // chrome-search URLs. + content::ChildProcessSecurityPolicy::GetInstance()->GrantCommitScheme( + host->GetDeprecatedID(), chrome::kChromeSearchScheme); } + chrome::mojom::StaticParamsPtr params = chrome::mojom::StaticParams::New(); + params->is_instant_process = is_instant_process; auto renderer_configuration = GetRendererConfiguration(host); renderer_configuration->SetConfigurationOnProcessLockUpdate( std::move(params)); @@ -2302,26 +2359,35 @@ size_t ChromeContentBrowserClient::GetProcessCountToIgnoreForLimit() { #endif } -std::optional> -ChromeContentBrowserClient::GetPermissionsPolicyForIsolatedWebApp( +bool ChromeContentBrowserClient:: + SupportsBaselinePermissionsPolicyForIsolatedApp() { + return true; +} + +std::vector +ChromeContentBrowserClient::GetBaselinePermissionsPolicyForIsolatedApp( content::BrowserContext* browser_context, - const url::Origin& iwa_origin) { + const url::Origin& app_origin) { #if !BUILDFLAG(IS_ANDROID) Profile* profile = Profile::FromBrowserContext(browser_context); web_app::IwaPermissionsPolicyCache* cache = web_app::IwaPermissionsPolicyCacheFactory::GetForProfile(profile); if (!cache) { - return std::nullopt; + return {}; } - ASSIGN_OR_RETURN(web_app::IwaOrigin origin, - web_app::IwaOrigin::Create(iwa_origin.GetURL()), - [](auto) { return std::nullopt; }); + ASSIGN_OR_RETURN( + web_app::IwaOrigin origin, + web_app::IwaOrigin::Create(app_origin.GetURL()), [](auto) { + return std::vector(); + }); const web_app::IwaPermissionsPolicyCache::CacheEntry* policy = cache->GetPolicy(origin); if (!policy) { - return std::nullopt; + // If we can't calculate a baseline permissions policy for a valid IWA + // origin for some reason, use a strict fallback. + return {}; } return base::ToVector(*policy, [](const auto& entry) { @@ -2329,7 +2395,7 @@ ChromeContentBrowserClient::GetPermissionsPolicyForIsolatedWebApp( entry.feature, entry.allowed_origins); }); #else - return std::nullopt; + return {}; #endif } @@ -2338,7 +2404,7 @@ bool ChromeContentBrowserClient::ShouldTryToUseExistingProcessHost( const GURL& url) { // Top Chrome WebUI should try to share a RenderProcessHost with other // existing Top Chrome WebUI. - if (IsTopChromeWebUIURL(url)) { + if (::IsTopChromeWebUIURL(url)) { return true; } @@ -2601,6 +2667,10 @@ bool ChromeContentBrowserClient::IsInitialWebUIURL(const GURL& url) { } #endif // !BUILDFLAG(IS_ANDROID) +bool ChromeContentBrowserClient::IsTopChromeWebUIURL(const GURL& url) { + return ::IsTopChromeWebUIURL(url); +} + bool ChromeContentBrowserClient::IsIsolatedContextAllowedForUrl( content::BrowserContext* browser_context, const GURL& lock_url) { @@ -2955,12 +3025,12 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( // only. extensions::switches::kAllowlistedExtensionID, extensions::switches::kExtensionTestApiOnWebPages, // For tests only. + extensions::switches::kAppsGalleryURL, #endif switches::kAllowInsecureLocalhost, - switches::kAppsGalleryURL, switches::kDisableJavaScriptHarmonyShipping, - variations::switches::kEnableBenchmarking, variations::switches::kEnableBenchmarkingApi, + switches::kEnableBenchmarking, switches::kEnableDistillabilityService, switches::kEnableNetBenchmarking, switches::kExtensionAiDataCollection, @@ -3461,6 +3531,8 @@ bool ChromeContentBrowserClient::IsPrivacySandboxReportingDestinationAttested( gated_api = privacy_sandbox::PrivacySandboxAttestationsGatedAPI::kSharedStorage; break; + default: + NOTREACHED(); } return privacy_sandbox_settings->IsEventReportingDestinationAttested( @@ -3907,7 +3979,7 @@ bool ChromeContentBrowserClient::IsWebUIBundledCodeCachingEnabled( const GURL& webui_lock_url) const { // Enable bundled code caching only for top-chrome WebUI hosts. return base::FeatureList::IsEnabled(features::kWebUIBundledCodeCache) && - IsTopChromeWebUIURL(webui_lock_url); + ::IsTopChromeWebUIURL(webui_lock_url); } base::flat_map @@ -4690,9 +4762,8 @@ void ChromeContentBrowserClient::OverrideWebPreferences( const webapps::AppId& app_id = browser->app_controller()->app_id(); const web_app::WebAppRegistrar& registrar = web_app_provider->registrar_unsafe(); - if (registrar.IsInstallState( - app_id, {web_app::proto::INSTALLED_WITH_OS_INTEGRATION, - web_app::proto::INSTALLED_WITHOUT_OS_INTEGRATION})) { + if (registrar.AppMatches(app_id, + web_app::WebAppFilter::InstalledInChrome())) { web_prefs->web_app_scope = registrar.GetAppScope(app_id); } @@ -4820,9 +4891,9 @@ void ChromeContentBrowserClient::OverrideWebPreferences( base::FeatureList::IsEnabled(::features::kContextMenuEmptySpace); #endif - if (base::FeatureList::IsEnabled(::features::kDevToolsAiPromptApi) && - web_contents->GetVisibleURL().SchemeIs(content::kChromeDevToolsScheme)) { - web_prefs->ai_prompt_api_enabled = true; + if (web_contents->GetVisibleURL().SchemeIs(content::kChromeDevToolsScheme) && + base::FeatureList::IsEnabled(::features::kDevToolsAiOriginTrialsApis)) { + web_prefs->ai_ot_apis_enabled = true; } } @@ -4900,6 +4971,17 @@ bool ChromeContentBrowserClient::OverrideWebPreferencesAfterNavigation( (web_prefs->force_dark_mode_enabled != force_dark_mode_new_state); web_prefs->force_dark_mode_enabled = force_dark_mode_new_state; } + if (blink::IsSupportedImageMimeType(web_contents->GetContentsMimeType())) { + // Ensure images can zoom out and will scale to fit the viewport width. + prefs_changed |= (web_prefs->default_minimum_page_scale_factor != + WebPreferences::kDefaultMinimumPageScaleFactor); + web_prefs->default_minimum_page_scale_factor = + WebPreferences::kDefaultMinimumPageScaleFactor; + prefs_changed |= (web_prefs->shrinks_viewport_contents_to_fit != + WebPreferences::kShrinksViewportContentsToFit); + web_prefs->shrinks_viewport_contents_to_fit = + WebPreferences::kShrinksViewportContentsToFit; + } #endif #if BUILDFLAG(IS_CHROMEOS) @@ -5286,7 +5368,7 @@ bool ChromeContentBrowserClient::PreSpawnChild( // Allow loading Chrome's DLLs. for (const auto* dll : {chrome::kBrowserResourcesDll, chrome::kElfDll}) { - result = config->AllowExtraDll(GetModulePath(dll).value().c_str()); + result = config->AllowExtraDll(GetModulePath(dll).value()); if (result != sandbox::SBOX_ALL_OK) { return false; } @@ -5556,7 +5638,7 @@ ChromeContentBrowserClient::GetDevToolsBackgroundServiceExpirations( std::optional ChromeContentBrowserClient::GetSpareRendererDelayForSiteURL( const GURL& site_url) { - if (IsTopChromeWebUIURL(site_url)) { + if (::IsTopChromeWebUIURL(site_url)) { // Experiments have shown that delaying 2s brings the most significant // improvements to Top Chrome WebUIs. See crbug.com/41490050. return base::Seconds(2); @@ -6150,7 +6232,7 @@ bool IsSystemFeatureURLDisabled(const GURL& url) { // chrome://os-settings/pwa.html shouldn't be replaced to let the settings app // installation complete successfully. - if (url.DomainIs(chrome::kChromeUIOSSettingsHost) && + if (url.DomainIs(ash::kChromeUIOSSettingsHost) && url.GetPath() != "/pwa.html") { return IsSystemFeatureDisabled(policy::SystemFeature::kOsSettings); } @@ -6159,8 +6241,7 @@ bool IsSystemFeatureURLDisabled(const GURL& url) { return IsSystemFeatureDisabled(policy::SystemFeature::kBrowserSettings); } -#if BUILDFLAG(IS_CHROMEOS) - if (url.DomainIs(chrome::kChromeUIUntrustedCroshHost)) { + if (url.DomainIs(ash::kChromeUIUntrustedCroshHost)) { return IsSystemFeatureDisabled(policy::SystemFeature::kCrosh); } @@ -6180,7 +6261,7 @@ bool IsSystemFeatureURLDisabled(const GURL& url) { return IsSystemFeatureDisabled(policy::SystemFeature::kGallery); } - if (url.DomainIs(chrome::kChromeUIUntrustedTerminalHost)) { + if (url.DomainIs(ash::kChromeUIUntrustedTerminalHost)) { return IsSystemFeatureDisabled(policy::SystemFeature::kTerminal); } @@ -6196,8 +6277,6 @@ bool IsSystemFeatureURLDisabled(const GURL& url) { return IsSystemFeatureDisabled(policy::SystemFeature::kRecorder); } -#endif - return false; } #endif @@ -6448,6 +6527,11 @@ void ChromeContentBrowserClient::WillCreateURLLoaderFactory( } #endif // !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_GUEST_VIEW) && !BUILDFLAG(ENABLE_EXTENSIONS_CORE) + guest_view::MaybeInterceptURLLoaderFactoryForSlimWebView( + frame, factory_builder, header_client); +#endif + // WARNING: This must be the last interceptor in the chain as the proxying // URLLoaderFactory installed by this needs to be the one actually sending // packets over the network (to effectively target `bound_network`). @@ -6499,7 +6583,7 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( content::ContentBrowserClient::URLLoaderRequestHandler ChromeContentBrowserClient:: - CreateURLLoaderHandlerForServiceWorkerNavigationPreload( + CreateURLLoaderHandlerForServiceWorkerInitiatedNavigationRequest( content::FrameTreeNodeId frame_tree_node_id, const network::ResourceRequest& resource_request) { SearchPrefetchURLLoader::RequestHandler prefetch_handler = @@ -6869,9 +6953,8 @@ ChromeContentBrowserClient::CreateLoginDelegate( // create a TGT using their credentials. Note that the credentials are NOT // passed to the browser and everything happens on OS level, hence we return // nullptr instead of LoginDelegate to fail authentication. (See b/260522530). - if (base::FeatureList::IsEnabled(net::features::kKerberosInBrowserRedirect) && - auth_info.scheme == - net::HttpAuth::SchemeToString(net::HttpAuth::AUTH_SCHEME_NEGOTIATE)) { + if (auth_info.scheme == + net::HttpAuth::SchemeToString(net::HttpAuth::AUTH_SCHEME_NEGOTIATE)) { ash::KerberosInBrowserDialog::Show(); return nullptr; } @@ -7111,7 +7194,7 @@ bool ChromeContentBrowserClient::HandleWebUI( } if (IsSystemFeatureURLDisabled(*url)) { - *url = GURL(chrome::kChromeUIAppDisabledURL); + *url = GURL(ash::kChromeUIAppDisabledURL); return true; } #endif @@ -7396,6 +7479,29 @@ bool ChromeContentBrowserClient::IsBuiltinComponent( #endif } +void ChromeContentBrowserClient::StartRtcDiagnosticLogging( + content::RenderFrameHost& frame_host, + bool should_upload_on_stop, + base::flat_map metadata, + base::OnceCallback callback) { + rtc_diagnostic_logging::StartRtcDiagnosticLogging( + frame_host, should_upload_on_stop, std::move(metadata), + std::move(callback)); +} + +void ChromeContentBrowserClient::FinishRtcDiagnosticLogging( + content::RenderFrameHost& frame_host, + base::OnceClosure callback) { + rtc_diagnostic_logging::FinishRtcDiagnosticLogging(frame_host, + std::move(callback)); +} + +void ChromeContentBrowserClient::CancelRtcDiagnosticLogging( + content::RenderFrameHost& frame_host, + base::OnceClosure callback) { + rtc_diagnostic_logging::CancelRtcDiagnosticLogging(frame_host, + std::move(callback)); +} bool ChromeContentBrowserClient::ShouldBlockRendererDebugURL( const GURL& url, content::BrowserContext* context, @@ -7916,7 +8022,7 @@ bool ChromeContentBrowserClient::DisallowV8FeatureFlagOverridesForSite( const GURL& site_url) { // Disable V8 feature flag overrides specifically for top-chrome WebUI URLs. return base::FeatureList::IsEnabled(features::kWebUIBundledCodeCache) && - IsTopChromeWebUIURL(site_url); + ::IsTopChromeWebUIURL(site_url); } ukm::UkmService* ChromeContentBrowserClient::GetUkmService() { @@ -8699,9 +8805,8 @@ void ChromeContentBrowserClient::QueryInstalledWebAppsByManifestId( .Set("manifest_id", manifest_id.spec()) .Set("frame_url", frame_url.spec())); - if (!lock.registrar().IsInstallState( - app_id, {web_app::proto::INSTALLED_WITHOUT_OS_INTEGRATION, - web_app::proto::INSTALLED_WITH_OS_INTEGRATION})) { + if (!lock.registrar().AppMatches( + app_id, web_app::WebAppFilter::InstalledInChrome())) { debug_value.Set("did_find_application", false); return std::nullopt; } @@ -8875,10 +8980,6 @@ bool ChromeContentBrowserClient::UsePrefetchPrerenderIntegration() { base::FeatureList::IsEnabled(features::kNewTabPageTriggerForPrefetch); } -bool ChromeContentBrowserClient::UsePreloadServingMetrics() { - return features::kDsePreload2UsePreloadServingMetrics.Get(); -} - #if !BUILDFLAG(IS_ANDROID) bool ChromeContentBrowserClient::ShouldDisallowCredentialRequest( content::WebContents* web_contents) { @@ -8996,3 +9097,31 @@ bool ChromeContentBrowserClient::ShouldAllowPrefetchRedirection( url)) || google_util::IsGoogleSearchUrl(url)); } + +void ChromeContentBrowserClient::ModifyRequestHeadersForPrefetch( + const GURL& url, + std::vector& removed_headers, + net::HttpRequestHeaders& modified_headers, + net::HttpRequestHeaders& modified_cors_exempt_headers) { +#if BUILDFLAG(ENABLE_REQUEST_HEADER_INTEGRITY) + if (base::FeatureList::IsEnabled(kPrefetchRequestIntegrityHeaders) && + request_header_integrity::RequestHeaderIntegrityURLLoaderThrottle:: + IsFeatureEnabled()) { + request_header_integrity::RequestHeaderIntegrityURLLoaderThrottle:: + ModifyRequestIntegrityHeadersForPrefetch(url, removed_headers, + modified_cors_exempt_headers); + } +#endif +} + +void ChromeContentBrowserClient::UpdateCorsExemptHeaderForPrefetch( + network::mojom::NetworkContextParams* params) { +#if BUILDFLAG(ENABLE_REQUEST_HEADER_INTEGRITY) + if (base::FeatureList::IsEnabled(kPrefetchRequestIntegrityHeaders) && + request_header_integrity::RequestHeaderIntegrityURLLoaderThrottle:: + IsFeatureEnabled()) { + request_header_integrity::RequestHeaderIntegrityURLLoaderThrottle:: + UpdateCorsExemptHeaders(params); + } +#endif +} 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 e6e51235..238e0cae 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 @@ -9,12 +9,14 @@ #include "build/build_config.h" #include "build/buildflag.h" #include "chrome/browser/actor/actor_navigation_throttle.h" +#include "chrome/browser/autocomplete/aim_eligibility_refresh_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" +#include "chrome/browser/glic/glic_navigation_throttle.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/interstitials/enterprise_util.h" #include "chrome/browser/lookalikes/lookalike_url_navigation_throttle.h" @@ -35,6 +37,7 @@ #include "chrome/browser/ui/passwords/password_manager_navigation_throttle.h" #include "chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h" #include "chrome/browser/ui/web_applications/navigation_capturing_redirection_throttle.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "components/captive_portal/content/captive_portal_service.h" @@ -94,9 +97,11 @@ #include "chrome/browser/themes/theme_service_factory.h" #include "chrome/browser/ui/lens/lens_overlay_side_panel_navigation_throttle.h" #include "chrome/browser/ui/read_anything/read_anything_side_panel_navigation_throttle.h" +#include "chrome/browser/ui/search/chrome_search_navigation_throttle.h" #include "chrome/browser/ui/search/new_tab_page_navigation_throttle.h" #include "chrome/browser/ui/web_applications/tabbed_web_app_navigation_throttle.h" #include "chrome/browser/ui/web_applications/webui_web_app_navigation_throttle.h" +#include "chrome/browser/ui/webui/image/image_navigation_throttle.h" #include "chrome/browser/ui/webui/ntp_microsoft_auth/ntp_microsoft_auth_response_capture_navigation_throttle.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.h" #endif // BUILDFLAG(IS_ANDROID) @@ -453,19 +458,32 @@ void CreateAndAddChromeThrottlesForNavigation( #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || // BUILDFLAG(IS_CHROMEOS) + // AimEligibilityRefreshNavigationThrottle must be registered before + // ContextualTasksNavigationThrottle so it can detect AIM URL navigations + // before ContextualTasksNavigationThrottle intercepts them. + AimEligibilityRefreshNavigationThrottle::MaybeCreateAndAdd(registry); + #if !BUILDFLAG(IS_ANDROID) - if (base::FeatureList::IsEnabled(contextual_tasks::kContextualTasks)) { + if (base::FeatureList::IsEnabled(contextual_tasks::kContextualTasks) || + base::FeatureList::IsEnabled( + contextual_tasks::kContextualTasksUrlRedirectToAimUrl)) { contextual_tasks::ContextualTasksNavigationThrottle::MaybeCreateAndAdd( registry); } DevToolsWindow::MaybeCreateAndAddNavigationThrottle(registry); + if (base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) { + ChromeSearchNavigationThrottle::MaybeCreateAndAdd(registry); + } + NewTabPageNavigationThrottle::MaybeCreateAndAdd(registry); web_app::TabbedWebAppNavigationThrottle::MaybeCreateAndAdd(registry); web_app::WebUIWebAppNavigationThrottle::MaybeCreateAndAdd(registry); + + ImageNavigationThrottle::MaybeCreateAndAdd(registry); #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) @@ -591,10 +609,13 @@ void CreateAndAddChromeThrottlesForNavigation( web_app::IsolatedWebAppThrottle::MaybeCreateAndAdd(registry); #endif // !BUILDFLAG(IS_ANDROID) + actor::ActorNavigationThrottle::MaybeCreateAndAdd(registry); dom_distiller::DistillerPageWebContents::MaybeCreateAndAddNavigationThrottle( registry); dom_distiller::DistillerReferrerThrottle::MaybeCreateAndAdd(registry); + + glic::GlicNavigationThrottle::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 8d175c77..c998cf2e 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 @@ -8,7 +8,6 @@ import org.chromium.base.BaseFeatures; import org.chromium.base.FeatureMap; import org.chromium.base.MutableBooleanParamWithSafeDefault; import org.chromium.base.MutableFlagWithSafeDefault; -import org.chromium.base.MutableIntParamWithSafeDefault; import org.chromium.base.MutableParamWithSafeDefault; import org.chromium.base.SysUtils; import org.chromium.base.TimeUtils; @@ -157,6 +156,7 @@ public abstract class ChromeFeatureList { // Feature names. // LINT.IfChange(FeaturesExposedToJava) // keep-sorted start group_prefixes=["public static final String"] + public static final String ABORT_NAVIGATIONS_FROM_TAB_CLOSURES = "AbortNavigationsFromTabClosures"; public static final String ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS = @@ -190,17 +190,13 @@ public abstract class ChromeFeatureList { public static final String ANDROID_DESKTOP_DENSITY = "AndroidDesktopDensity"; public static final String ANDROID_ELEGANT_TEXT_HEIGHT = "AndroidElegantTextHeight"; public static final String ANDROID_FIRST_RUN_LAUNCH_BOUNDS = "AndroidFirstRunLaunchBounds"; - public static final String ANDROID_LOGO_VIEW_REFACTOR = "AndroidLogoViewRefactor"; + public static final String ANDROID_HISTORY_CLUSTERING = "AndroidHistoryClustering"; public static final String ANDROID_NEW_MEDIA_PICKER = "AndroidNewMediaPicker"; public static final String ANDROID_NO_VISIBLE_HINT_FOR_DIFFERENT_TLD = "AndroidNoVisibleHintForDifferentTLD"; public static final String ANDROID_OMNIBOX_FOCUSED_NEW_TAB_PAGE = "AndroidOmniboxFocusedNewTabPage"; public static final String ANDROID_OPEN_INCOGNITO_AS_WINDOW = "AndroidOpenIncognitoAsWindow"; - public static final String ANDROID_PB_DISABLE_PULSE_ANIMATION = - "AndroidPbDisablePulseAnimation"; - public static final String ANDROID_PB_DISABLE_SMOOTH_ANIMATION = - "AndroidPbDisableSmoothAnimation"; public static final String ANDROID_PINNED_TABS = "AndroidPinnedTabs"; public static final String ANDROID_PINNED_TABS_TABLET_TAB_STRIP = "AndroidPinnedTabsTabletTabStrip"; @@ -211,7 +207,6 @@ public abstract class ChromeFeatureList { public static final String ANDROID_SURFACE_COLOR_UPDATE = "AndroidSurfaceColorUpdate"; public static final String ANDROID_TAB_DECLUTTER_DEDUPE_TAB_IDS_KILL_SWITCH = "AndroidTabDeclutterDedupeTabIdsKillSwitch"; - public static final String ANDROID_TAB_HIGHLIGHTING = "AndroidTabHighlighting"; public static final String ANDROID_TAB_SKIP_SAVE_TABS_TASK_KILLSWITCH = "AndroidTabSkipSaveTabsTaskKillswitch"; public static final String ANDROID_THEME_MODULE = "AndroidThemeModule"; @@ -221,7 +216,6 @@ public abstract class ChromeFeatureList { 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_LAUNCH_HANDLER = "AndroidWebAppLaunchHandler"; 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"; @@ -235,11 +229,15 @@ public abstract class ChromeFeatureList { public static final String ANIMATED_IMAGE_DRAG_SHADOW = "AnimatedImageDragShadow"; public static final String ANNOTATED_PAGE_CONTENTS_VIRTUAL_STRUCTURE = "AnnotatedPageContentsVirtualStructure"; + public static final String APB144_PATCH1 = "Apb144Patch1"; public static final String APP_SPECIFIC_HISTORY = "AppSpecificHistory"; public static final String APP_SPECIFIC_HISTORY_VIEW_INTENT = "AppSpecificHistoryViewIntent"; public static final String ASYNC_NOTIFICATION_MANAGER = "AsyncNotificationManager"; public static final String ASYNC_NOTIFICATION_MANAGER_FOR_DOWNLOAD = "AsyncNotificationManagerForDownload"; + public static final String AUTOFILL_AI_CREATE_ENTITY_DATA_MANAGER = + "AutofillAiCreateEntityDataManager"; + public static final String AUTOFILL_AI_REAUTH_REQUIRED = "AutofillAiReauthRequired"; public static final String AUTOFILL_AI_WITH_DATA_SCHEMA = "AutofillAiWithDataSchema"; public static final String AUTOFILL_ALLOW_NON_HTTP_ACTIVATION = "AutofillAllowNonHttpActivation"; @@ -251,6 +249,8 @@ public abstract class ChromeFeatureList { "AutofillAndroidKeyboardAccessoryDynamicPositioning"; public static final String AUTOFILL_DEEP_LINK_AUTOFILL_OPTIONS = "AutofillDeepLinkAutofillOptions"; + public static final String AUTOFILL_ENABLE_AI_BASED_AMOUNT_EXTRACTION = + "AutofillEnableAiBasedAmountExtraction"; public static final String AUTOFILL_ENABLE_BUY_NOW_PAY_LATER = "AutofillEnableBuyNowPayLater"; public static final String AUTOFILL_ENABLE_CARD_BENEFITS_FOR_AMERICAN_EXPRESS = "AutofillEnableCardBenefitsForAmericanExpress"; @@ -299,13 +299,14 @@ public abstract class ChromeFeatureList { "BackgroundThreadPoolFieldTrial"; public static final String BACK_FORWARD_CACHE = "BackForwardCache"; public static final String BLOCK_INTENTS_WHILE_LOCKED = "BlockIntentsWhileLocked"; - public static final String BOARDING_PASS_DETECTOR = "BoardingPassDetector"; public static final String BOOKMARK_PANE_ANDROID = "BookmarkPaneAndroid"; + public static final String BOTTOM_SHEET_AS_BROWSER_CONTROLS = "BottomSheetAsBrowserControls"; public static final String BROWSER_CONTROLS_DEBUGGING = "BrowserControlsDebugging"; public static final String BROWSER_CONTROLS_EARLY_RESIZE = "BrowserControlsEarlyResize"; public static final String BROWSER_CONTROLS_PERSISTS_ON_CVH = "BrowserControlsPersistsOnCvh"; public static final String BROWSER_CONTROLS_RENDER_DRIVEN_SHOW_CONSTRAINT = "BrowserControlsRenderDrivenShowConstraint"; + public static final String BROWSER_WINDOW_INTERFACE_MOBILE = "BrowserWindowInterfaceMobile"; public static final String BROWSING_DATA_MODEL = "BrowsingDataModel"; public static final String CACHE_ACTIVITY_TASKID = "CacheActivityTaskID"; public static final String CACHE_IS_MULTI_INSTANCE_API_31_ENABLED = @@ -365,6 +366,8 @@ public abstract class ChromeFeatureList { 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"; + public static final String COMPOSITOR_VIEW_HOLDER_OBSCURING = "CompositorViewHolderObscuring"; + public static final String COMPOSITOR_VIEW_REMEASURE_FIX = "CompositorViewRemeasureFix"; public static final String CONTENT_CAPTURE_SEND_METADATA_FOR_DATA_SHARE = "ContentCaptureSendMetadataForDataShare"; public static final String CONTEXTUAL_PAGE_ACTIONS = "ContextualPageActions"; @@ -385,6 +388,8 @@ public abstract class ChromeFeatureList { public static final String CONTROLS_VISIBILITY_FROM_NAVIGATIONS = "ControlsVisibilityFromNavigations"; public static final String CORMORANT = "Cormorant"; + public static final String CROSS_DEVICE_PREF_TRACKER_EXTRA_LOGS = + "CrossDevicePrefTrackerExtraLogs"; public static final String CROSS_DEVICE_TAB_PANE_ANDROID = "CrossDeviceTabPaneAndroid"; public static final String DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING = "DarkenWebsitesCheckboxInThemesSetting"; @@ -396,11 +401,10 @@ public abstract class ChromeFeatureList { "DataSharingNonProductionEnvironment"; public static final String DEFAULT_BROWSER_PROMO_ANDROID2 = "DefaultBrowserPromoAndroid2"; public static final String DEFAULT_BROWSER_PROMO_ENTRY_POINT = "DefaultBrowserPromoEntryPoint"; + public static final String DEFAULT_BROWSER_PROMO_FRE = "DefaultBrowserPromoFre"; 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"; - public static final String DEVICE_AUTHENTICATOR_ANDROIDX = "DeviceAuthenticatorAndroidx"; - public static final String DISABLE_INSTANCE_LIMIT = "DisableInstanceLimit"; public static final String DISCO_FEED_ENDPOINT = "DiscoFeedEndpoint"; public static final String DISPLAY_EDGE_TO_EDGE_FULLSCREEN = "DisplayEdgeToEdgeFullscreen"; public static final String DISPLAY_WILDCARD_CONTENT_SETTINGS = @@ -410,6 +414,7 @@ public abstract class ChromeFeatureList { public static final String DRAW_CUTOUT_EDGE_TO_EDGE = "DrawCutoutEdgeToEdge"; public static final String EDGE_TO_EDGE_BOTTOM_CHIN = "EdgeToEdgeBottomChin"; public static final String EDGE_TO_EDGE_EVERYWHERE = "EdgeToEdgeEverywhere"; + public static final String EDGE_TO_EDGE_EXTRA_LOGS = "EdgeToEdgeExtraLogs"; public static final String EDGE_TO_EDGE_MONITOR_CONFIGURATIONS = "EdgeToEdgeMonitorConfigurations"; public static final String EDGE_TO_EDGE_TABLET = "EdgeToEdgeTablet"; @@ -420,8 +425,14 @@ public abstract class ChromeFeatureList { 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_ANDROID_SIDE_PANEL_DEV_FEATURE = + "EnableAndroidSidePanelDevFeature"; + public static final String ENABLE_BROWSER_WINDOW_INTERFACE_FOR_CUSTOM_TAB_ACTIVITY = + "EnableBrowserWindowInterfaceForCustomTabActivity"; public static final String ENABLE_CLIPBOARD_DATA_CONTROLS_ANDROID = "EnableClipboardDataControlsAndroid"; + public static final String ENABLE_CONTEXT_MENU_FOR_PREVIEW_TAB = + "EnableContextMenuForPreviewTab"; public static final String ENABLE_DISCOUNT_INFO_API = "EnableDiscountInfoApi"; public static final String ENABLE_ESCAPE_HANDLING_FOR_SECONDARY_ACTIVITIES = "EnableEscapeHandlingForSecondaryActivities"; @@ -431,6 +442,8 @@ public abstract class ChromeFeatureList { public static final String ENABLE_SAVE_PACKAGE_FOR_OFF_THE_RECORD = "EnableSavePackageForOffTheRecord"; public static final String ENABLE_SWIPE_TO_SWITCH_PANE = "EnableSwipeToSwitchPane"; + public static final String ENABLE_TOOLBAR_POSITIONING_IN_RESIZE_MODE = + "EnableToolbarPositioningInResizeMode"; public static final String ENABLE_X_AXIS_ACTIVITY_TRANSITION = "EnableXAxisActivityTransition"; public static final String ESC_CANCEL_DRAG = "EscCancelDrag"; public static final String FACILITATED_PAYMENTS_ENABLE_A2A_PAYMENT = @@ -451,15 +464,15 @@ 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 FULLSCREEN_VIDEO_PICTURE_IN_PICTURE = + "FullscreenVideoPictureInPicture"; 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"; public static final String GROUP_NEW_TAB_WITH_PARENT = "GroupNewTabWithParent"; public static final String GROUP_SUGGESTION_SERVICE = "GroupSuggestionService"; public static final String HASH_PREFIX_REAL_TIME_LOOKUPS = "SafeBrowsingHashPrefixRealTimeLookups"; - public static final String HEADLESS_TAB_MODEL = "HeadlessTabModel"; public static final String HISTORY_JOURNEYS = "Journeys"; public static final String HISTORY_PANE_ANDROID = "HistoryPaneAndroid"; public static final String HOME_MODULE_PREF_REFACTOR = "HomeModulePrefRefactor"; @@ -495,24 +508,27 @@ 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_SHARED_PREFS_MIGRATION = + "MultiInstanceSharedPrefsMigration"; 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"; public static final String NEW_TAB_PAGE_CUSTOMIZATION_FOR_MVT = "NewTabPageCustomizationForMvt"; - public static final String NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON = - "NewTabPageCustomizationToolbarButton"; + public static final String NEW_TAB_PAGE_CUSTOMIZATION_THEME_SYNC = + "NewTabPageCustomizationThemeSync"; public static final String NEW_TAB_PAGE_CUSTOMIZATION_V2 = "NewTabPageCustomizationV2"; - public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = - "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 NTP_MVC_REFACTOR = "NtpMvcRefactor"; + public static final String NTP_SIMPLIFICATION = "NtpSimplification"; public static final String OMAHA_MIN_SDK_VERSION_ANDROID = "OmahaMinSdkVersionAndroid"; public static final String OMNIBOX_AUTOFOCUS_ON_INCOGNITO_NTP = "OmniboxAutofocusOnIncognitoNtp"; public static final String OMNIBOX_CACHE_SUGGESTION_RESOURCES = "OmniboxCacheSuggestionResources"; + public static final String ON_DEMAND_BACKGROUND_TAB_CONTEXT_CAPTURE = + "OnDemandBackgroundTabContextCapture"; public static final String PAGE_CONTENT_PROVIDER = "PageContentProvider"; public static final String PAGE_INFO_ABOUT_THIS_SITE_MORE_LANGS = "PageInfoAboutThisSiteMoreLangs"; @@ -523,8 +539,6 @@ public abstract class ChromeFeatureList { public static final String PCCT_MINIMUM_HEIGHT = "PCCTMinimumHeight"; public static final String PERMISSION_DEDICATED_CPSS_SETTING_ANDROID = "PermissionDedicatedCpssSettingAndroid"; - 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"; @@ -542,10 +556,8 @@ public abstract class ChromeFeatureList { "PrivacySandboxActivityTypeStorage"; public static final String PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS = "PrivacySandboxAdsApiUxEnhancements"; - public static final String PRIVACY_SANDBOX_ADS_NOTICE_CCT = "PrivacySandboxAdsNoticeCCT"; public static final String PRIVACY_SANDBOX_AD_TOPICS_CONTENT_PARITY = "PrivacySandboxAdTopicsContentParity"; - 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"; public static final String PROTECT_RECENTLY_VISIBLE_TAB = "ProtectRecentlyVisibleTab"; @@ -555,12 +567,7 @@ public abstract class ChromeFeatureList { public static final String PWA_RESTORE_UI_AT_STARTUP = "PwaRestoreUiAtStartup"; public static final String PWA_UPDATE_DIALOG_FOR_ICON = "PwaUpdateDialogForIcon"; public static final String QUIET_NOTIFICATION_PROMPTS = "QuietNotificationPrompts"; - public static final String READALOUD = "ReadAloud"; public static final String READALOUD_AUDIO_OVERVIEWS = "ReadAloudAudioOverviews"; - public static final String READALOUD_AUDIO_OVERVIEWS_FEEDBACK = - "ReadAloudAudioOverviewsFeedback"; - public static final String READALOUD_AUDIO_OVERVIEWS_SKIP_DISCLAIMER_WHEN_POSSIBLE = - "ReadAloudAudioOverviewsSkipDisclaimerWhenPossible"; public static final String READALOUD_IPH_MENU_BUTTON_HIGHLIGHT_CCT = "ReadAloudIPHMenuButtonHighlightCCT"; public static final String READALOUD_PLAYBACK = "ReadAloudPlayback"; @@ -611,6 +618,8 @@ public abstract class ChromeFeatureList { "SegmentationPlatformAndroidHomeModuleRankerV2"; public static final String SEGMENTATION_PLATFORM_EPHEMERAL_CARD_RANKER = "SegmentationPlatformEphemeralCardRanker"; + public static final String SEND_TAB_TO_SELF_PROPAGATE_SCROLL_POSITION = + "SendTabToSelfPropagateScrollPosition"; public static final String SENSITIVE_CONTENT = "SensitiveContent"; public static final String SENSITIVE_CONTENT_WHILE_SWITCHING_TABS = "SensitiveContentWhileSwitchingTabs"; @@ -622,10 +631,11 @@ public abstract class ChromeFeatureList { public static final String SHOW_CLOSE_ALL_INCOGNITO_TABS_BUTTON = "ShowCloseAllIncognitoTabsButton"; public static final String SHOW_DOWNLOAD_SCANNING_STATE = "ShowDownloadScanningState"; - public static final String SHOW_NEW_TAB_ANIMATIONS = "ShowNewTabAnimations"; public static final String SHOW_TAB_LIST_ANIMATIONS = "ShowTabListAnimations"; public static final String SHOW_WARNINGS_FOR_SUSPICIOUS_NOTIFICATIONS = "ShowWarningsForSuspiciousNotifications"; + public static final String SITE_ISOLATION_ENABLE_MEMORY_THRESHOLD_ANDROID = + "SiteIsolationEnableMemoryThresholdAndroid"; public static final String SMALLER_TAB_STRIP_TITLE_LIMIT = "SmallerTabStripTitleLimit"; public static final String SMART_SUGGESTION_FOR_LARGE_DOWNLOADS = "SmartSuggestionForLargeDownloads"; @@ -646,7 +656,6 @@ public abstract class ChromeFeatureList { "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"; public static final String TAB_MODEL_INIT_FIXES = "TabModelInitFixes"; public static final String TAB_STORAGE_SQLITE_PROTOTYPE = "TabStorageSqlitePrototype"; public static final String TAB_STRIP_AUTO_SELECT_ON_CLOSE_CHANGE = @@ -704,6 +713,8 @@ public abstract class ChromeFeatureList { public static final String WEB_OTP_CROSS_DEVICE_SIMPLE_STRING = "WebOtpCrossDeviceSimpleString"; public static final String XPLAT_SYNCED_SETUP = "XplatSyncedSetup"; public static final String XSURFACE_METRICS_REPORTING = "XsurfaceMetricsReporting"; + public static final String YOUR_SAVED_INFO_SETTINGS_PAGE_ANDROID = + "YourSavedInfoSettingsPageAndroid"; // keep-sorted end // LINT.ThenChange(//chrome/browser/flags/android/chrome_feature_list.cc:FeaturesExposedToJava) @@ -713,6 +724,7 @@ public abstract class ChromeFeatureList { newCachedFlag(ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS, /* defaultValue= */ true); public static final CachedFlag sAndroidAnimatedProgressBarInBrowser = newCachedFlag(ANDROID_ANIMATED_PROGRESS_BAR_IN_BROWSER, true); + public static final CachedFlag sAndroidApb144Patch1 = newCachedFlag(APB144_PATCH1, true); public static final CachedFlag sAndroidAppIntegrationModule = newCachedFlag(ANDROID_APP_INTEGRATION_MODULE, true); public static final CachedFlag sAndroidAppIntegrationMultiDataSource = @@ -730,8 +742,6 @@ public abstract class ChromeFeatureList { newCachedFlag(ANDROID_DESKTOP_DENSITY, true); public static final CachedFlag sAndroidElegantTextHeight = newCachedFlag(ANDROID_ELEGANT_TEXT_HEIGHT, true); - public static final CachedFlag sAndroidLogoViewRefactor = - newCachedFlag(ANDROID_LOGO_VIEW_REFACTOR, /* defaultValue= */ true); public static final CachedFlag sAndroidNewMediaPicker = newCachedFlag(ANDROID_NEW_MEDIA_PICKER, false); public static final CachedFlag sAndroidOpenIncognitoAsWindow = @@ -748,9 +758,7 @@ public abstract class ChromeFeatureList { /* defaultValueInTests= */ true); public static final CachedFlag sAndroidSetupList = newCachedFlag( - ANDROID_SETUP_LIST, - /* defaultValue= */ false, - /* defaultValueInTests= */ false); + ANDROID_SETUP_LIST, /* defaultValue= */ false, /* defaultValueInTests= */ true); public static final CachedFlag sAndroidSurfaceColorUpdate = newCachedFlag( ANDROID_SURFACE_COLOR_UPDATE, @@ -764,11 +772,9 @@ public abstract class ChromeFeatureList { public static final CachedFlag sAndroidThemeResourceProvider = newCachedFlag(ANDROID_THEME_RESOURCE_PROVIDER, false, /* defaultValueInTests= */ false); public static final CachedFlag sAndroidTwaOriginDisplay = - newCachedFlag(ANDROID_TWA_ORIGIN_DISPLAY, false); + newCachedFlag(ANDROID_TWA_ORIGIN_DISPLAY, true); public static final CachedFlag sAndroidUseAdminsForEnterpriseInfo = newCachedFlag(ANDROID_USE_ADMINS_FOR_ENTERPRISE_INFO, true); - public static final CachedFlag sAndroidWebAppLaunchHandler = - newCachedFlag(ANDROID_WEB_APP_LAUNCH_HANDLER, false, true); public static final CachedFlag sAndroidWindowControlsOverlay = newCachedFlag(ANDROID_WINDOW_CONTROLS_OVERLAY, true); public static final CachedFlag sAndroidWindowManagementWebApi = @@ -804,6 +810,8 @@ public abstract class ChromeFeatureList { newCachedFlag(BLOCK_INTENTS_WHILE_LOCKED, false); public static final CachedFlag sBookmarkPaneAndroid = newCachedFlag(BOOKMARK_PANE_ANDROID, false); + public static final CachedFlag sBottomSheetAsBrowserControls = + newCachedFlag(BOTTOM_SHEET_AS_BROWSER_CONTROLS, true); public static final CachedFlag sBrowserControlsDebugging = newCachedFlag(BROWSER_CONTROLS_DEBUGGING, false); public static final CachedFlag sCacheIsMultiInstanceApi31Enabled = @@ -855,8 +863,7 @@ public abstract class ChromeFeatureList { public static final CachedFlag sCctResizableForThirdParties = newCachedFlag(CCT_RESIZABLE_FOR_THIRD_PARTIES, true); public static final CachedFlag sCctTabModalDialog = newCachedFlag(CCT_TAB_MODAL_DIALOG, true); - public static final CachedFlag sCctToolbarRefactor = - newCachedFlag(CCT_TOOLBAR_REFACTOR, false, true); + public static final CachedFlag sCctToolbarRefactor = newCachedFlag(CCT_TOOLBAR_REFACTOR, true); public static final CachedFlag sChromeItemPickerUi = newCachedFlag(CHROME_ITEM_PICKER_UI, /* defaultValue= */ false); public static final CachedFlag sChromeNativeUrlOverriding = @@ -869,6 +876,8 @@ 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 sCompositorViewRemeasureFix = + newCachedFlag(COMPOSITOR_VIEW_REMEASURE_FIX, true); public static final CachedFlag sCpaTabGroupingButton = newCachedFlag( CONTEXTUAL_PAGE_ACTION_TAB_GROUPING, @@ -881,6 +890,8 @@ public abstract class ChromeFeatureList { DEFAULT_BROWSER_PROMO_ENTRY_POINT, /* defaultValue= */ false, /* defaultValueInTests= */ true); + public static final CachedFlag sDefaultBrowserPromoFre = + newCachedFlag(DEFAULT_BROWSER_PROMO_FRE, false); public static final CachedFlag sDesktopAndroidLinkCapturing = newCachedFlag(DESKTOP_ANDROID_LINK_CAPTURING, false); public static final CachedFlag sDesktopUAOnConnectedDisplay = @@ -896,6 +907,8 @@ public abstract class ChromeFeatureList { newCachedFlag(EDGE_TO_EDGE_BOTTOM_CHIN, /* defaultValue= */ true); public static final CachedFlag sEdgeToEdgeEverywhere = newCachedFlag(EDGE_TO_EDGE_EVERYWHERE, /* defaultValue= */ true); + public static final CachedFlag sEdgeToEdgeExtraLogs = + newCachedFlag(EDGE_TO_EDGE_EXTRA_LOGS, /* defaultValue= */ false); public static final CachedFlag sEdgeToEdgeMonitorConfigurations = newCachedFlag(EDGE_TO_EDGE_MONITOR_CONFIGURATIONS, /* defaultValue= */ true); public static final CachedFlag sEdgeToEdgeTablet = @@ -906,6 +919,12 @@ public abstract class ChromeFeatureList { newCachedFlag(EDUCATIONAL_TIP_DEFAULT_BROWSER_PROMO_CARD, false, true); public static final CachedFlag sEnableAndroidSidePanel = newCachedFlag(ENABLE_ANDROID_SIDE_PANEL, false); + public static final CachedFlag sEnableAndroidSidePanelDevFeature = + newCachedFlag(ENABLE_ANDROID_SIDE_PANEL_DEV_FEATURE, false); + public static final CachedFlag sEnableBrowserWindowInterfaceForCustomTabActivity = + newCachedFlag( + ENABLE_BROWSER_WINDOW_INTERFACE_FOR_CUSTOM_TAB_ACTIVITY, + /* defaultValue= */ true); public static final CachedFlag sEnableExclusiveAccessManager = newCachedFlag(ENABLE_EXCLUSIVE_ACCESS_MANAGER, true); public static final CachedFlag sEnableFullscreenToAnyScreenAndroid = @@ -913,20 +932,21 @@ public abstract class ChromeFeatureList { public static final CachedFlag sEnableXAxisActivityTransition = newCachedFlag(ENABLE_X_AXIS_ACTIVITY_TRANSITION, false); public static final CachedFlag sFluidResize = - newCachedFlag(FLUID_RESIZE, /* defaultValue= */ false, /* defaultValueInTests= */ true); + newCachedFlag(FLUID_RESIZE, /* defaultValue= */ true, /* defaultValueInTests= */ true); public static final CachedFlag sForceTranslucentNotificationTrampoline = newCachedFlag(FORCE_TRANSLUCENT_NOTIFICATION_TRAMPOLINE, false); public static final CachedFlag sFullscreenInsetsApiMigration = newCachedFlag(FULLSCREEN_INSETS_API_MIGRATION, false); public static final CachedFlag sFullscreenInsetsApiMigrationOnAutomotive = newCachedFlag(FULLSCREEN_INSETS_API_MIGRATION_ON_AUTOMOTIVE, true); + public static final CachedFlag sFullscreenVideoPictureInPicture = + newCachedFlag(FULLSCREEN_VIDEO_PICTURE_IN_PICTURE, true); + public static final CachedFlag sGlic = newCachedFlag(GLIC, false); public static final CachedFlag sGridTabSwitcherSurfaceColorUpdate = newCachedFlag( GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE, /* defaultValue= */ false, /* defaultValueInTests= */ false); - public static final CachedFlag sGridTabSwitcherUpdate = - newCachedFlag(GRID_TAB_SWITCHER_UPDATE, true); public static final CachedFlag sHistoryPaneAndroid = newCachedFlag( HISTORY_PANE_ANDROID, @@ -977,6 +997,8 @@ public abstract class ChromeFeatureList { MOVE_TO_FRONT_IN_LAUNCH_INTENT_DISPATCHER, /* defaultValue= */ false, /* defaultValueInTests= */ true); + public static final CachedFlag sMultiInstanceSharedPrefsMigration = + newCachedFlag(MULTI_INSTANCE_SHARED_PREFS_MIGRATION, false); public static final CachedFlag sMvcUpdateViewWhenModelChanged = newCachedFlag( MVC_UPDATE_VIEW_WHEN_MODEL_CHANGED, @@ -984,18 +1006,23 @@ public abstract class ChromeFeatureList { /* defaultValueInTests= */ true); public static final CachedFlag sNavBarColorAnimation = newCachedFlag(NAV_BAR_COLOR_ANIMATION, /* defaultValue= */ true); - public static final CachedFlag sNewTabPageCustomization = - newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION, true); public static final CachedFlag sNewTabPageCustomizationForMvt = newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_FOR_MVT, true); - public static final CachedFlag sNewTabPageCustomizationToolbarButton = - newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON, false); + public static final CachedFlag sNewTabPageCustomizationThemeSync = + newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_THEME_SYNC, /* defaultValue= */ false); public static final CachedFlag sNewTabPageCustomizationV2 = 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); + newCachedFlag( + NOTIFICATION_TRAMPOLINE_NO_NEW_TASK, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); + public static final CachedFlag sNtpMvcRefactor = + newCachedFlag(NTP_MVC_REFACTOR, /* defaultValue= */ false); + public static final CachedFlag sNtpSimplification = + newCachedFlag(NTP_SIMPLIFICATION, /* defaultValue= */ true); 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 = @@ -1079,19 +1106,16 @@ public abstract class ChromeFeatureList { /* defaultValue= */ true, /* defaultValueInTests= */ true); public static final CachedFlag sToolbarTabletResizeRefactor = - newCachedFlag( - TOOLBAR_TABLET_RESIZE_REFACTOR, - /* defaultValue= */ false, - /* defaultValueInTests= */ true); + newCachedFlag(TOOLBAR_TABLET_RESIZE_REFACTOR, /* defaultValue= */ true); public static final CachedFlag sTopControlsRefactor = newCachedFlag( TOP_CONTROLS_REFACTOR, - /* defaultValue= */ false, + /* defaultValue= */ true, /* defaultValueInTests= */ true); public static final CachedFlag sTopControlsRefactorV2 = newCachedFlag( TOP_CONTROLS_REFACTOR_V2, - /* defaultValue= */ false, + /* defaultValue= */ true, /* defaultValueInTests= */ true); public static final CachedFlag sTouchToSearchCallout = newCachedFlag( @@ -1117,6 +1141,7 @@ public abstract class ChromeFeatureList { // keep-sorted start sAccountForSuppressedKeyboardInsets, sAndroidAnimatedProgressBarInBrowser, + sAndroidApb144Patch1, sAndroidAppIntegrationModule, sAndroidAppIntegrationMultiDataSource, sAndroidAutoMintedTwa, @@ -1126,7 +1151,6 @@ public abstract class ChromeFeatureList { sAndroidDataImporterService, sAndroidDesktopDensity, sAndroidElegantTextHeight, - sAndroidLogoViewRefactor, sAndroidNewMediaPicker, sAndroidOpenIncognitoAsWindow, sAndroidProgressBarVisualUpdate, @@ -1139,7 +1163,6 @@ public abstract class ChromeFeatureList { sAndroidThemeResourceProvider, sAndroidTwaOriginDisplay, sAndroidUseAdminsForEnterpriseInfo, - sAndroidWebAppLaunchHandler, sAndroidWindowControlsOverlay, sAndroidWindowManagementWebApi, sAndroidWindowPopupCustomTabUi, @@ -1154,6 +1177,7 @@ public abstract class ChromeFeatureList { sBackgroundThreadPoolFieldTrial, sBlockIntentsWhileLocked, sBookmarkPaneAndroid, + sBottomSheetAsBrowserControls, sBrowserControlsDebugging, sCacheIsMultiInstanceApi31Enabled, sCctAdaptiveButton, @@ -1185,20 +1209,25 @@ public abstract class ChromeFeatureList { sClankStartupLatencyInjection, sClearIntentWhenRecreated, sCommandLineOnNonRooted, + sCompositorViewRemeasureFix, sCpaTabGroupingButton, sCrossDeviceTabPaneAndroid, sDefaultBrowserPromoEntryPoint, + sDefaultBrowserPromoFre, sDesktopAndroidLinkCapturing, sDesktopUAOnConnectedDisplay, sDocumentPictureInPictureAPI, sDrawChromePagesEdgeToEdge, sEdgeToEdgeBottomChin, sEdgeToEdgeEverywhere, + sEdgeToEdgeExtraLogs, sEdgeToEdgeMonitorConfigurations, sEdgeToEdgeTablet, sEdgeToEdgeUseBackupNavbarInsets, sEducationalTipDefaultBrowserPromoCard, sEnableAndroidSidePanel, + sEnableAndroidSidePanelDevFeature, + sEnableBrowserWindowInterfaceForCustomTabActivity, sEnableExclusiveAccessManager, sEnableFullscreenToAnyScreenAndroid, sEnableXAxisActivityTransition, @@ -1206,8 +1235,9 @@ public abstract class ChromeFeatureList { sForceTranslucentNotificationTrampoline, sFullscreenInsetsApiMigration, sFullscreenInsetsApiMigrationOnAutomotive, + sFullscreenVideoPictureInPicture, + sGlic, sGridTabSwitcherSurfaceColorUpdate, - sGridTabSwitcherUpdate, sHistoryPaneAndroid, sIncognitoThemeOverlayTesting, sKeyboardEscBackNavigation, @@ -1221,14 +1251,16 @@ public abstract class ChromeFeatureList { sMostVisitedTilesCustomization, sMostVisitedTilesReselect, sMoveToFrontInLaunchIntentDispatcher, + sMultiInstanceSharedPrefsMigration, sMvcUpdateViewWhenModelChanged, sNavBarColorAnimation, - sNewTabPageCustomization, sNewTabPageCustomizationForMvt, - sNewTabPageCustomizationToolbarButton, + sNewTabPageCustomizationThemeSync, sNewTabPageCustomizationV2, sNotificationTrampoline, sNotificationTrampolineNoNewTask, + sNtpMvcRefactor, + sNtpSimplification, sPCctMinimumHeight, sPaintPreviewDemo, sPersistAcrossReboots, @@ -1290,19 +1322,17 @@ public abstract class ChromeFeatureList { public static final MutableFlagWithSafeDefault sAlwaysDrawCompositedToolbarHairline = newMutableFlagWithSafeDefault(ALWAYS_DRAW_COMPOSITED_TOOLBAR_HAIRLINE, true); public static final MutableFlagWithSafeDefault sAndroidAppearanceSettings = - newMutableFlagWithSafeDefault(ANDROID_APPEARANCE_SETTINGS, false); + newMutableFlagWithSafeDefault(ANDROID_APPEARANCE_SETTINGS, true); public static final MutableFlagWithSafeDefault sAndroidBookmarkBar = - newMutableFlagWithSafeDefault(ANDROID_BOOKMARK_BAR, false); + newMutableFlagWithSafeDefault(ANDROID_BOOKMARK_BAR, true); public static final MutableFlagWithSafeDefault sAndroidBookmarkBarFastFollow = - newMutableFlagWithSafeDefault(ANDROID_BOOKMARK_BAR_FAST_FOLLOW, false); + newMutableFlagWithSafeDefault(ANDROID_BOOKMARK_BAR_FAST_FOLLOW, true); public static final MutableFlagWithSafeDefault sAndroidContextMenuDuplicateTabs = newMutableFlagWithSafeDefault(ANDROID_CONTEXT_MENU_DUPLICATE_TABS, false); public static final MutableFlagWithSafeDefault sAndroidPinnedTabs = newMutableFlagWithSafeDefault(ANDROID_PINNED_TABS, true); public static final MutableFlagWithSafeDefault sAndroidPinnedTabsTabletTabStrip = newMutableFlagWithSafeDefault(ANDROID_PINNED_TABS_TABLET_TAB_STRIP, true); - public static final MutableFlagWithSafeDefault sAndroidTabHighlighting = - newMutableFlagWithSafeDefault(ANDROID_TAB_HIGHLIGHTING, true); public static final MutableFlagWithSafeDefault sAndroidTipsNotifications = newMutableFlagWithSafeDefault(ANDROID_TIPS_NOTIFICATIONS, false); public static final MutableFlagWithSafeDefault sAndroidTipsNotificationsV2 = @@ -1314,20 +1344,24 @@ public abstract class ChromeFeatureList { // Default to false. The logic behind the flag is not relevant when native is not initialized. public static final MutableFlagWithSafeDefault sBrowserControlsRenderDrivenShowConstraint = newMutableFlagWithSafeDefault(BROWSER_CONTROLS_RENDER_DRIVEN_SHOW_CONSTRAINT, false); + public static final MutableFlagWithSafeDefault sBrowserWindowInterfaceMobile = + newMutableFlagWithSafeDefault(BROWSER_WINDOW_INTERFACE_MOBILE, false); + public static final MutableFlagWithSafeDefault sCompositorViewHolderObscuring = + newMutableFlagWithSafeDefault(COMPOSITOR_VIEW_HOLDER_OBSCURING, true); public static final MutableFlagWithSafeDefault sControlsVisibilityFromNavigations = newMutableFlagWithSafeDefault(CONTROLS_VISIBILITY_FROM_NAVIGATIONS, true); - public static final MutableFlagWithSafeDefault sDisableInstanceLimit = - newMutableFlagWithSafeDefault(DISABLE_INSTANCE_LIMIT, false); // Defaulted to true in native, but since it is being used as a kill switch set the default // value pre-native to false as it is safer if the feature needs to be killed via Finch config. public static final MutableFlagWithSafeDefault sEmptyTabListAnimationKillSwitch = newMutableFlagWithSafeDefault(EMPTY_TAB_LIST_ANIMATION_KILL_SWITCH, false); + public static final MutableFlagWithSafeDefault sEnableContextMenuForPreviewTab = + newMutableFlagWithSafeDefault(ENABLE_CONTEXT_MENU_FOR_PREVIEW_TAB, false); public static final MutableFlagWithSafeDefault sEnableSwipeToSwitchPane = newMutableFlagWithSafeDefault(ENABLE_SWIPE_TO_SWITCH_PANE, false); + public static final MutableFlagWithSafeDefault sEnableToolbarPositioningInResizeMode = + newMutableFlagWithSafeDefault(ENABLE_TOOLBAR_POSITIONING_IN_RESIZE_MODE, true); public static final MutableFlagWithSafeDefault sEscCancelDrag = newMutableFlagWithSafeDefault(ESC_CANCEL_DRAG, 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 = @@ -1340,25 +1374,23 @@ 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 sOnDemandBackgroundTabContextCapture = + newMutableFlagWithSafeDefault(ON_DEMAND_BACKGROUND_TAB_CONTEXT_CAPTURE, false); public static final MutableFlagWithSafeDefault sRecentlyClosedTabsAndWindows = - newMutableFlagWithSafeDefault(RECENTLY_CLOSED_TABS_AND_WINDOWS, false); + newMutableFlagWithSafeDefault(RECENTLY_CLOSED_TABS_AND_WINDOWS, true); public static final MutableFlagWithSafeDefault sRecordIncognitoNtpTimeToFirstNavigationMetric = newMutableFlagWithSafeDefault( RECORD_INCOGNITO_NTP_TIME_TO_FIRST_NAVIGATION_METRIC, true); public static final MutableFlagWithSafeDefault sRecordSuppressionMetrics = newMutableFlagWithSafeDefault(RECORD_SUPPRESSION_METRICS, true); public static final MutableFlagWithSafeDefault sRobustWindowManagement = - newMutableFlagWithSafeDefault(ROBUST_WINDOW_MANAGEMENT, false); - public static final MutableFlagWithSafeDefault sShowNewTabAnimations = - newMutableFlagWithSafeDefault(SHOW_NEW_TAB_ANIMATIONS, true); + newMutableFlagWithSafeDefault(ROBUST_WINDOW_MANAGEMENT, true); public static final MutableFlagWithSafeDefault sShowTabListAnimations = newMutableFlagWithSafeDefault(SHOW_TAB_LIST_ANIMATIONS, false); public static final MutableFlagWithSafeDefault sSuppressToolbarCapturesAtGestureEnd = newMutableFlagWithSafeDefault(SUPPRESS_TOOLBAR_CAPTURES_AT_GESTURE_END, false); public static final MutableFlagWithSafeDefault sTabBottomSheet = newMutableFlagWithSafeDefault(TAB_BOTTOM_SHEET, false); - public static final MutableFlagWithSafeDefault sTabFreezingUsesDiscard = - newMutableFlagWithSafeDefault(TAB_FREEZING_USES_DISCARD, true); public static final MutableFlagWithSafeDefault sTabSwitcherGroupSuggestionsAndroid = newMutableFlagWithSafeDefault(TAB_SWITCHER_GROUP_SUGGESTIONS_ANDROID, false); public static final MutableFlagWithSafeDefault sTabSwitcherGroupSuggestionsTestModeAndroid = @@ -1416,12 +1448,6 @@ public abstract class ChromeFeatureList { public static final BooleanCachedFeatureParam sAndroidComposeplateSkipLocaleCheck = newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "skip_locale_check", false); - public static final BooleanCachedFeatureParam sAndroidComposeplateHideIncognitoButton = - newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "hide_incognito_button", false); - - public static final BooleanCachedFeatureParam sAndroidComposeplateV2Enabled = - newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "v2_enabled", true); - public static final BooleanCachedFeatureParam sAndroidBottomToolbarV2ForceBottomForFocusedOmnibox = newBooleanCachedFeatureParam( @@ -1535,6 +1561,10 @@ public abstract class ChromeFeatureList { newStringCachedFeatureParam( CCT_RESIZABLE_FOR_THIRD_PARTIES, "default_policy", "use-denylist"); + public static final StringCachedFeatureParam sDefaultBrowserPromoFreArm = + newStringCachedFeatureParam( + DEFAULT_BROWSER_PROMO_FRE, "fre_promo_arm", "rmd_direct_invocation"); + /** * A cached parameter representing the amount of latency to inject during Clank startup based on * experiment configuration. @@ -1584,6 +1614,9 @@ public abstract class ChromeFeatureList { "daily_refresh_threshold_ms", (int) TimeUtils.MILLISECONDS_PER_DAY); // 1 day in milliseconds. + public static final BooleanCachedFeatureParam sNewTabPageCustomizationV2EnableLogs = + newBooleanCachedFeatureParam(NEW_TAB_PAGE_CUSTOMIZATION_V2, "enable_logs", false); + /** * Param for the OEMs that need an exception for min versions. Its value should be a comma * separated list of integers, and its index should match {@link #sEdgeToEdgeBottomChinOemList}. @@ -1678,9 +1711,11 @@ public abstract class ChromeFeatureList { "read_aloud_audio_overviews_speed_addition_percentage", 10); - public static final IntCachedFeatureParam sReadAloudReadabilityDelayMsAfterPageLoad = - newIntCachedFeatureParam( - READALOUD, "read_aloud_readability_delay_ms_after_page_load", 500); + public static final StringCachedFeatureParam sReadAloudAudioOverviewsSupportedLanguages = + newStringCachedFeatureParam( + READALOUD_AUDIO_OVERVIEWS, + "read_aloud_audio_overviews_supported_languages", + "en"); public static final BooleanCachedFeatureParam sShouldConsiderLanguageInOverviewReadability = newBooleanCachedFeatureParam( @@ -1750,9 +1785,7 @@ public abstract class ChromeFeatureList { sAndroidBookmarkBarShowBookmarkBar, sAndroidBottomToolbarV2ForceBottomForFocusedOmnibox, sAndroidBottomToolbarV2ReverseOrderSuggestionsList, - sAndroidComposeplateHideIncognitoButton, sAndroidComposeplateSkipLocaleCheck, - sAndroidComposeplateV2Enabled, sAndroidThemeModuleForceDependencies, sAndroidThemeResourceProviderForceLight, sAndroidTipsNotificationsAlwaysShowOptInPromo, @@ -1778,6 +1811,7 @@ public abstract class ChromeFeatureList { sClampAutomotiveScalingMaxScalingPercentage, sClankStartupLatencyInjectionAmountMs, sDefaultBrowserPromoEntryPointShowAppMenu, + sDefaultBrowserPromoFreArm, sDesktopUAAllowedOnExternalDisplayForOem, sEdgeToEdgeBottomChinOemList, sEdgeToEdgeBottomChinOemMinVersions, @@ -1800,6 +1834,7 @@ public abstract class ChromeFeatureList { sNavBarColorAnimationDisableBottomChinColorAnimation, sNavBarColorAnimationDisableEdgeToEdgeLayoutColorAnimation, sNewTabPageCustomizationV2DailyRefreshThresholdMs, + sNewTabPageCustomizationV2EnableLogs, sNewTabPageCustomizationV2ShowColorPicker, sNewTabPageCustomizationV2ShowLogoAndSearchBox, sNotificationTrampolineImmediateJobDurationMs, @@ -1810,7 +1845,7 @@ public abstract class ChromeFeatureList { sPCctMinimumHeightRatio, sPriceChangeModuleSkipShoppingPersistedTabDataDelayedInit, sReadAloudAudioOverviewsSpeedAdditionPercentage, - sReadAloudReadabilityDelayMsAfterPageLoad, + sReadAloudAudioOverviewsSupportedLanguages, sSearchinCctApplyReferrerId, sShouldConsiderLanguageInOverviewReadability, sStartSurfaceReturnTimeTabletSecs, @@ -1836,11 +1871,6 @@ public abstract class ChromeFeatureList { sAndroidPinnedTabsSearchBoxSquishAnimation = sAndroidPinnedTabs.newBooleanParam("search_box_squish_animation", true); - public static final MutableIntParamWithSafeDefault sDisableInstanceLimitMemoryThresholdMb = - sDisableInstanceLimit.newIntParam("max_instance_limit_memory_threshold_mb", 6500); - public static final MutableIntParamWithSafeDefault sDisableInstanceLimitMaxCount = - sDisableInstanceLimit.newIntParam("max_instance_limit", 20); - public static final MutableBooleanParamWithSafeDefault sOmniboxAutofocusOnIncognitoNtpNotFirstTab = sOmniboxAutofocusOnIncognitoNtp.newBooleanParam("not_first_tab", false); @@ -1858,17 +1888,11 @@ public abstract class ChromeFeatureList { sOmniboxAutofocusOnIncognitoNtpNoZeroSuggest = sOmniboxAutofocusOnIncognitoNtp.newBooleanParam("disable_zero_suggest", false); - public static final MutableBooleanParamWithSafeDefault sShowNewTabAnimationsLogs = - sShowNewTabAnimations.newBooleanParam("logs", false); - - public static final MutableBooleanParamWithSafeDefault sAndroidTabHighlightingForceCtrlClick = - sAndroidTabHighlighting.newBooleanParam("force_ctrl_click", false); - 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 sTabBottomSheetResizeWebview = + sTabBottomSheet.newBooleanParam("resize_webview", false); public static final MutableBooleanParamWithSafeDefault sRobustWindowManagementBulkClose = - sRobustWindowManagement.newBooleanParam("bulk_close", false); + sRobustWindowManagement.newBooleanParam("bulk_close", true); } 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 868bfe15..ad6b592b 100755 --- a/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc +++ b/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc @@ -32,6 +32,7 @@ #include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/external_protocol/external_protocol_handler.h" #include "chrome/browser/first_run/first_run.h" +#include "chrome/browser/glic/glic_pref_names.h" #include "chrome/browser/gpu/gpu_mode_manager.h" #include "chrome/browser/lifetime/browser_shutdown.h" #include "chrome/browser/login_detection/login_detection_prefs.h" @@ -74,6 +75,7 @@ #include "chrome/browser/serial/serial_policy_allowed_ports.h" #include "chrome/browser/sharing_hub/sharing_hub_features.h" #include "chrome/browser/signin/chrome_signin_client.h" +#include "chrome/browser/signin/signin_promo_util.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" @@ -85,6 +87,7 @@ #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/tabs/tab_strip_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" @@ -216,8 +219,8 @@ #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) #include "chrome/browser/extensions/activity_log/activity_log.h" #include "chrome/browser/extensions/commands/command_service.h" +#include "chrome/browser/extensions/extension_url_overrides.h" #include "chrome/browser/extensions/extension_util.h" -#include "chrome/browser/extensions/extension_web_ui.h" #include "chrome/browser/ui/webui/extensions/extensions_ui_prefs.h" #include "extensions/browser/api/runtime/runtime_api.h" #include "extensions/browser/extension_prefs.h" @@ -237,6 +240,8 @@ #include "chrome/browser/pdf/pdf_pref_names.h" #endif // BUILDFLAG(ENABLE_PDF) +#include "chrome/browser/media/unified_autoplay_config.h" + #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h" @@ -244,6 +249,7 @@ #include "chrome/browser/android/preferences/browser_prefs_android.h" #include "chrome/browser/android/preferences/shared_preferences_migrator_android.h" #include "chrome/browser/android/usage_stats/usage_stats_bridge.h" +#include "chrome/browser/auxiliary_search/auxiliary_search_donation_service.h" #include "chrome/browser/first_run/android/first_run_prefs.h" #include "chrome/browser/lens/android/lens_prefs.h" #include "chrome/browser/media/android/cdm/media_drm_origin_id_manager.h" @@ -260,12 +266,12 @@ #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/desktop_to_mobile_promos/promos_utils.h" // nogncheck crbug.com/1125897 #include "chrome/browser/gcm/gcm_product_util.h" #include "chrome/browser/hid/hid_policy_allowed_devices.h" #include "chrome/browser/intranet_redirect_detector.h" #include "chrome/browser/media/router/discovery/access_code/access_code_cast_feature.h" #include "chrome/browser/media/router/media_router_feature.h" -#include "chrome/browser/media/unified_autoplay_config.h" #include "chrome/browser/nearby_sharing/common/nearby_share_prefs.h" #include "chrome/browser/new_tab_page/modules/file_suggestion/drive_service.h" #include "chrome/browser/new_tab_page/modules/file_suggestion/microsoft_files_page_handler.h" @@ -276,7 +282,6 @@ #include "chrome/browser/new_tab_page/modules/v2/most_relevant_tab_resumption/most_relevant_tab_resumption_page_handler.h" #include "chrome/browser/new_tab_page/modules/v2/tab_groups/tab_groups_page_handler.h" #include "chrome/browser/new_tab_page/promos/promo_service.h" -#include "chrome/browser/promos/promos_utils.h" // nogncheck crbug.com/1125897 #include "chrome/browser/screen_ai/pref_names.h" #include "chrome/browser/search_engine_choice/search_engine_choice_dialog_service.h" #include "chrome/browser/signin/signin_promo.h" @@ -286,12 +291,12 @@ #include "chrome/browser/ui/hats/hats_service_desktop.h" #include "chrome/browser/ui/read_anything/read_anything_prefs.h" #include "chrome/browser/ui/send_tab_to_self/send_tab_to_self_bubble.h" +#include "chrome/browser/ui/side_panel/side_panel_prefs.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/tabs/organization/prefs.h" #include "chrome/browser/ui/tabs/pinned_tab_codec.h" #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_pref_names.h" #include "chrome/browser/ui/tabs/tab_strip_prefs.h" -#include "chrome/browser/ui/views/side_panel/side_panel_prefs.h" #include "chrome/browser/ui/webui/certificate_manager/certificate_manager_handler.h" #include "chrome/browser/ui/webui/cr_components/theme_color_picker/theme_color_picker_handler.h" #include "chrome/browser/ui/webui/history/foreign_session_handler.h" @@ -542,10 +547,6 @@ #include "components/enterprise/data_controls/core/browser/prefs.h" #endif -#if BUILDFLAG(ENABLE_GLIC) -#include "chrome/browser/glic/glic_pref_names.h" -#endif - #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) #include "components/safe_browsing/content/common/file_type_policies_prefs.h" #endif @@ -980,6 +981,28 @@ constexpr char kGlicGuestUrlPresetProd[] = "glic.guest_url_preset_prod"; // Deprecated 02/2026. constexpr char kProfilesDeletedOld[] = "profiles.profiles_deleted"; +// Deprecated 02/2026. +inline constexpr char kExplicitBrowserSigninWithoutFeatureEnabled[] = + "signin.explicit_browser_signin"; + +// Deprecated 02/2026. +constexpr char kDiceMigrationDialogShownCount[] = + "signin.dice_migration.dialog_shown_count"; +constexpr char kDiceMigrationDialogLastShownTime[] = + "signin.dice_migration.dialog_last_shown_time"; +constexpr char kDiceMigrationBackup[] = "signin.dice_migration.backup"; +constexpr char kDiceMigrationRestoredFromBackup[] = + "signin.dice_migration.restored_from_backup"; + +// Deprecated 02/2026. +inline constexpr char kTabSearchOpened[] = "tab_search.opened"; + +// Deprecated 02/2026. +constexpr char kTabOrganizationFeature[] = "tab_organization.feature"; + +// Deprecated 03/2026. +constexpr char kTabDeclutterUsageCount[] = "tab_declutter.usage_count"; + // Register local state used only for migration (clearing or moving to a new // key). void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { @@ -1359,6 +1382,25 @@ void RegisterProfilePrefsForMigration( registry->RegisterStringPref(kGlicGuestUrlPresetAutopush, std::string()); registry->RegisterStringPref(kGlicGuestUrlPresetPreprod, std::string()); registry->RegisterStringPref(kGlicGuestUrlPresetProd, std::string()); + + // Deprecated 02/2026. + registry->RegisterBooleanPref(kExplicitBrowserSigninWithoutFeatureEnabled, + false); + + // Deprecated 02/2026. + registry->RegisterIntegerPref(kDiceMigrationDialogShownCount, 0); + registry->RegisterTimePref(kDiceMigrationDialogLastShownTime, base::Time()); + registry->RegisterDictionaryPref(kDiceMigrationBackup); + registry->RegisterBooleanPref(kDiceMigrationRestoredFromBackup, false); + + // Deprecated 02/2026. + registry->RegisterBooleanPref(kTabSearchOpened, false); + + // Deprecated 02/2026. + registry->RegisterIntegerPref(kTabOrganizationFeature, 0); + + // Deprecated 03/2026. + registry->RegisterIntegerPref(kTabDeclutterUsageCount, 0); } } // namespace @@ -1661,17 +1703,11 @@ void RegisterLocalState(PrefRegistrySimple* registry) { registry->RegisterBooleanPref(prefs::kChromeForTestingAllowed, true); #endif -#if BUILDFLAG(IS_WIN) - registry->RegisterBooleanPref(prefs::kUiAutomationProviderEnabled, false); -#endif - registry->RegisterBooleanPref(prefs::kQRCodeGeneratorEnabled, true); registry->RegisterIntegerPref(prefs::kChromeDataRegionSetting, 0); -#if BUILDFLAG(ENABLE_GLIC) glic::prefs::RegisterLocalStatePrefs(registry); -#endif registry->RegisterIntegerPref(prefs::kToastAlertLevel, 0); @@ -1722,9 +1758,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, enterprise_reporting::RegisterProfilePrefs(registry); dom_distiller::DistilledPagePrefs::RegisterProfilePrefs(registry); DownloadPrefs::RegisterProfilePrefs(registry); -#if BUILDFLAG(ENABLE_GLIC) glic::prefs::RegisterProfilePrefs(registry); -#endif permissions::PermissionHatsTriggerHelper::RegisterProfilePrefs(registry); history_clusters::prefs::RegisterProfilePrefs(registry); HostContentSettingsMap::RegisterProfilePrefs(registry); @@ -1797,6 +1831,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, registry); SessionStartupPref::RegisterProfilePrefs(registry); SharingSyncPreference::RegisterProfilePrefs(registry); +#if BUILDFLAG(ENABLE_DICE_SUPPORT) + signin::AvatarButtonPromoManager::RegisterProfilePrefs(registry); +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) SigninPrefs::RegisterProfilePrefs(registry); site_engagement::SiteEngagementService::RegisterProfilePrefs(registry); subscription_eligibility::prefs::RegisterProfilePrefs(registry); @@ -1829,7 +1866,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, extensions::CommandService::RegisterProfilePrefs(registry); extensions::util::RegisterProfilePrefs(registry); extensions_ui_prefs::RegisterProfilePrefs(registry); - ExtensionWebUI::RegisterProfilePrefs(registry); + ExtensionUrlOverrides::RegisterProfilePrefs(registry); update_client::RegisterProfilePrefs(registry); #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) @@ -1861,7 +1898,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, ChromeRLZTrackerDelegate::RegisterProfilePrefs(registry); #endif + UnifiedAutoplayConfig::RegisterProfilePrefs(registry); + #if BUILDFLAG(IS_ANDROID) + AuxiliarySearchDonationService::RegisterProfilePrefs(registry); feed::prefs::RegisterFeedSharedProfilePrefs(registry); feed::RegisterProfilePrefs(registry); cdm::MediaDrmStorageImpl::RegisterProfilePrefs(registry); @@ -1918,7 +1958,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, ThemeColorPickerHandler::RegisterProfilePrefs(registry); ThemeService::RegisterProfilePrefs(registry); toolbar::RegisterProfilePrefs(registry); - UnifiedAutoplayConfig::RegisterProfilePrefs(registry); #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(ENABLE_DEVTOOLS_FRONTEND) @@ -1940,8 +1979,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, registry->RegisterBooleanPref(prefs::kDeskAPIDeskSaveAndShareEnabled, false); registry->RegisterListPref(prefs::kDeskAPIThirdPartyAllowlist); registry->RegisterBooleanPref(prefs::kInsightsExtensionEnabled, false); - registry->RegisterBooleanPref(prefs::kEssentialSearchEnabled, false); - registry->RegisterBooleanPref(prefs::kLastEssentialSearchValue, false); + registry->RegisterBooleanPref(ash::prefs::kEssentialSearchEnabled, false); + registry->RegisterBooleanPref(ash::prefs::kLastEssentialSearchValue, false); // By default showing Sync Consent is set to true. It can changed by policy. registry->RegisterBooleanPref(prefs::kEnableSyncConsent, true); registry->RegisterListPref( @@ -2168,6 +2207,16 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, registry->RegisterBooleanPref(prefs::kAndroidTipNotificationShownLens, false); registry->RegisterBooleanPref( prefs::kAndroidTipNotificationShownBottomOmnibox, false); + registry->RegisterBooleanPref( + prefs::kAndroidTipNotificationShownPasswordAutofill, false); + registry->RegisterBooleanPref(prefs::kAndroidTipNotificationShownSignin, + false); + registry->RegisterBooleanPref( + prefs::kAndroidTipNotificationShownCreateTabGroups, false); + registry->RegisterBooleanPref(prefs::kAndroidTipNotificationShownCustomizeMVT, + false); + registry->RegisterBooleanPref(prefs::kAndroidTipNotificationShownRecentTabs, + false); #endif // BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kStaticStorageQuotaEnabled, false); @@ -2646,6 +2695,20 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, profile_prefs->ClearPref(kGlicGuestUrlPresetPreprod); profile_prefs->ClearPref(kGlicGuestUrlPresetProd); + // Added 02/2026. + profile_prefs->ClearPref(kExplicitBrowserSigninWithoutFeatureEnabled); + + // Added 02/2026. + profile_prefs->ClearPref(kTabSearchOpened); + + // Added 03/2026. + profile_prefs->ClearPref(kTabDeclutterUsageCount); + +#if !BUILDFLAG(IS_ANDROID) + // Added 02/2026. + tabs::MigrateTabSearchPref(profile_prefs); +#endif // !BUILDFLAG(IS_ANDROID) + // 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 3eef5403..6c3874b4 100755 --- a/tools/under-control/src/chrome/browser/ui/tab_helpers.cc +++ b/tools/under-control/src/chrome/browser/ui/tab_helpers.cc @@ -32,9 +32,12 @@ #include "chrome/browser/file_system_access/file_system_access_features.h" #include "chrome/browser/file_system_access/file_system_access_permission_request_manager.h" #include "chrome/browser/file_system_access/file_system_access_tab_helper.h" +#include "chrome/browser/finds/core/finds_tab_helper.h" +#include "chrome/browser/finds/finds_service_factory.h" #include "chrome/browser/history/history_tab_helper.h" #include "chrome/browser/history/top_sites_factory.h" #include "chrome/browser/history_clusters/history_clusters_tab_helper.h" +#include "chrome/browser/history_embeddings/history_embeddings_service_factory.h" #include "chrome/browser/history_embeddings/history_embeddings_tab_helper.h" #include "chrome/browser/image_fetcher/image_fetcher_service_factory.h" #include "chrome/browser/login_detection/login_detection_tab_helper.h" @@ -442,9 +445,24 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { download::NavigationMonitorFactory::GetForKey(profile->GetProfileKey())); history::WebContentsTopSitesObserver::CreateForWebContents( web_contents, TopSitesFactory::GetForProfile(profile).get()); - HistoryTabHelper::CreateForWebContents(web_contents); - HistoryClustersTabHelper::CreateForWebContents(web_contents); - HistoryEmbeddingsTabHelper::CreateForWebContents(web_contents); + { + auto* history_tab_helper = + HistoryTabHelper::GetOrCreateForWebContents(web_contents); + HistoryClustersTabHelper::CreateForWebContents(web_contents, + history_tab_helper); + if (HistoryEmbeddingsServiceFactory::GetForProfile(profile)) { + HistoryEmbeddingsTabHelper::CreateForWebContents(web_contents); + auto* history_embeddings_tab_helper = + HistoryEmbeddingsTabHelper::FromWebContents(web_contents); + if (history_tab_helper && history_embeddings_tab_helper) { + history_embeddings_tab_helper->SetHistoryTabHelperSubscription( + history_tab_helper->RegisterOnUpdatedHistoryForNavigationCallback( + base::BindRepeating( + &HistoryEmbeddingsTabHelper::OnUpdatedHistoryForNavigation, + history_embeddings_tab_helper->GetWeakPtr()))); + } + } + } HttpsOnlyModeTabHelper::CreateForWebContents(web_contents); webapps::InstallableManager::CreateForWebContents(web_contents); login_detection::LoginDetectionTabHelper::MaybeCreateForWebContents( @@ -618,6 +636,11 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { } ContextMenuHelper::CreateForWebContents(web_contents); + if (base::FeatureList::IsEnabled(chrome::android::kChromeFinds)) { + finds::FindsTabHelper::CreateForWebContents( + web_contents, finds::FindsServiceFactory::GetForProfile(profile)); + } + if (base::FeatureList::IsEnabled( page_load_metrics::features::kBeaconLeakageLogging)) { FromGWSNavigationAndKeepAliveRequestTabHelper::CreateForWebContents( 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 f01c9040..0a8d0f32 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 @@ -159,6 +159,13 @@ namespace autofillPrivate { FLIGHT_RESERVATION_ARRIVAL_AIRPORT, FLIGHT_RESERVATION_DEPARTURE_DATE, ADDRESS_HOME_ZIP_AND_CITY, + ORDER_ID, + ORDER_DATE, + ORDER_MERCHANT_NAME, + ORDER_MERCHANT_DOMAIN, + ORDER_PRODUCT_NAMES, + ORDER_ACCOUNT, + ORDER_GRAND_TOTAL, MAX_VALID_FIELD_TYPE }; 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 de49ac2a..29ebd973 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 @@ -534,16 +534,9 @@ namespace developerPrivate { }; dictionary RequestFileSourceResponse { - // The region of the code which threw the error, and should be highlighted. - DOMString highlight; - - // The region before the "highlight" portion. - // If the region which threw the error was not found, the full contents of - // the file will be in the "beforeHighlight" section. - DOMString beforeHighlight; - - // The region after the "highlight" portion. - DOMString afterHighlight; + // The source code related to the request. Only populated if the file + // was successfully read. + ErrorFileSource? source; // A title for the file in the form ': '. DOMString title; diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl index aef421d1..5e08574c 100755 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl +++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl @@ -21,15 +21,11 @@ namespace enterprise.platformKeys { // interface. The cryptographic operations, including key generation, are // hardware-backed. //

Only non-extractable keys can be generated. The supported key types - // are RSASSA-PKCS1-V1_5 and RSA-OAEP (on Chrome versions 135+) with - // modulusLength up to 2048 and ECDSA with - // namedCurve P-256. Each RSASSA-PKCS1-V1_5 and ECDSA key can - // be used for signing data at most once, unless the extension is - // allowlisted through the + // are RSASSA-PKCS1-V1_5 with modulusLength up to 2048 and + // ECDSA with namedCurve P-256. Each key can be used for + // signing data at most once, unless the extension is allowlisted by the // KeyPermissions policy, - // in which case the key can be used indefinitely. RSA-OAEP keys are - // supported since Chrome version 135 and can be used by extensions - // allowlisted through that same policy to unwrap other keys.

+ // in which case the key can be used indefinitely.

//

Keys generated on a specific Token cannot be used with // any other Tokens, nor can they be used with // window.crypto.subtle. Equally, Key objects @@ -43,15 +39,12 @@ namespace enterprise.platformKeys { // software-backed. Protection of the keys, and thus implementation of the // non-extractable property, is done in software, so the keys are less // protected than hardware-backed keys. - //

Only non-extractable keys can be generated. The supported key types - // are RSASSA-PKCS1-V1_5 and RSA-OAEP (on Chrome versions 135+) with - // modulusLength up to 2048. Each RSASSA-PKCS1-V1_5 key can be - // used for signing data at most once, unless the extension is allowlisted - // through the + //

Only non-extractable keys can be generated. The only supported key + // type is RSASSA-PKCS1-V1_5 with modulusLength up to 2048. + // Each key can be used for signing data at most once, unless the extension + // is allowlisted through the // KeyPermissions policy, - // in which case the key can be used indefinitely. RSA-OAEP keys are - // supported since Chrome version 135 and can be used by extensions - // allowlisted through that same policy to unwrap other keys.

+ // in which case the key can be used indefinitely.

//

Keys generated on a specific Token cannot be used with // any other Tokens, nor can they be used with // window.crypto.subtle. Equally, Key objects diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys_internal.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys_internal.idl index 4ac4b7bf..2eb3c5e3 100755 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys_internal.idl +++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys_internal.idl @@ -21,8 +21,7 @@ namespace enterprise.platformKeysInternal { // Provided for all algorithms. DOMString name; - // Provided in case the algorithm is RSASSA-PKCS1-v1_5 or RSA-OAEP - // (the last type is supported on Chrome versions 135+). + // Provided in case the algorithm is RSASSA-PKCS1-v1_5. long? modulusLength; ArrayBuffer? publicExponent; Hash? hash; @@ -46,7 +45,7 @@ namespace enterprise.platformKeysInternal { static void getTokens(GetTokensCallback callback); // Internal version of SubtleCrypto.generateKey, currently supporting only - // RSASSA-PKCS1-v1_5, RSA-OAEP (on Chrome versions 135+), and ECDSA. + // RSASSA-PKCS1-v1_5 and ECDSA. // |tokenId| The id of a Token returned by |getTokens|. // |algorithm| The algorithm parameters as specified by WebCrypto. // |softwareBacked| Whether the key operations should be executed in 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 a9d53bb5..dcc66841 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 @@ -196,6 +196,8 @@ #include "components/feed/content/renderer/rss_link_reader.h" #include "components/feed/feed_feature_list.h" #else +#include "chrome/common/record_replay/record_replay_features.h" +#include "chrome/renderer/record_replay/record_replay_agent.h" #include "chrome/renderer/searchbox/searchbox.h" #include "chrome/renderer/searchbox/searchbox_extension.h" #include "components/search/ntp_features.h" // nogncheck @@ -521,6 +523,10 @@ void ChromeContentRendererClient::RenderThreadStarted() { // processes can't display it or read it. (see http://crbug.com/40309067 for // more context on why chrome-search scheme registration is skipped for the // instant process). + // TODO(crbug.com/40309067): When kInstantUsesSpareRenderer is shipped, the + // kInstantProcess command-line switch and all code that depends on it will be + // removed. Remove this display-isolation policy block as part of that + // cleanup. bool should_restrict_chrome_search_scheme = !command_line->HasSwitch(switches::kInstantProcess); @@ -694,6 +700,13 @@ void ChromeContentRendererClient::RenderFrameCreated( associated_interfaces); } +#if !BUILDFLAG(IS_ANDROID) + if (base::FeatureList::IsEnabled( + record_replay::features::kRecordReplayBase)) { + new record_replay::RecordReplayAgent(render_frame, associated_interfaces); + } +#endif + if (content_capture::features::IsContentCaptureEnabled()) { new content_capture::ContentCaptureSender(render_frame, associated_interfaces); @@ -759,7 +772,8 @@ void ChromeContentRendererClient::RenderFrameCreated( } #endif - if (base::FeatureList::IsEnabled(wallet::kWalletablePassDetection) && + if (base::FeatureList::IsEnabled( + wallet::features::kWalletablePassDetection) && render_frame->IsMainFrame()) { wallet::ImageExtractor::Create(render_frame, registry); } @@ -1223,44 +1237,6 @@ ChromeContentRendererClient::GetProtocolHandlerSecurityLevel( #endif } -void ChromeContentRendererClient::WaitForProcessReady() { -#if !BUILDFLAG(IS_ANDROID) - if (!base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) { - return; - } - - bool process_was_ready = chrome_observer_->IsProcessReady(); - bool is_extension = IsStandaloneContentExtensionProcess(); - base::UmaHistogramBoolean( - is_extension ? "Renderer.ProcessReadyWaitRequired.ExtensionProcess" - : "Renderer.ProcessReadyWaitRequired.RegularProcess", - !process_was_ready); - if (process_was_ready) { - return; - } - - base::TimeTicks start_time = base::TimeTicks::Now(); - base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait; - bool ready_within_timeout = - chrome_observer_->WaitForProcessReady(base::Seconds(5)); - // Add DumpWithoutCrashing() if the process did not become ready after 5 - // seconds. After the timeout, the wait is skipped and execution continues. - // TODO(http://crbug.com/434977609): Determine whether a crash should be - // triggered after a timeout, as this may pose a security risk. - if (!ready_within_timeout) { - SCOPED_CRASH_KEY_BOOL("WaitForProcessReady", "IsExtensionProcess", - is_extension); - base::debug::DumpWithoutCrashing(); - } - - base::TimeDelta wait_duration = base::TimeTicks::Now() - start_time; - base::UmaHistogramTimes( - is_extension ? "Renderer.WaitTimeForProcessReady.ExtensionProcess" - : "Renderer.WaitTimeForProcessReady.RegularProcess", - wait_duration); -#endif // !BUILDFLAG(IS_ANDROID) -} - void ChromeContentRendererClient::WillSendRequest( WebLocalFrame* frame, ui::PageTransition transition_type, @@ -1482,6 +1458,8 @@ void ChromeContentRendererClient:: blink::WebRuntimeFeatures::EnableAIWriterAPIForWorkers(true); blink::WebRuntimeFeatures::EnableLanguageDetectionAPIForWorkers(true); blink::WebRuntimeFeatures::EnableTranslationAPIForWorkers(true); + blink::WebRuntimeFeatures::EnableLanguageModelLegacyParamsAndAttributes( + true); } } @@ -1533,12 +1511,14 @@ void ChromeContentRendererClient::WillEvaluateServiceWorkerOnWorkerThread( void ChromeContentRendererClient::DidStartServiceWorkerContextOnWorkerThread( int64_t service_worker_version_id, const GURL& service_worker_scope, - const GURL& script_url) { + const GURL& script_url, + const blink::ServiceWorkerToken& service_worker_token) { #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) extensions::ExtensionsRendererClient::Get() ->dispatcher() ->DidStartServiceWorkerContextOnWorkerThread( - service_worker_version_id, service_worker_scope, script_url); + service_worker_version_id, service_worker_scope, script_url, + service_worker_token); #endif } @@ -1546,12 +1526,14 @@ void ChromeContentRendererClient::WillDestroyServiceWorkerContextOnWorkerThread( v8::Local context, int64_t service_worker_version_id, const GURL& service_worker_scope, - const GURL& script_url) { + const GURL& script_url, + const blink::ServiceWorkerToken& service_worker_token) { #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) extensions::ExtensionsRendererClient::Get() ->dispatcher() ->WillDestroyServiceWorkerContextOnWorkerThread( - context, service_worker_version_id, service_worker_scope, script_url); + context, service_worker_version_id, service_worker_scope, script_url, + service_worker_token); #endif } @@ -1595,8 +1577,8 @@ bool ChromeContentRendererClient::IsSafeRedirectTarget( #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (target_url.SchemeIs(extensions::kExtensionScheme)) { const extensions::Extension* extension = - extensions::RendererExtensionRegistry::Get()->GetByID( - target_url.GetHost()); + extensions::RendererExtensionRegistry::Get()->GetExtensionOrAppByURL( + target_url, /*include_guid=*/true); if (!extension) { return false; } 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 8a583243..719e6b5b 100755 --- a/tools/under-control/src/components/policy/resources/templates/policies.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policies.yaml @@ -1431,6 +1431,8 @@ policies: 1430: LocalNetworkAccessPermissionsPolicyDefaultEnabled 1431: ForceForegroundPriorityForAllTabs 1432: WebRtcDiagnosticLogCollectionAllowedForOrigins + 1433: IsolatedWebAppUserInstallationEnabled + 1434: ExtensionDOMActivityLoggingEnabled atomic_groups: 1: Homepage diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/UiAutomationProviderEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/UiAutomationProviderEnabled.yaml index 5d73efe2..4fe3bf01 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/UiAutomationProviderEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Accessibility/UiAutomationProviderEnabled.yaml @@ -41,7 +41,8 @@ desc: |- Support for this policy setting will end in $1Google Chrome 146. supported_on: -- chrome.win:125- +- chrome.win:125-146 +deprecated: true features: dynamic_refresh: false per_profile: false diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForBrowsers.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForBrowsers.yaml index 545093bc..83aa1daa 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForBrowsers.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForBrowsers.yaml @@ -23,8 +23,8 @@ features: dynamic_refresh: true per_profile: false cloud_only: true -future_on: -- chrome.* +supported_on: +- chrome.*:147- owners: - janzarzycki@google.com - igorruvinov@chromium.org diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForProfiles.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForProfiles.yaml index e86565e8..faf9a94d 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForProfiles.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaasUsageReportingDomainUrlsForProfiles.yaml @@ -26,8 +26,8 @@ features: per_profile: true user_only: true cloud_only: true -future_on: -- chrome.* +supported_on: +- chrome.*:147- owners: - janzarzycki@google.com - igorruvinov@chromium.org 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 b3de60e6..d508b815 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 @@ -10,8 +10,6 @@ desc: |- Not setting the policy, or setting it to 'default', configures $2Google ChromeOS to use its default key exchange methods. - If this policy is set to a value that would configure $2Google ChromeOS to prefer a post-quantum key agreement algorithm but DevicePostQuantumKeyAgreementEnabled is Disabled, the setting of DevicePostQuantumKeyAgreementEnabled takes precedence. - Setting this policy is not required for security. The default cryptography used by $2Google ChromeOS is strong enough to withstand a brute force attack using the entire power of the Sun. Setting this policy will cause $2Google ChromeOS to be slower when making network requests from the login screen. 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 253d9cc1..243746cf 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 @@ -10,8 +10,6 @@ desc: |- Not setting the policy, or setting it to 'default', configures $1Google Chrome to use its default key exchange methods. - If this policy is set to a value that would configure $1Google Chrome to prefer a post-quantum key agreement algorithm but PostQuantumKeyAgreementEnabled is Disabled, the setting of PostQuantumKeyAgreementEnabled takes precedence. - Setting this policy is not required for security. The default cryptography used by $1Google Chrome is strong enough to withstand a brute force attack using the entire power of the Sun. Setting this policy will cause $1Google Chrome to be slower when accessing websites. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowInsecureUpdates.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowInsecureUpdates.yaml index a6331ab4..5e7571d0 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowInsecureUpdates.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowInsecureUpdates.yaml @@ -18,7 +18,7 @@ items: Web Store value: false owners: -- waffles@chromium.org +- sorin@chromium.org - rdevlin.cronin@chromium.org schema: type: boolean diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionDOMActivityLoggingEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionDOMActivityLoggingEnabled.yaml new file mode 100755 index 00000000..3d82b4fa --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionDOMActivityLoggingEnabled.yaml @@ -0,0 +1,32 @@ +owners: +- anunoy@chromium.org +- file://components/policy/OWNERS +caption: Control extension DOM activity logging +desc: |- + Control whether extension DOM activity logging is enabled for enterprise users. + + Setting the policy to Enabled turns on telemetry for extension DOM activity. This includes monitoring code injection and sensitive data access by extensions. + + If this policy is set to Enabled, $1Google Chrome will collect and transmit signals about extension interactions with web pages to the Extension Telemetry Service for security auditing. + If this policy is set to Disabled or not set, these signals are not collected or transmitted for enterprise users. + + Actual values of sensitive data (like cookies or input values) are NOT collected, only the fact that they were accessed. + +future_on: +- chrome.* +- chrome_os +- android +features: + dynamic_refresh: true + per_profile: true +default: false +example_value: true +items: +- caption: Enable extension DOM activity logging + value: true +- caption: Disable extension DOM activity logging + value: false +schema: + type: boolean +tags: [] +type: main \ No newline at end of file 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 a3cb2205..a8f4c6b0 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 @@ -1,8 +1,12 @@ caption: Extension management settings desc: |- - Setting the policy controls extension management settings for $1Google Chrome, including any controlled by existing extension-related policies. The policy supersedes any legacy policies that might be set. + Setting the policy controls extension management settings for $1Google Chrome, including any controlled by existing extension-related policies. - This policy maps an extension ID or an update URL to its specific setting only. A default configuration can be set for the special ID "*", which applies to all extensions without a custom configuration in this policy. With an update URL, configuration applies to extensions with the exact update URL stated in the extension manifest ( http://support.google.com/chrome/a?p=Configure_ExtensionSettings_policy ). If the 'override_update_url' flag is set to true, the extension is installed and updated using the "update" URL specified in the ExtensionInstallForcelist policy or in 'update_url' field in this policy. The flag 'override_update_url' is ignored if the 'update_url' is a Chrome Web Store url. + This policy maps an extension ID or an update URL to its specific setting only. A default configuration can be set for the special ID "*", which applies to all extensions without a custom configuration in this policy. + + This policy can override per-extension config from legacy policies. + + Note that any per-ID extension setting from either ExtensionInstallForcelist, ExtensionInstallAllowlist, ExtensionInstallBlocklist, or ExtensionSettings will only inherit 'installation_mode' and 'update_url' from the "*" defaults. It will not inherit any other properties. With an update URL, configuration applies to extensions with the exact update URL stated in the extension manifest ( http://support.google.com/chrome/a?p=Configure_ExtensionSettings_policy ). If the 'override_update_url' flag is set to true, the extension is installed and updated using the "update" URL specified in the ExtensionInstallForcelist policy or in 'update_url' field in this policy. The flag 'override_update_url' is ignored if the 'update_url' is a Chrome Web Store url. 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. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml index d5b9dbee..be469724 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml @@ -11,3 +11,4 @@ Extensions: - ExtensionManifestV2Availability - ExtensionUnpublishedAvailability - ExtensionExtendedBackgroundLifetimeForPortConnectionsToUrls + - ExtensionDOMActivityLoggingEnabled diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml index 4f642a8e..349025fa 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml @@ -8,6 +8,8 @@ desc: |- Leaving this policy unset or setting this policy to False will use the default behavior defined on the device. Attempting to launch a disabled Chrome App will show the user a message explaining why the app was not launched and suggesting to contact their IT department. + + The value of this policy will be honored until the deprecation of Chrome Apps in Kiosk sessions, which is expected to happen in M151. features: dynamic_refresh: true per_profile: false diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowed.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowed.yaml index 8e533859..85e85fa9 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowed.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowed.yaml @@ -29,5 +29,6 @@ supported_on: - chrome.linux:66- - chrome.mac:66- - chrome_os:66- +- android:147- tags: [] type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowlist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowlist.yaml index 82734234..9b73b7a8 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowlist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AutoplayAllowlist.yaml @@ -21,5 +21,6 @@ schema: supported_on: - chrome.*:86- - chrome_os:86- +- android:147- tags: [] type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml index 256af535..ce928269 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml @@ -2,15 +2,13 @@ caption: List of URL patterns for which Chrome D desc: |- This policy can be used to allow Chrome DevTools on specific URLs. - URL patterns are matched against the URL of the page being inspected. If a match is found, the Chrome DevTools are allowed. This applies even if the URL also matches the DeveloperToolsAvailabilityBlocklist policy, even if the DeveloperToolsAvailability policy is set to disallow (value 2). For information on the URL format, see https://support.google.com/chrome/a?p=url_blocklist_filter_format. + URL patterns are matched against the URL of every frame on the page being inspected. The resulting behavior depends on whether the DeveloperToolsAvailabilityBlocklist policy is also set. - Leaving the policy unset means this allowlist has no effect. + If this policy is set and DeveloperToolsAvailabilityBlocklist is not, every frame's URL must match a pattern on this allowlist for Chrome DevTools to be allowed. If any frame's URL does not match, DevTools will be blocked for the entire page. For information on the URL format, see https://support.google.com/chrome/a?p=url_blocklist_filter_format. - If this policy is set and DeveloperToolsAvailabilityBlocklist is not, any URL not on this list will be blocked. + If both this and the DeveloperToolsAvailabilityBlocklist policies are set, this allowlist takes precedence. If a frame's URL matches a pattern on this allowlist, it will be allowed, even if it also matches a pattern in the blocklist. If a URL matches a pattern on the blocklist (but not the allowlist), it will be blocked. If a URL matches neither, the DeveloperToolsAvailability policy will be used as a fallback. - If both this and the DeveloperToolsAvailabilityBlocklist policies are set, this allowlist takes precedence. If a URL matches a pattern on the allowlist, it will be allowed. If it matches a pattern on the blocklist (but not the allowlist), it will be blocked. If a URL matches neither, the DeveloperToolsAvailability policy will be used as a fallback. - - If neither policy is set, the availability is determined by the DeveloperToolsAvailability policy. + If this policy is not set, the availability of Chrome DevTools is determined by the DeveloperToolsAvailabilityBlocklist and DeveloperToolsAvailability policies. This policy also applies to Chrome DevTools opened for extensions and web applications. @@ -23,9 +21,9 @@ example_value: - https://server:8080/path - .exact.hostname.com - file://* -future_on: -- chrome.* -- chrome_os +supported_on: +- chrome.*:147- +- chrome_os:147- features: dynamic_refresh: true per_profile: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml index ed79ba71..0231d7c0 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml @@ -1,14 +1,14 @@ caption: List of URL patterns for which Chrome DevTools are blocked desc: |- - URL patterns are matched against the URL of the page being inspected. If a match is found, the Chrome DevTools are blocked. For information on the URL format, see https://support.google.com/chrome/a?p=url_blocklist_filter_format. + This policy can be used to block Chrome DevTools on specific URLs. For information on the URL format, see https://support.google.com/chrome/a?p=url_blocklist_filter_format. - If the DeveloperToolsAvailabilityAllowlist policy is set and this policy is not, any URL not on the allowlist will be blocked. + URL patterns are matched against the URL of every frame on the page being inspected. The resulting behavior depends on whether the DeveloperToolsAvailabilityAllowlist policy is also set. - If both this and the DeveloperToolsAvailabilityAllowlist are set, the allowlist takes precedence. If a URL matches a pattern on the allowlist, it will be allowed. If it matches a pattern on this blocklist (but not the allowlist), it will be blocked. If a URL matches neither, the DeveloperToolsAvailability policy will be used as a fallback. + If this policy is set and DeveloperToolsAvailabilityAllowlist is not, any frame's URL matching a pattern on this blocklist will block Chrome DevTools for the entire page. If a frame's URL doesn't match any pattern, the availability is determined by the DeveloperToolsAvailability policy. - If neither policy is set, the availability is determined by the DeveloperToolsAvailability policy. + If both this and the DeveloperToolsAvailabilityAllowlist policies are set, the allowlist takes precedence. If a frame's URL matches a pattern on the allowlist, it will be allowed, even if it also matches a pattern in this blocklist. If a URL matches a pattern on this blocklist (but not the allowlist), it will be blocked. If a URL matches neither, the DeveloperToolsAvailability policy will be used as a fallback. - This policy also applies to Chrome DevTools opened for extensions and web applications. + If this policy is not set, the availability of Chrome DevTools is determined by the DeveloperToolsAvailabilityAllowlist and DeveloperToolsAvailability policies. This policy is limited to 1,000 entries. @@ -21,9 +21,9 @@ example_value: - .exact.hostname.com - '*' - file://* -future_on: -- chrome.* -- chrome_os +supported_on: +- chrome.*:147- +- chrome_os:147- features: dynamic_refresh: true per_profile: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DevicePostQuantumKeyAgreementEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DevicePostQuantumKeyAgreementEnabled.yaml index 5c9a2907..a092cbe3 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DevicePostQuantumKeyAgreementEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DevicePostQuantumKeyAgreementEnabled.yaml @@ -1,5 +1,6 @@ caption: Enable post-quantum key agreement for TLS for device default: true +deprecated: true desc: |- This device-level policy configures whether $2Google ChromeOS will offer a post-quantum key agreement algorithm in TLS, using the ML-KEM NIST standard. Prior to $2Google ChromeOS 131, the algorithm was Kyber, an earlier draft iteration of the standard. This allows supporting servers to protect user traffic from being later decrypted by quantum computers. @@ -31,7 +32,7 @@ owners: schema: type: boolean supported_on: -- chrome_os:128- +- chrome_os:128-146 tags: - system-security type: main 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 index f3fbd7b7..f95198cf 100755 --- 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 @@ -19,7 +19,7 @@ desc: |- owners: - mdanowski@google.com -- file://components/policy/OWNERS +- file://components/performance_manager/OWNERS supported_on: - chrome.*:146- - chrome_os:146- 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 af218bbf..10da438a 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 @@ -22,11 +22,11 @@ example_value: - file://* - custom_scheme:* - '*' -future_on: -- chrome.* -- chrome_os -- ios -- android +supported_on: +- chrome.*:147- +- chrome_os:147- +- ios:147- +- android:147- owners: - file://components/policy/OWNERS - mwalachowski@google.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 36c0798a..658a6e21 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 @@ -20,11 +20,11 @@ example_value: - file://* - custom_scheme:* - '*' -future_on: -- chrome.* -- chrome_os -- ios -- android +supported_on: +- chrome.*:147- +- chrome_os:147- +- ios:147- +- android:147- owners: - file://components/policy/OWNERS - mwalachowski@google.com diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IsolatedWebAppUserInstallationEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IsolatedWebAppUserInstallationEnabled.yaml new file mode 100755 index 00000000..9e722f32 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IsolatedWebAppUserInstallationEnabled.yaml @@ -0,0 +1,28 @@ +caption: Controls the ability for a user to manually install Isolated Web Apps +default: true +desc: | + Controls the user's ability to manually install Isolated Web Apps (IWAs). + + If this policy is set to false, IWA user installation is blocked. + + If this policy is set to true, or if the policy is not set, IWA user installations are permitted. +example_value: true +features: + dynamic_refresh: true + per_profile: true +items: + - caption: Enable IWA user installation + value: true + - caption: Disable IWA user installation + value: false +name: IsolatedWebAppUserInstallationEnabled +owners: + - file://chrome/browser/web_applications/isolated_web_apps/OWNERS + - iwa-team@google.com + - mskarbinska@google.com +schema: + type: boolean +supported_on: + - chrome_os:146- +tags: [] +type: main 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 9555e0ff..46b6a281 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 @@ -1,5 +1,6 @@ caption: Allow Google Lens camera assisted search +deprecated: true default: true desc: Leaving the policy unset or setting it to Enabled allows users to search with their cameras using Google Lens. Setting diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml index 80e6dc86..790a03b7 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml @@ -1,5 +1,6 @@ caption: Allow Google Lens button to be shown in the search box on the New Tab page if supported. +deprecated: true default: true desc: Leaving the policy unset or setting it to Enabled allows users to view and use the Google Lens button in the diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml index 8a34fef0..130f9caf 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml @@ -1,4 +1,5 @@ caption: Settings for the Lens Overlay feature +deprecated: true desc: |- Lens Overlay lets users perform contextual Google searches either via a screenshot or by asking a question about the current page's contents. This feature requires the end user to opt-in. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml index effdfb81..88a6bcd9 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml @@ -1,5 +1,6 @@ caption: Allow Google Lens region search menu item to be shown in context menu if supported. +deprecated: true default: true desc: Leaving the policy unset or setting it to Enabled allows users to view and use the Google Lens region search menu item 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 f85d9f7d..b77935ef 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 @@ -67,8 +67,6 @@ features: cloud_only: true dynamic_refresh: true per_profile: true -future_on: -- fuchsia owners: - cbe-cep-eng@google.com - domfc@chromium.org @@ -155,6 +153,7 @@ schema: type: object type: array future_on: +- fuchsia - android supported_on: - chrome.*:84- diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PostQuantumKeyAgreementEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PostQuantumKeyAgreementEnabled.yaml index eb8b25bd..7fc4cc88 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PostQuantumKeyAgreementEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PostQuantumKeyAgreementEnabled.yaml @@ -1,5 +1,6 @@ caption: Enable post-quantum key agreement for TLS default: null +deprecated: true desc: |- This policy configures whether $1Google Chrome will offer a post-quantum key agreement algorithm in TLS, using the ML-KEM NIST standard. Prior to $1Google Chrome 131, the algorithm was Kyber, an earlier draft iteration of the standard. This allows supporting servers to protect user traffic from being later decrypted by quantum computers. @@ -32,9 +33,9 @@ owners: schema: type: boolean supported_on: -- chrome.*:116- -- chrome_os:116- -- android:116- +- chrome.*:116-146 +- chrome_os:116-146 +- android:116-146 tags: - system-security type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/URLBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/URLBlocklist.yaml index 62b8575a..f9c9863a 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/URLBlocklist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/URLBlocklist.yaml @@ -9,11 +9,15 @@ desc: |- From $1Google Chrome version 92, this policy is also supported in the headless mode. + From $1Google Chrome version 147, the wildcard * on its own does not apply to internal chrome:// URLs. To block these, you must explicitly use the chrome://* pattern. + Note: Blocking internal chrome://* and chrome-untrusted://* URLs can lead to unexpected errors or can be circumvented in some cases. Instead of blocking certain internal URLs, see if there are more specific policies available. For example: - Instead of blocking chrome://settings/certificates, use CACertificateManagementAllowed. - Instead of blocking chrome-untrusted://crosh, use SystemFeaturesDisableList. + + - Instead of blocking devtools://*, use one of the DeveloperToolsAvailability, DeveloperToolsAvailabilityAllowlist or DeveloperToolsAvailabilityBlocklist policies. example_value: - example.com - https://ssl.server.com diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/ProxyOverrideRules.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/ProxyOverrideRules.yaml index 885c16b6..504a7fa5 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/ProxyOverrideRules.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/ProxyOverrideRules.yaml @@ -1,52 +1,64 @@ caption: Proxy override rules desc: |- - Setting this policy configures rules that select what proxy the browser uses depending on the destination's URL and other conditions. This policy will take precedence over proxy settings set from the ProxySettings policy, the chrome.proxy extension API or manual user settings if any is set. + Configures rules that select which proxy the browser uses based on the destination URL and specific network conditions. - Leaving the policy unset has no effect on other proxy policies or user settings. + This policy takes precedence over the ProxySettings policy, the chrome.proxy extension API, and manual user settings. If no rules in this policy match, the browser falls back to the settings defined in ProxySettings. - When the browser needs to decide what proxy to use, entries of the ProxyOverrideRules policy are evaluated in sequence until an entry satisfies all the following points: - * At least one of the URL patterns in DestinationMatchers is matched. - * None of the URL patterns in ExcludeDestinationMatchers is matched. - * If Conditions is specified and is a non-empty list, all conditions represented by its entries are satisfied. - The value in ProxyList will be used as a proxy for such a match. If no match is found, proxy settings will fall back to what is set in the ProxySettings policy. + The browser evaluates entries in the ProxyOverrideRules list in sequence. A rule is applied only if all of the following criteria are met: - The URL patterns supported by DestinationMatchers and ExcludeDestinationMatchers are documented at https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md#proxy-config-url-patterns. + * Match: At least one URL pattern in DestinationMatchers is matched. + + * Exclude: No URL patterns in ExcludeDestinationMatchers are matched. + + * Conditions: If Conditions is specified, all listed conditions must be satisfied. If unset, this requirement is ignored. + + URL patterns for matchers are documented at https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md#proxy-config-url-patterns. + + The ProxyList field defines a failover list. The first reachable entry is used; invalid entries are ignored. You can use PAC-style strings or URL-like specifiers: + + PAC-style strings: - The ProxyList field entries correspond to string values of PAC files such as: * DIRECT + * PROXY host:port + * HTTPS host:port + * SOCKS4 host:port + * SOCKS5 host:port - Alternatively, URL-like proxy specifiers can be used directly to specify the proxy, for example: + + URL-like specifiers: + * http://host:port + * https://host:port + * socks4://host:port + * socks5://host:port - The first reachable entry in the list will be used as a proxy. Invalid entries in the list are ignored. - The Conditions field contains a list of conditions that must all be met for its override rule to be used to decide the proxy to use. If it is left unset, the entry will be used as long as at least one host in DestinationMatchers is matched. + The DnsProbe condition checks if a Host resolves to an IP address. - The DnsProbe condition checks if the provided DNS Host is able to resolve to an IP address. It must contain a host (e.g. example.com), and optionally a scheme or a port (e.g. https://example.com, example.com:123, https://example.com:123). If a secure scheme is used (e.g. https), DNS lookup may also request the HTTPS record (see RFC 9460 for more details). If the value of Result is "resolved" then the condition is considered as met. If the value is instead set to not_found, then the condition is considered met if the resolution failed. + * Supports hostnames (e.g., example.com) or URI-style strings (e.g., https://example.com:123). Using a secure scheme (https) may trigger an HTTPS record request (see RFC 9460). + + * Set to "resolved" to meet the condition upon successful resolution, or "not_found" to meet the condition if resolution fails. + + The application of this policy on managed devices is influenced by the EnableProxyOverrideRulesForAllUsers machine-level policy on the platforms where it is supported. By default, it prevents the usage of override rules configured by unaffiliated users. example_value: - DestinationMatchers: - 'https://some.app.com' - - 'https://other.app.org' - ProxyList: - - 'HTTPS proxy.app:443' - - 'DIRECT' - Conditions: - - DnsProbe: - Host: 'corp.ads' - Result: "resolved" -- DestinationMatchers: - 'https://google.com' ExcludeDestinationMatchers: - 'https://mail.google.com' ProxyList: - 'HTTPS proxy.app:443' - 'DIRECT' + Conditions: + - DnsProbe: + Host: 'corp.ads' + Result: 'resolved' features: cloud_only: true dynamic_refresh: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/policy_atomic_groups.yaml index 9af94356..a5e22bdd 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/policy_atomic_groups.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/policy_atomic_groups.yaml @@ -7,5 +7,3 @@ Proxy: - ProxyPacUrl - ProxyBypassList - ProxySettings - - ProxyOverrideRules - - EnableProxyOverrideRulesForAllUsers 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 index 1ed826e3..7848280a 100755 --- 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 @@ -25,8 +25,8 @@ schema: items: type: string type: array -future_on: -- chrome.* -- chrome_os +supported_on: +- chrome.*:147- +- chrome_os:147- tags: [] type: list 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 345951d7..bab97c12 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 @@ -174,11 +174,14 @@ #include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_contents_view_delegate.h" #include "content/public/browser/web_ui_controller.h" +#include "content/public/browser/webui_config.h" +#include "content/public/browser/webui_config_map.h" #include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/referrer_type_converters.h" #include "content/public/common/url_constants.h" +#include "content/public/common/widget_type.h" #include "ipc/constants.mojom.h" #include "media/base/media_switches.h" #include "net/base/url_util.h" @@ -2045,6 +2048,17 @@ RenderWidgetHostView* WebContentsImpl::GetTopLevelRenderWidgetHostView() { return GetRenderManager()->GetRenderWidgetHostView(); } +std::vector WebContentsImpl::GetPopupWidgets() { + std::vector result; + for (const auto& [_, host] : created_widgets_) { + RenderWidgetHostViewBase* view = host->GetView(); + if (view && view->GetWidgetType() == WidgetType::kPopup) { + result.push_back(view); + } + } + return result; +} + RenderWidgetHost* WebContentsImpl::FindWidgetAtPoint(const gfx::PointF& point) { if (GetOuterWebContents()) { return GetOuterWebContents()->FindWidgetAtPoint(point); @@ -5184,8 +5198,12 @@ bool WebContentsImpl::RequestKeyboardLock( } // KeyboardLock is only supported when called by the top-level browsing - // context and is not supported in embedded content scenarios. - if (GetOuterWebContents()) { + // context and is not supported in embedded content scenarios such as + // GuestView guests ( tags, PDF viewer). However, some embedders + // (e.g. WebUIBrowserWindow) attach top-level tabs as inner WebContents and + // opt in via AllowKeyboardLockForInnerContents(). + if (GetOuterWebContents() && + (!delegate_ || !delegate_->AllowKeyboardLockForInnerContents(this))) { render_widget_host->GotResponseToKeyboardLockRequest(false); return false; } @@ -5279,7 +5297,7 @@ FrameTree* WebContentsImpl::CreateNewWindow( int render_process_id = opener->GetProcess()->GetDeprecatedID(); SiteInstanceImpl* source_site_instance = opener->GetSiteInstance(); const auto& partition_config = - source_site_instance->GetStoragePartitionConfig(); + source_site_instance->GetSecurityPrincipal().GetStoragePartitionConfig(); { StoragePartition* partition = @@ -5302,7 +5320,8 @@ FrameTree* WebContentsImpl::CreateNewWindow( static_cast(delegate_->CreateCustomWebContents( opener, source_site_instance, is_new_browsing_instance, opener->GetLastCommittedURL(), params.frame_name, params.target_url, - partition_config, session_storage_namespace)); + params.disposition, *params.features, partition_config, + session_storage_namespace)); if (!web_contents_impl) { return nullptr; } @@ -5320,7 +5339,7 @@ FrameTree* WebContentsImpl::CreateNewWindow( : IsGuest(); // While some guest types do not have a guest SiteInstance, the ones that // don't all override WebContents creation above. - CHECK_EQ(source_site_instance->IsGuest(), is_guest); + CHECK_EQ(source_site_instance->GetSecurityPrincipal().IsGuest(), is_guest); // We usually create the new window in the same BrowsingInstance (group of // script-related windows), by passing in the current SiteInstance. However, @@ -5388,8 +5407,10 @@ FrameTree* WebContentsImpl::CreateNewWindow( // should be in the same StoragePartition. SiteInstanceImpl* new_site_instance = new_contents->GetSiteInstance(); DCHECK(!new_site_instance->IsRelatedSiteInstance(source_site_instance)); - DCHECK_EQ(new_site_instance->GetStoragePartitionConfig(), - source_site_instance->GetStoragePartitionConfig()); + DCHECK_EQ( + new_site_instance->GetSecurityPrincipal().GetStoragePartitionConfig(), + source_site_instance->GetSecurityPrincipal() + .GetStoragePartitionConfig()); } } @@ -5601,7 +5622,7 @@ int64_t WebContentsImpl::AdjustWindowRect(gfx::Rect* bounds, // `blink::kMinimumBorderlessWindowSize` instead of the default // `blink::kMinimumWindowSize`. int minimum_size = - GetDisplayMode() == blink::mojom::DisplayMode::kBorderless && + GetDisplayMode() == blink::mojom::DisplayMode::kUnframed && IsWindowManagementGranted(opener) ? blink::kMinimumBorderlessWindowSize : blink::kMinimumWindowSize; @@ -5710,6 +5731,16 @@ void WebContentsImpl::ShowCreatedWidget(int process_id, return; } + RenderWidgetHostImpl* rwh = GetPrimaryMainFrame()->GetRenderWidgetHost(); + if (base::FeatureList::IsEnabled( + blink::features::kBlockSelectPopupUnfocusedWindow) && + !rwh->is_active()) { + // If the OS window isn't focused, then don't open select element popups for + // it: https://issues.chromium.org/issues/365089001 + widget_host_view->host()->ShutdownAndDestroyWidget(true); + return; + } + // GetOutermostWebContents() returns |this| if there are no outer WebContents. auto* outer_web_contents = GetOuterWebContents(); auto* outermost_web_contents = GetOutermostWebContents(); @@ -5747,6 +5778,13 @@ void WebContentsImpl::ShowCreatedWidget(int process_id, } RenderWidgetHostImpl* render_widget_host_impl = widget_host_view->host(); + + // A background tab cannot show a popup over the active tab. + if (GetVisibility() != Visibility::VISIBLE) { + render_widget_host_impl->ShutdownAndDestroyWidget(true); + return; + } + auto permission_exclusion_area_bounds = PermissionControllerImpl::FromBrowserContext(GetBrowserContext()) ->GetExclusionAreaBoundsInScreen(outermost_web_contents); @@ -6779,9 +6817,7 @@ void WebContentsImpl::SaveFrameWithHeaders( "triggered by user request." policy_exception_justification: "Not implemented." })"); - auto params = std::make_unique( - url, rfh->GetProcess()->GetDeprecatedID(), rfh->GetRoutingID(), - traffic_annotation); + auto params = rfh->CreateDownloadUrlParameters(url, traffic_annotation); params->set_referrer(referrer.url); params->set_referrer_policy( Referrer::ReferrerPolicyForUrlRequest(referrer.policy)); @@ -6815,6 +6851,7 @@ void WebContentsImpl::SaveFrameWithHeaders( .GetLastCommittedEntry() ->GetFrameEntry(frame_tree_node); if (frame_navigation_entry) { + // Replay the original initiator, rather than using the current frame origin params->set_initiator(frame_navigation_entry->initiator_origin()); } @@ -7016,8 +7053,12 @@ bool WebContentsImpl::GotResponseToKeyboardLockRequest(bool allowed) { return false; } // KeyboardLock is only supported when called by the top-level browsing - // context and is not supported in embedded content scenarios. - if (GetOuterWebContents()) { + // context and is not supported in embedded content scenarios such as + // GuestView guests ( tags, PDF viewer). However, some embedders + // (e.g. WebUIBrowserWindow) attach top-level tabs as inner WebContents and + // opt in via AllowKeyboardLockForInnerContents(). + if (GetOuterWebContents() && + (!delegate_ || !delegate_->AllowKeyboardLockForInnerContents(this))) { keyboard_lock_widget_->GotResponseToKeyboardLockRequest(false); return false; } @@ -7697,28 +7738,57 @@ void WebContentsImpl::DidNavigateMainFramePreCommit( } #endif - // Ensure fullscreen mode is exited before committing the navigation to a - // different page. The next page will not start out assuming it is in - // fullscreen mode. if (navigation_is_within_page) { - // No page change? Then, the renderer and browser can remain in fullscreen. return; } - if (IsFullscreen()) { - ExitFullscreen(false); - } - auto* rwhvb = static_cast( frame_tree_node->current_frame_host()->GetView()); if (rwhvb) { rwhvb->OnOldViewDidNavigatePreCommit(); } - // Clean up keyboard lock state when navigating. CancelKeyboardLock(keyboard_lock_widget_); } +void WebContentsImpl::DidNavigateAnyFramePreCommit( + NavigationHandle* navigation_handle, + bool navigation_is_within_page) { + // Ensure fullscreen mode is exited before committing the navigation to a + // different page. The next page will not start out assuming it is in + // fullscreen mode. + if (navigation_is_within_page || !IsFullscreen()) { + return; + } + + bool should_exit_fullscreen = false; + if (navigation_handle->IsInPrimaryMainFrame()) { + should_exit_fullscreen = true; + } else { + // For iframe navigation, exit if the fullscreen was requested by the + // iframe or one of its descendants. + const FrameTreeNodeId navigating_id = + navigation_handle->GetFrameTreeNodeId(); + should_exit_fullscreen = + std::any_of(fullscreen_frames_.begin(), fullscreen_frames_.end(), + [navigating_id](RenderFrameHostImpl* rfh) { + for (RenderFrameHostImpl* current = rfh; current; + current = current->GetParentOrOuterDocument()) { + if (current->frame_tree_node()->frame_tree_node_id() == + navigating_id) { + return true; + } + } + return false; + }); + } + + if (should_exit_fullscreen) { + ExitFullscreen(false); + CancelKeyboardLock(keyboard_lock_widget_); + } +} + void WebContentsImpl::DidNavigateMainFramePostCommit( RenderFrameHostImpl* render_frame_host, const LoadCommittedDetails& details) { @@ -9905,8 +9975,7 @@ void WebContentsImpl::DocumentOnLoadCompleted( } void WebContentsImpl::UpdateTitle(RenderFrameHostImpl* render_frame_host, - const std::u16string& title, - base::i18n::TextDirection title_direction) { + const std::u16string& title) { OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::UpdateTitle", "render_frame_host", render_frame_host, "title", title); // Try to find the navigation entry, which might not be the current one. @@ -9935,8 +10004,6 @@ void WebContentsImpl::UpdateTitle(RenderFrameHostImpl* render_frame_host, render_frame_host->frame_tree()->controller().GetLastCommittedEntry(); } - // TODO(evan): make use of title_direction. - // http://code.google.com/p/chromium/issues/detail?id=27094 bool title_changed = UpdateTitleForEntryImpl(entry, title); if (title_changed) { if (render_frame_host == GetPrimaryMainFrame()) { @@ -10615,15 +10682,6 @@ bool WebContentsImpl::CreateRenderViewForRenderManager( ReattachOuterDelegateIfNeeded(); } - // With SetHistoryInfoOnViewCreation enabled, the history and index length are - // sent as part of the the CreateView() IPC via the CreateViewParams. - if (!base::FeatureList::IsEnabled(features::kSetHistoryInfoOnViewCreation)) { - SetHistoryIndexAndLengthForView( - render_view_host, - rvh_impl->frame_tree()->controller().GetLastCommittedEntryIndex(), - rvh_impl->frame_tree()->controller().GetEntryCount()); - } - #if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_ANDROID) // Force a ViewMsg_Resize to be sent, needed to make plugins show up on // linux. See crbug.com/83941. @@ -11539,6 +11597,14 @@ void WebContentsImpl::OnTextCopiedToClipboard( render_frame_host, copied_text); } +void WebContentsImpl::TextSelectionChanged( + RenderFrameHostImpl* render_frame_host, + std::u16string_view selected_text) { + // Notify observers. + observers_.NotifyObservers(&WebContentsObserver::OnTextSelectionChanged, + render_frame_host, selected_text); +} + void WebContentsImpl::IsClipboardPasteAllowedWrapperCallback( IsClipboardPasteAllowedCallback callback, std::optional clipboard_paste_data) { @@ -11605,6 +11671,19 @@ void WebContentsImpl::UpdateWebContentsVisibility(Visibility visibility) { OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::UpdateWebContentsVisibility", "visibility", visibility); + + // For opt-in WebUIs, the WebContents's visibility will be kept VISIBLE until + // the first visually non-empty paint has occurred. + // This is an optimization to prevent the occlusion calculation from blocking + // the first visually non-empty paint. + WebUI* web_ui = GetWebUI(); + WebUIConfig* webui_config = web_ui ? web_ui->GetWebUIConfig() : nullptr; + if (webui_config && + webui_config->ShouldKeepVisibleUntilFirstVisuallyNonEmptyPaint() && + !CompletedFirstVisuallyNonEmptyPaint()) { + visibility = Visibility::VISIBLE; + } + // Occlusion is disabled when // |switches::kDisableBackgroundingOccludedWindowsForTesting| is specified on // the command line (to avoid flakiness in browser tests). @@ -12114,9 +12193,9 @@ void WebContentsImpl::OnInputIgnored(const blink::WebInputEvent& event) { } #if BUILDFLAG(IS_ANDROID) -float WebContentsImpl::GetCurrentTouchSequenceYOffset() { +gfx::PointF WebContentsImpl::GetCurrentTouchSequenceOffset() { ui::ViewAndroid* view_android = GetNativeView(); - return view_android->event_forwarder()->GetCurrentTouchSequenceYOffset(); + return view_android->event_forwarder()->GetCurrentTouchSequenceOffset(); } #endif @@ -12278,14 +12357,9 @@ bool WebContentsImpl::CancelPrerendering(FrameTreeNode* frame_tree_node, return frame_tree_node->GetParentOrOuterDocumentOrEmbedder() ->CancelPrerendering(PrerenderCancellationReason(final_status)); } - PrerenderHost* prerender_host = - GetPrerenderHostRegistry()->FindNonReservedHostById( - frame_tree_node->frame_tree_node_id()); - if (!prerender_host) { - return false; - } return GetPrerenderHostRegistry()->CancelHost( - prerender_host->prerender_host_id(), final_status); + frame_tree_node->frame_tree().delegate()->GetPrerenderHostId(), + final_status); } ui::mojom::VirtualKeyboardMode WebContentsImpl::GetVirtualKeyboardMode() const { diff --git a/tools/under-control/src/content/child/runtime_features.cc b/tools/under-control/src/content/child/runtime_features.cc index b89d7bb5..578c7f9e 100755 --- a/tools/under-control/src/content/child/runtime_features.cc +++ b/tools/under-control/src/content/child/runtime_features.cc @@ -75,31 +75,6 @@ void SetRuntimeFeatureDefaultsForPlatform( WebRuntimeFeatures::EnableCompositedSelectionUpdate(true); #endif -#if BUILDFLAG(IS_APPLE) - const bool enable_canvas_2d_image_chromium = - command_line.HasSwitch( - blink::switches::kEnableGpuMemoryBufferCompositorResources) && - !command_line.HasSwitch(switches::kDisable2dCanvasImageChromium) && - !command_line.HasSwitch(switches::kDisableGpu) && - base::FeatureList::IsEnabled(features::kCanvas2DImageChromium); -#else - constexpr bool enable_canvas_2d_image_chromium = false; -#endif - WebRuntimeFeatures::EnableCanvas2dImageChromium( - enable_canvas_2d_image_chromium); - -#if BUILDFLAG(IS_APPLE) - const bool enable_web_gl_image_chromium = - command_line.HasSwitch( - blink::switches::kEnableGpuMemoryBufferCompositorResources) && - !command_line.HasSwitch(switches::kDisableWebGLImageChromium) && - !command_line.HasSwitch(switches::kDisableGpu); -#else - const bool enable_web_gl_image_chromium = - command_line.HasSwitch(switches::kEnableWebGLImageChromium); -#endif - WebRuntimeFeatures::EnableWebGLImageChromium(enable_web_gl_image_chromium); - #if BUILDFLAG(IS_ANDROID) if (command_line.HasSwitch(switches::kDisableMediaSessionAPI)) { WebRuntimeFeatures::EnableMediaSession(false); @@ -412,9 +387,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() { raw_ref(webnn::mojom::features:: kExperimentalWebMachineLearningNeuralNetwork), kSetOnlyIfOverridden}, -#if BUILDFLAG(IS_ANDROID) - {"WebAppLaunchQueue", raw_ref(features::kAndroidWebAppLaunchHandler)}, -#endif {"LocalNetworkAccessPermissionPolicy", raw_ref(network::features::kLocalNetworkAccessChecks)}, {"LocalNetworkAccessSplitPermissions", @@ -532,6 +504,8 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs( ui::NativeTheme::GetInstanceForWeb()->use_overlay_scrollbar()); #endif WebRuntimeFeatures::EnableFluentScrollbars(ui::IsFluentScrollbarEnabled()); + WebRuntimeFeatures::EnableDesktopAndroidScrollbars( + command_line.HasSwitch(blink::switches::kEnableDesktopAndroidScrollbars)); // TODO(rodneyding): This is a rare case for a stable feature // Need to investigate more to determine whether to refactor it. @@ -636,17 +610,6 @@ void ResolveInvalidConfigurations() { WebRuntimeFeatures::EnableFledge(false); } - // PermissionElement cannot be enabled without the support of the - // browser process. - if (!base::FeatureList::IsEnabled(blink::features::kPermissionElement)) { - LOG_IF(WARNING, - WebRuntimeFeatures::IsPermissionElementEnabledByRuntimeFlag()) - << "PermissionElement cannot be enabled in this configuration. Use --" - << switches::kEnableFeatures << "=" - << blink::features::kPermissionElement.name << " instead."; - WebRuntimeFeatures::EnablePermissionElement(false); - } - // UserMediaElement cannot be enabled without the support of the // browser process. if (!base::FeatureList::IsEnabled(blink::features::kUserMediaElement)) { 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 d6b69893..d2dccc29 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 @@ -20,6 +20,7 @@ #include "base/supports_user_data.h" #include "base/task/sequenced_task_runner.h" #include "base/task/thread_pool/thread_pool_instance.h" +#include "base/uuid.h" #include "base/values.h" #include "build/build_config.h" #include "build/buildflag.h" @@ -319,11 +320,15 @@ size_t ContentBrowserClient::GetProcessCountToIgnoreForLimit() { return 0; } -std::optional> -ContentBrowserClient::GetPermissionsPolicyForIsolatedWebApp( +bool ContentBrowserClient::SupportsBaselinePermissionsPolicyForIsolatedApp() { + return false; +} + +std::vector +ContentBrowserClient::GetBaselinePermissionsPolicyForIsolatedApp( BrowserContext* browser_context, - const url::Origin& iwa_origin) { - return std::nullopt; + const url::Origin& app_origin) { + return {}; } bool ContentBrowserClient::ShouldTryToUseExistingProcessHost( @@ -415,6 +420,10 @@ bool ContentBrowserClient::IsInitialWebUIURL(const GURL& url) { } #endif // !BUILDFLAG(IS_ANDROID) +bool ContentBrowserClient::IsTopChromeWebUIURL(const GURL& url) { + return false; +} + bool ContentBrowserClient::IsIsolatedContextAllowedForUrl( BrowserContext* browser_context, const GURL& lock_url) { @@ -1200,10 +1209,10 @@ ContentBrowserClient::WillCreateURLLoaderRequestInterceptors( return std::vector>(); } -ContentBrowserClient::URLLoaderRequestHandler -ContentBrowserClient::CreateURLLoaderHandlerForServiceWorkerNavigationPreload( - FrameTreeNodeId frame_tree_node_id, - const network::ResourceRequest& resource_request) { +ContentBrowserClient::URLLoaderRequestHandler ContentBrowserClient:: + CreateURLLoaderHandlerForServiceWorkerInitiatedNavigationRequest( + FrameTreeNodeId frame_tree_node_id, + const network::ResourceRequest& resource_request) { return ContentBrowserClient::URLLoaderRequestHandler(); } @@ -1454,6 +1463,26 @@ bool ContentBrowserClient::IsBuiltinComponent(BrowserContext* browser_context, return false; } +void ContentBrowserClient::StartRtcDiagnosticLogging( + RenderFrameHost& frame_host, + bool should_upload_on_stop, + base::flat_map metadata, + base::OnceCallback callback) { + std::move(callback).Run(base::Uuid::GenerateRandomV4().AsLowercaseString()); +} + +void ContentBrowserClient::FinishRtcDiagnosticLogging( + RenderFrameHost& frame_host, + base::OnceClosure callback) { + std::move(callback).Run(); +} + +void ContentBrowserClient::CancelRtcDiagnosticLogging( + RenderFrameHost& frame_host, + base::OnceClosure callback) { + std::move(callback).Run(); +} + bool ContentBrowserClient::ShouldBlockRendererDebugURL( const GURL& url, BrowserContext* context, @@ -1988,10 +2017,6 @@ bool ContentBrowserClient::UsePrefetchPrerenderIntegration() { return false; } -bool ContentBrowserClient::UsePreloadServingMetrics() { - return false; -} - #if !BUILDFLAG(IS_ANDROID) bool ContentBrowserClient::ShouldDisallowCredentialRequest( WebContents* web_contents) { @@ -2028,6 +2053,15 @@ bool ContentBrowserClient::ShouldAllowPrefetchRedirection( return true; } +void ContentBrowserClient::ModifyRequestHeadersForPrefetch( + const GURL& url, + std::vector& removed_headers, + net::HttpRequestHeaders& modified_headers, + net::HttpRequestHeaders& modified_cors_exempt_headers) {} + +void ContentBrowserClient::UpdateCorsExemptHeaderForPrefetch( + network::mojom::NetworkContextParams* params) {} + bool ContentBrowserClient::OriginSupportsConcreteCrossOriginIsolation( const url::Origin& origin) { return true; diff --git a/tools/under-control/src/extensions/common/api/automation.idl b/tools/under-control/src/extensions/common/api/automation.idl index 90331fcf..e061bf17 100755 --- a/tools/under-control/src/extensions/common/api/automation.idl +++ b/tools/under-control/src/extensions/common/api/automation.idl @@ -54,9 +54,11 @@ focusChanged, focusContext, grabbedChanged, + grammarMarkerChanged, haspopupChanged, hide, hierarchicalLevelChanged, + highlightMarkerChanged, hitTestResult, hover, ignoredChanged, @@ -121,6 +123,7 @@ setSizeChanged, show, sortChanged, + spellingMarkerChanged, stateChanged, subtreeCreated, textAttributeChanged, diff --git a/tools/under-control/src/extensions/common/api/bluetooth_private.idl b/tools/under-control/src/extensions/common/api/bluetooth_private.idl deleted file mode 100755 index 7c7f58c6..00000000 --- a/tools/under-control/src/extensions/common/api/bluetooth_private.idl +++ /dev/null @@ -1,199 +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. - -// Use the chrome.bluetoothPrivate API to control the Bluetooth -// adapter state and handle device pairing. -// NOTE: This IDL is dependent on bluetooth.idl. - -[implemented_in = "extensions/browser/api/bluetooth/bluetooth_private_api.h"] -namespace bluetoothPrivate { - // Events that can occur during pairing. The method used for pairing varies - // depending on the capability of the two devices. - enum PairingEventType { - // An alphanumeric PIN code is required to be entered by the user. - requestPincode, - - // Display a PIN code to the user. - displayPincode, - - // A numeric passkey is required to be entered by the user. - requestPasskey, - - // Display a zero padded 6 digit numeric passkey that the user entered on - // the remote device. This event may occur multiple times during pairing to - // update the entered passkey. - displayPasskey, - - // The number of keys inputted by the user on the remote device when - // entering a passkey. This event may be called multiple times during - // pairing to update the number of keys inputted. - keysEntered, - - // Requests that a 6 digit passkey be displayed and the user confirms that - // both devies show the same passkey. - confirmPasskey, - - // Requests authorization for a pairing under the just-works model. It is up - // to the app to ask for user confirmation. - requestAuthorization, - - // Pairing is completed. - complete - }; - - // Results for connect(). See function declaration for details. - enum ConnectResultType { - alreadyConnected, - authCanceled, - authFailed, - authRejected, - authTimeout, - failed, - inProgress, - success, - unknownError, - unsupportedDevice, - notReady, - alreadyExists, - notConnected, - doesNotExist, - invalidArgs, - nonAuthTimeout, - noMemory, - jniEnvironment, - jniThreadAttach, - wakelock, - unexpectedState, - socketError - }; - - // Valid pairing responses. - enum PairingResponse { - confirm, reject, cancel - }; - - enum TransportType { - le, bredr, dual - }; - - // A pairing event received from a Bluetooth device. - dictionary PairingEvent { - PairingEventType pairing; - bluetooth.Device device; - DOMString? pincode; - long? passkey; - long? enteredKey; - }; - - dictionary NewAdapterState { - // The human-readable name of the adapter. - DOMString? name; - - // Whether or not the adapter has power. - boolean? powered; - - // Whether the adapter is discoverable by other devices. - boolean? discoverable; - }; - - dictionary SetPairingResponseOptions { - // The remote device to send the pairing response. - bluetooth.Device device; - - // The response type. - PairingResponse response; - - // A 1-16 character alphanumeric set in response to - // requestPincode. - DOMString? pincode; - - // An integer between 0-999999 set in response to - // requestPasskey. - long? passkey; - }; - - dictionary DiscoveryFilter { - // Transport type. - TransportType? transport; - - // uuid of service or array of uuids - (DOMString or DOMString[])? uuids; - - // RSSI ranging value. Only devices with RSSI higher than this value will be - // reported. - long? rssi; - - // Pathloss ranging value. Only devices with pathloss lower than this value - // will be reported. - long? pathloss; - }; - - callback VoidCallback = void(); - callback ConnectCallback = void(ConnectResultType result); - - // These functions all report failures via chrome.runtime.lastError. - interface Functions { - // Changes the state of the Bluetooth adapter. - // |adapterState|: The new state of the adapter. - // |callback|: Called when all the state changes have been completed. - static void setAdapterState( - NewAdapterState adapterState, - optional VoidCallback callback); - - static void setPairingResponse( - SetPairingResponseOptions options, - optional VoidCallback callback); - - // Tears down all connections to the given device. - static void disconnectAll( - DOMString deviceAddress, - optional VoidCallback callback); - - // Forgets the given device. - static void forgetDevice( - DOMString deviceAddress, - optional VoidCallback callback); - - // Set or clear discovery filter. - static void setDiscoveryFilter( - DiscoveryFilter discoveryFilter, - optional VoidCallback callback); - - // Connects to the given device. This will only throw an error if the - // device address is invalid or the device is already connected. Otherwise - // this will succeed and invoke |callback| with ConnectResultType. - static void connect( - DOMString deviceAddress, - optional ConnectCallback callback); - - // Pairs the given device. - static void pair( - DOMString deviceAddress, - optional VoidCallback callback); - - // Record that a pairing attempt finished. Ignores cancellations. - static void recordPairing(bluetooth.Transport transport, - long pairingDurationMs, - optional ConnectResultType result); - - // Record that a user-initiated reconnection attempt to an already paired - // device finished. Ignores cancellations. - static void recordReconnection(optional ConnectResultType result); - - // Record that a user selected a device to connect to. - static void recordDeviceSelection(long selectionDurationMs, - boolean wasPaired, - bluetooth.Transport transport); - }; - - interface Events { - // Fired when a pairing event occurs. - // |pairingEvent|: A pairing event. - [maxListeners=1] static void onPairing(PairingEvent pairingEvent); - - // Fired when a Bluetooth device changed its address. - static void onDeviceAddressChanged(bluetooth.Device device, - DOMString oldAddress); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/content_scripts.idl b/tools/under-control/src/extensions/common/api/content_scripts.idl deleted file mode 100755 index adfd63d8..00000000 --- a/tools/under-control/src/extensions/common/api/content_scripts.idl +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Stub namespace for the "content_scripts" manifest key. -[generate_error_messages] -namespace contentScripts { - // Describes a content script to be injected into a web page. - dictionary ContentScript { - // Specifies which pages this content script will be injected into. See - // Match Patterns for more - // details on the syntax of these strings. - DOMString[] matches; - // Excludes pages that this content script would otherwise be injected into. - // See Match Patterns for more - // details on the syntax of these strings. - DOMString[]? exclude_matches; - // The list of CSS files to be injected into matching pages. These are - // injected in the order they appear in this array, before any DOM is - // constructed or displayed for the page. - DOMString[]? css; - // The list of JavaScript files to be injected into matching pages. These - // are injected in the order they appear in this array. - DOMString[]? js; - // If specified true, it will inject into all frames, even if the frame is - // not the top-most frame in the tab. Each frame is checked independently - // for URL requirements; it will not inject into child frames if the URL - // requirements are not met. Defaults to false, meaning that only the top - // frame is matched. - boolean? all_frames; - // Whether the script should inject into any frames where the URL belongs to - // a scheme that would never match a specified Match Pattern, including - // about:, data:, blob:, and filesystem: schemes. In these cases, in order - // to determine if the script should inject, the origin of the URL is - // checked. If the origin is `null` (as is the case for data: URLs), then - // the "initiator" or "creator" origin is used (i.e., the origin of the - // frame that created or navigated this frame). Note that this may not - // be the parent frame, if the frame was navigated by another frame in the - // document hierarchy. - boolean? match_origin_as_fallback; - // Whether the script should inject into an about:blank frame where the - // parent or opener frame matches one of the patterns declared in matches. - // Defaults to false. - boolean? match_about_blank; - // Applied after matches to include only those URLs that also match this - // glob. Intended to emulate the - // @include - // Greasemonkey keyword. - DOMString[]? include_globs; - // Applied after matches to exclude URLs that match this glob. Intended to - // emulate the - // @exclude - // Greasemonkey keyword. - DOMString[]? exclude_globs; - // Specifies when JavaScript files are injected into the web page. The - // preferred and default value is document_idle. - extensionTypes.RunAt? run_at; - // The JavaScript "world" to run the script in. Defaults to - // ISOLATED. Only available in Manifest V3 extensions. - extensionTypes.ExecutionWorld? world; - }; - - dictionary ManifestKeys { - ContentScript[]? content_scripts; - }; -}; diff --git a/tools/under-control/src/extensions/common/api/declarative_net_request.idl b/tools/under-control/src/extensions/common/api/declarative_net_request.idl deleted file mode 100755 index 4c08c0c1..00000000 --- a/tools/under-control/src/extensions/common/api/declarative_net_request.idl +++ /dev/null @@ -1,948 +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.declarativeNetRequest API is used to block or modify -// network requests by specifying declarative rules. This lets extensions -// modify network requests without intercepting them and viewing their content, -// thus providing more privacy. -[generate_error_messages] -namespace declarativeNetRequest { - // This describes the resource type of the network request. - enum ResourceType { - main_frame, - sub_frame, - stylesheet, - script, - image, - font, - object, - xmlhttprequest, - ping, - csp_report, - media, - websocket, - webtransport, - webbundle, - other - }; - - // This describes the HTTP request method of a network request. - enum RequestMethod { - connect, - delete, - get, - head, - options, - patch, - post, - put, - other - }; - - // This describes whether the request is first or third party to the frame in - // which it originated. A request is said to be first party if it has the same - // domain (eTLD+1) as the frame in which the request originated. - enum DomainType { - // The network request is first party to the frame in which it originated. - firstParty, - // The network request is third party to the frame in which it originated. - thirdParty - }; - - // This describes the possible operations for a "modifyHeaders" rule. - enum HeaderOperation { - // Adds a new entry for the specified header. When modifying the headers of - // a request, this operation is only supported for - // specific headers. - append, - // Sets a new value for the specified header, removing any existing headers - // with the same name. - set, - // Removes all entries for the specified header. - remove - }; - - // Describes the kind of action to take if a given RuleCondition matches. - enum RuleActionType { - // Block the network request. - block, - // Redirect the network request. - redirect, - // Allow the network request. The request won't be intercepted if there is - // an allow rule which matches it. - allow, - // Upgrade the network request url's scheme to https if the request is http - // or ftp. - upgradeScheme, - // Modify request/response headers from the network request. - modifyHeaders, - // Allow all requests within a frame hierarchy, including the frame request - // itself. - allowAllRequests - }; - - // Describes the reason why a given regular expression isn't supported. - enum UnsupportedRegexReason { - // The regular expression is syntactically incorrect, or uses features - // not available in the - // RE2 syntax. - syntaxError, - // The regular expression exceeds the memory limit. - memoryLimitExceeded - }; - - // - enum RuleConditionKeys { - urlFilter, - regexFilter, - isUrlFilterCaseSensitive, - initiatorDomains, - excludedInitiatorDomains, - requestDomains, - excludedRequestDomains, - topDomains, - excludedTopDomains, - domains, - excludedDomains, - resourceTypes, - excludedResourceTypes, - requestMethods, - excludedRequestMethods, - domainType, - tabIds, - excludedTabIds, - responseHeaders, - excludedResponseHeaders - }; - - // Describes a single static ruleset. - dictionary Ruleset { - // A non-empty string uniquely identifying the ruleset. IDs beginning with - // '_' are reserved for internal use. - DOMString id; - // The path of the JSON ruleset relative to the extension directory. - DOMString path; - // Whether the ruleset is enabled by default. - boolean enabled; - }; - - // Represents a query key-value pair. - dictionary QueryKeyValue { - DOMString key; - DOMString value; - - // If true, the query key is replaced only if it's already present. - // Otherwise, the key is also added if it's missing. Defaults to false. - boolean? replaceOnly; - }; - - // Describes modification to the url query. - dictionary QueryTransform { - // The list of query keys to be removed. - DOMString[]? removeParams; - // The list of query key-value pairs to be added or replaced. - QueryKeyValue[]? addOrReplaceParams; - }; - - // Describes modification to various url components. - dictionary URLTransform { - // The new scheme for the request. Allowed values are "http", "https", - // "ftp" and "chrome-extension". - DOMString? scheme; - - // The new host for the request. - DOMString? host; - - // The new port for the request. If empty, the existing port is cleared. - DOMString? port; - - // The new path for the request. If empty, the existing path is cleared. - DOMString? path; - - // The new query for the request. Should be either empty, in which case the - // existing query is cleared; or should begin with '?'. - DOMString? query; - - // Add, remove or replace query key-value pairs. - QueryTransform? queryTransform; - - // The new fragment for the request. Should be either empty, in which case - // the existing fragment is cleared; or should begin with '#'. - DOMString? fragment; - - // The new username for the request. - DOMString? username; - - // The new password for the request. - DOMString? password; - }; - - dictionary Redirect { - // Path relative to the extension directory. Should start with '/'. - DOMString? extensionPath; - // Url transformations to perform. - URLTransform? transform; - // The redirect url. Redirects to JavaScript urls are not allowed. - DOMString? url; - - // Substitution pattern for rules which specify a regexFilter. - // The first match of regexFilter within the url will be - // replaced with this pattern. Within regexSubstitution, - // backslash-escaped digits (\1 to \9) can be used to insert the - // corresponding capture groups. \0 refers to the entire matching text. - DOMString? regexSubstitution; - }; - - dictionary HeaderInfo { - // The name of the header. This condition matches on the name - // only if both `values` and `excludedValues` are not specified. - DOMString header; - // If specified, this condition matches if the header's value matches at - // least one pattern in this list. This supports case-insensitive header - // value matching plus the following constructs: - // - // '*' : Matches any number of characters. - // - // '?' : Matches zero or one character(s). - // - // '*' and '?' can be escaped with a backslash, e.g. '\*' and '\?' - DOMString[]? values; - // If specified, this condition is not matched if the header exists but its - // value contains at least one element in this list. This uses the same - // match pattern syntax as `values`. - DOMString[]? excludedValues; - }; - - // - dictionary RuleCondition { - - // The pattern which is matched against the network request url. - // Supported constructs: - // - // '*' : Wildcard: Matches any number of characters. - // - // '|' : Left/right anchor: If used at either end of the pattern, - // specifies the beginning/end of the url respectively. - // - // '||' : Domain name anchor: If used at the beginning of the - // pattern, specifies the start of a (sub-)domain of the URL. - // - // '^' : Separator character: This matches anything except a letter, - // a digit, or one of the following: _, - // -, ., or %. This - // also match the end of the URL. - // - // Therefore urlFilter is composed of the following parts: - // (optional Left/Domain name anchor) + pattern + (optional Right anchor). - // - // If omitted, all urls are matched. An empty string is not allowed. - // - // A pattern beginning with ||* is not allowed. Use - // * instead. - // - // Note: Only one of urlFilter or regexFilter can - // be specified. - // - // Note: The urlFilter must be composed of only ASCII - // characters. This is matched against a url where the host is encoded in - // the punycode format (in case of internationalized domains) and any other - // non-ascii characters are url encoded in utf-8. - // For example, when the request url is - // http://abc.рф?q=ф, the - // urlFilter will be matched against the url - // http://abc.xn--p1ai/?q=%D1%84. - DOMString? urlFilter; - - // Regular expression to match against the network request url. This follows - // the RE2 syntax. - // - // Note: Only one of urlFilter or regexFilter can - // be specified. - // - // Note: The regexFilter must be composed of only ASCII - // characters. This is matched against a url where the host is encoded in - // the punycode format (in case of internationalized domains) and any other - // non-ascii characters are url encoded in utf-8. - DOMString? regexFilter; - - // Whether the urlFilter or regexFilter - // (whichever is specified) is case sensitive. Default is false. - boolean? isUrlFilterCaseSensitive; - - // The rule will only match network requests originating from the list of - // initiatorDomains. If the list is omitted, the rule is - // applied to requests from all domains. An empty list is not allowed. - // - // Notes: - //

    - //
  • Sub-domains like "a.example.com" are also allowed.
  • - //
  • The entries must consist of only ascii characters.
  • - //
  • Use punycode encoding for internationalized domains.
  • - //
  • - // This matches against the request initiator and not the request url. - //
  • - //
  • Sub-domains of the listed domains are also matched.
  • - //
- DOMString[]? initiatorDomains; - - // The rule will not match network requests originating from the list of - // excludedInitiatorDomains. If the list is empty or omitted, - // no domains are excluded. This takes precedence over - // initiatorDomains. - // - // Notes: - //
    - //
  • Sub-domains like "a.example.com" are also allowed.
  • - //
  • The entries must consist of only ascii characters.
  • - //
  • Use punycode encoding for internationalized domains.
  • - //
  • - // This matches against the request initiator and not the request url. - //
  • - //
  • Sub-domains of the listed domains are also excluded.
  • - //
- DOMString[]? excludedInitiatorDomains; - - // The rule will only match network requests when the domain matches one - // from the list of requestDomains. If the list is omitted, - // the rule is applied to requests from all domains. An empty list is not - // allowed. - // - // Notes: - //
    - //
  • Sub-domains like "a.example.com" are also allowed.
  • - //
  • The entries must consist of only ascii characters.
  • - //
  • Use punycode encoding for internationalized domains.
  • - //
  • Sub-domains of the listed domains are also matched.
  • - //
- DOMString[]? requestDomains; - - // The rule will not match network requests when the domains matches one - // from the list of excludedRequestDomains. If the list is - // empty or omitted, no domains are excluded. This takes precedence over - // requestDomains. - // - // Notes: - //
    - //
  • Sub-domains like "a.example.com" are also allowed.
  • - //
  • The entries must consist of only ascii characters.
  • - //
  • Use punycode encoding for internationalized domains.
  • - //
  • Sub-domains of the listed domains are also excluded.
  • - //
- DOMString[]? excludedRequestDomains; - - // The rule will only match network requests when the associated top-level - // frame's domain matches one from the list of topDomains. If - // the list is omitted, the rule is applied to requests associated with all - // top-level frame domains. An empty list is not allowed. - // - // Notes: - //
    - //
  • Sub-domains like "a.example.com" are also allowed.
  • - //
  • The entries must consist of only ascii characters.
  • - //
  • Use punycode encoding for internationalized domains.
  • - //
  • Sub-domains of the listed domains are also matched.
  • - //
  • For requests with no associated top-level frame (e.g. ServiceWorker - // initiated requests, the request initiator's domain is considered - // instead.
  • - //
- DOMString[]? topDomains; - - // The rule will not match network requests when the associated top-level - // frame's domain matches one from the list of - // excludedTopDomains. If the list is empty or omitted, no - // domains are excluded. This takes precedence over - // topDomains. - // - // Notes: - //
    - //
  • Sub-domains like "a.example.com" are also allowed.
  • - //
  • The entries must consist of only ascii characters.
  • - //
  • Use punycode encoding for internationalized domains.
  • - //
  • Sub-domains of the listed domains are also excluded.
  • - //
  • For requests with no associated top-level frame (e.g. ServiceWorker - // initiated requests, the request initiator's domain is considered - // instead.
  • - //
- DOMString[]? excludedTopDomains; - - // The rule will only match network requests originating from the list of - // domains. - [deprecated="Use $(ref:initiatorDomains) instead"] - DOMString[]? domains; - - // The rule will not match network requests originating from the list of - // excludedDomains. - [deprecated="Use $(ref:excludedInitiatorDomains) instead"] - DOMString[]? excludedDomains; - - // List of resource types which the rule can match. An empty list is not - // allowed. - // - // Note: this must be specified for allowAllRequests rules and - // may only include the sub_frame and main_frame - // resource types. - ResourceType[]? resourceTypes; - - // List of resource types which the rule won't match. Only one of - // resourceTypes and excludedResourceTypes should - // be specified. If neither of them is specified, all resource types except - // "main_frame" are blocked. - ResourceType[]? excludedResourceTypes; - - // List of HTTP request methods which the rule can match. An empty list is - // not allowed. - // - // Note: Specifying a requestMethods rule condition will also - // exclude non-HTTP(s) requests, whereas specifying - // excludedRequestMethods will not. - RequestMethod[]? requestMethods; - - // List of request methods which the rule won't match. Only one of - // requestMethods and excludedRequestMethods - // should be specified. If neither of them is specified, all request methods - // are matched. - RequestMethod[]? excludedRequestMethods; - - // Specifies whether the network request is first-party or third-party to - // the domain from which it originated. If omitted, all requests are - // accepted. - DomainType? domainType; - - // List of $(ref:tabs.Tab.id) which the rule should match. An ID of - // $(ref:tabs.TAB_ID_NONE) matches requests which don't originate from a - // tab. An empty list is not allowed. Only supported for session-scoped - // rules. - long[]? tabIds; - - // List of $(ref:tabs.Tab.id) which the rule should not match. An ID of - // $(ref:tabs.TAB_ID_NONE) excludes requests which don't originate from a - // tab. Only supported for session-scoped rules. - long[]? excludedTabIds; - - // Rule matches if the request matches any response header condition in this - // list (if specified). - HeaderInfo[]? responseHeaders; - - // Rule does not match if the request matches any response header - // condition in this list (if specified). If both `excludedResponseHeaders` - // and `responseHeaders` are specified, then the `excludedResponseHeaders` - // property takes precedence. - HeaderInfo[]? excludedResponseHeaders; - }; - - // Options for regex filters and substitutions for headers. - [nodoc] dictionary HeaderRegexOptions { - // Whether the regex should match all groups for the value. This is only - // relevant if a regex substitution is present and would thus need to be - // applied onto all matching groups. Equivalent to the "g" flag. - // Defaults to false. - boolean? matchAll; - }; - - dictionary ModifyHeaderInfo { - // The name of the header to be modified. - DOMString header; - - // The operation to be performed on a header. - // - HeaderOperation operation; - - // The new value for the header. Must be specified for append - // and set operations. - // - DOMString? value; - - // A regular expression to match against the header value. This follows the - // RE2 syntax for consistency with the rest of the API. - [nodoc] DOMString? regexFilter; - - // Substitution pattern for the response header. `regexFilter` must be - // specified for this to be valid. Takes precedence over `value` and - // `operation` if specified and valid. - [nodoc] DOMString? regexSubstitution; - - // Options for the regex filter. If not specified, all options will be - // default. - [nodoc] HeaderRegexOptions? regexOptions; - }; - - dictionary RuleAction { - // The type of action to perform. - RuleActionType type; - - // Describes how the redirect should be performed. Only valid for redirect - // rules. - Redirect? redirect; - - // The request headers to modify for the request. Only valid if - // RuleActionType is "modifyHeaders". - ModifyHeaderInfo[]? requestHeaders; - - // The response headers to modify for the request. Only valid if - // RuleActionType is "modifyHeaders". - ModifyHeaderInfo[]? responseHeaders; - }; - - dictionary Rule { - // An id which uniquely identifies a rule. Mandatory and should be >= 1. - long id; - - // Rule priority. Defaults to 1. When specified, should be >= 1. - long? priority; - - // The condition under which this rule is triggered. - RuleCondition condition; - - // The action to take if this rule is matched. - RuleAction action; - }; - - // Uniquely describes a declarative rule specified by the extension. - dictionary MatchedRule { - // A matching rule's ID. - long ruleId; - - // ID of the $(ref:Ruleset) this rule belongs to. For a rule originating - // from the set of dynamic rules, this will be equal to - // $(ref:DYNAMIC_RULESET_ID). - DOMString rulesetId; - }; - - dictionary GetRulesFilter { - // If specified, only rules with matching IDs are included. - long[]? ruleIds; - }; - - dictionary MatchedRuleInfo { - MatchedRule rule; - - // The time the rule was matched. Timestamps will correspond to the - // Javascript convention for times, i.e. number of milliseconds since the - // epoch. - double timeStamp; - - // The tabId of the tab from which the request originated if the tab is - // still active. Else -1. - long tabId; - }; - - dictionary MatchedRulesFilter { - // If specified, only matches rules for the given tab. Matches rules not - // associated with any active tab if set to -1. - long? tabId; - - // If specified, only matches rules after the given timestamp. - double? minTimeStamp; - }; - - dictionary RulesMatchedDetails { - // Rules matching the given filter. - MatchedRuleInfo[] rulesMatchedInfo; - }; - - dictionary RequestDetails { - // The ID of the request. Request IDs are unique within a browser session. - DOMString requestId; - - // The URL of the request. - DOMString url; - - // The origin where the request was initiated. This does not change through - // redirects. If this is an opaque origin, the string 'null' will be used. - DOMString? initiator; - - // Standard HTTP method. - DOMString method; - - // The value 0 indicates that the request happens in the main frame; a - // positive value indicates the ID of a subframe in which the request - // happens. If the document of a (sub-)frame is loaded (type is - // main_frame or sub_frame), frameId - // indicates the ID of this frame, not the ID of the outer frame. Frame IDs - // are unique within a tab. - long frameId; - - // The unique identifier for the frame's document, if this request is for a - // frame. - DOMString? documentId; - - // The type of the frame, if this request is for a frame. - extensionTypes.FrameType? frameType; - - // The lifecycle of the frame's document, if this request is for a - // frame. - extensionTypes.DocumentLifecycle? documentLifecycle; - - // ID of frame that wraps the frame which sent the request. Set to -1 if no - // parent frame exists. - long parentFrameId; - - // The unique identifier for the frame's parent document, if this request - // is for a frame and has a parent. - DOMString? parentDocumentId; - - // The ID of the tab in which the request takes place. Set to -1 if the - // request isn't related to a tab. - long tabId; - - // The resource type of the request. - ResourceType type; - }; - - dictionary TestMatchRequestDetails { - // The URL of the hypothetical request. - DOMString url; - - // The initiator URL (if any) for the hypothetical request. - DOMString? initiator; - - // Standard HTTP method of the hypothetical request. Defaults to "get" for - // HTTP requests and is ignored for non-HTTP requests. - RequestMethod? method; - - // The resource type of the hypothetical request. - ResourceType type; - - // The ID of the tab in which the hypothetical request takes place. Does - // not need to correspond to a real tab ID. Default is -1, meaning that - // the request isn't related to a tab. - long? tabId; - - // The associated top-level frame URL (if any) for the request. - DOMString? topUrl; - - // The headers provided by a hypothetical response if the request does not - // get blocked or redirected before it is sent. Represented as an object - // which maps a header name to a list of string values. If not specified, - // the hypothetical response would return empty response headers, which can - // match rules which match on the non-existence of headers. - // E.g. {"content-type": ["text/html; charset=utf-8", - // "multipart/form-data"]} - object? responseHeaders; - }; - - dictionary MatchedRuleInfoDebug { - MatchedRule rule; - - // Details about the request for which the rule was matched. - RequestDetails request; - }; - - [nodoc] dictionary DNRInfo { - Ruleset[] rule_resources; - }; - - [nodoc] dictionary ManifestKeys { - DNRInfo? declarative_net_request; - }; - - dictionary RegexOptions { - // The regular expresson to check. - DOMString regex; - - // Whether the regex specified is case sensitive. Default is - // true. - boolean? isCaseSensitive; - - // Whether the regex specified requires capturing. Capturing is - // only required for redirect rules which specify a - // regexSubstition action. The default is false. - boolean? requireCapturing; - }; - - dictionary IsRegexSupportedResult { - boolean isSupported; - - // Specifies the reason why the regular expression is not supported. Only - // provided if isSupported is false. - UnsupportedRegexReason? reason; - }; - - dictionary TestMatchOutcomeResult { - // The rules (if any) that match the hypothetical request. - MatchedRule[] matchedRules; - }; - - dictionary UpdateRuleOptions { - // IDs of the rules to remove. Any invalid IDs will be ignored. - long[]? removeRuleIds; - // Rules to add. - Rule[]? addRules; - }; - - dictionary UpdateRulesetOptions { - // The set of ids corresponding to a static $(ref:Ruleset) that should be - // disabled. - DOMString[]? disableRulesetIds; - // The set of ids corresponding to a static $(ref:Ruleset) that should be - // enabled. - DOMString[]? enableRulesetIds; - }; - - dictionary UpdateStaticRulesOptions { - // The id corresponding to a static $(ref:Ruleset). - DOMString rulesetId; - // Set of ids corresponding to rules in the $(ref:Ruleset) to disable. - long[]? disableRuleIds; - // Set of ids corresponding to rules in the $(ref:Ruleset) to enable. - long[]? enableRuleIds; - }; - - dictionary GetDisabledRuleIdsOptions { - // The id corresponding to a static $(ref:Ruleset). - DOMString rulesetId; - }; - - dictionary TabActionCountUpdate { - // The tab for which to update the action count. - long tabId; - // The amount to increment the tab's action count by. Negative values will - // decrement the count. - long increment; - }; - - dictionary ExtensionActionOptions { - // Whether to automatically display the action count for a page as the - // extension's badge text. This preference is persisted across sessions. - boolean? displayActionCountAsBadgeText; - // Details of how the tab's action count should be adjusted. - TabActionCountUpdate? tabUpdate; - }; - - callback EmptyCallback = void(); - callback GetAllowedPagesCallback = void(DOMString[] result); - callback GetRulesCallback = void(Rule[] rules); - callback GetMatchedRulesCallback = void(RulesMatchedDetails details); - callback GetEnabledRulesetsCallback = void(DOMString[] rulesetIds); - callback GetDisabledRuleIdsCallback = void(long[] disabledRuleIds); - callback IsRegexSupportedCallback = void(IsRegexSupportedResult result); - callback GetAvailableStaticRuleCountCallback = void(long count); - callback TestMatchOutcomeCallback = void(TestMatchOutcomeResult result); - - interface Functions { - - // Modifies the current set of dynamic rules for the extension. - // The rules with IDs listed in options.removeRuleIds are first - // removed, and then the rules given in options.addRules are - // added. Notes: - //
    - //
  • This update happens as a single atomic operation: either all - // specified rules are added and removed, or an error is returned.
  • - //
  • These rules are persisted across browser sessions and across - // extension updates.
  • - //
  • Static rules specified as part of the extension package can not be - // removed using this function.
  • - //
  • $(ref:MAX_NUMBER_OF_DYNAMIC_RULES) is the maximum number - // of dynamic rules an extension can add. The number of - // unsafe rules must not exceed - // $(ref:MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES).
  • - //
- // |callback|: Promise that resolves once the update is complete. - // In case of an error, the promise will be rejected and no change will be - // made to the rule set. This can happen for multiple reasons, such as - // invalid rule format, duplicate rule ID, rule count limit exceeded, - // internal errors, and others. - static void updateDynamicRules( - UpdateRuleOptions options, - optional EmptyCallback callback); - - // Returns the current set of dynamic rules for the extension. Callers can - // optionally filter the list of fetched rules by specifying a - // filter. - // |filter|: An object to filter the list of fetched rules. - // |callback|: Promise that resolves with the set of dynamic rules. The - // Promise may be rejected in case of transient internal errors. - static void getDynamicRules( - optional GetRulesFilter filter, - GetRulesCallback callback); - - // Modifies the current set of session scoped rules for the extension. - // The rules with IDs listed in options.removeRuleIds are first - // removed, and then the rules given in options.addRules are - // added. Notes: - //
    - //
  • This update happens as a single atomic operation: either all - // specified rules are added and removed, or an error is returned.
  • - //
  • These rules are not persisted across sessions and are backed in - // memory.
  • - //
  • $(ref:MAX_NUMBER_OF_SESSION_RULES) is the maximum number - // of session rules an extension can add.
  • - //
- // |callback|: Promise that resolves once the update is complete. In case - // of an error, the promise will be rejected and no change will be - // made to the rule set. This can happen for multiple reasons, such as - // invalid rule format, duplicate rule ID, rule count limit exceeded, and - // others. - static void updateSessionRules( - UpdateRuleOptions options, - optional EmptyCallback callback); - - // Returns the current set of session scoped rules for the extension. - // Callers can optionally filter the list of fetched rules by specifying a - // filter. - // |filter|: An object to filter the list of fetched rules. - // |callback|: Promise that resolves with the set of session scoped rules. - static void getSessionRules( - optional GetRulesFilter filter, - GetRulesCallback callback); - - // Updates the set of enabled static rulesets for the extension. The - // rulesets with IDs listed in options.disableRulesetIds are - // first removed, and then the rulesets listed in - // options.enableRulesetIds are added.
- // Note that the set of enabled static rulesets is persisted across sessions - // but not across extension updates, i.e. the rule_resources - // manifest key will determine the set of enabled static rulesets on each - // extension update. - // |callback|: Promise that resolves once the update is complete. In case of - // an error, the promise will be rejected and no change will be made to the - // set of enabled rulesets. This can happen for multiple reasons, such as - // invalid ruleset IDs, rule count limit exceeded, or internal errors. - static void updateEnabledRulesets( - UpdateRulesetOptions options, - optional EmptyCallback callback); - - // Returns the ids for the current set of enabled static rulesets. - // |callback|: Promise that resolves with a list of ids, where each id - // corresponds to an enabled static $(ref:Ruleset). - static void getEnabledRulesets( - GetEnabledRulesetsCallback callback); - - // Disables and enables individual static rules in a $(ref:Ruleset). - // Changes to rules belonging to a disabled $(ref:Ruleset) will take - // effect the next time that it becomes enabled. - // |callback|: Promise that resolves when the update is complete. In case of - // an error, the promise will be rejected and no change will be made to the - // enabled static rules. - static void updateStaticRules( - UpdateStaticRulesOptions options, - optional EmptyCallback callback); - - // Returns the list of static rules in the given $(ref:Ruleset) that are - // currently disabled. - // |options|: Specifies the ruleset to query. - // |callback|: Promise that resolves with a list of ids that correspond to - // the disabled rules in that ruleset. - static void getDisabledRuleIds( - GetDisabledRuleIdsOptions options, - GetDisabledRuleIdsCallback callback); - - // Returns all rules matched for the extension. Callers can optionally - // filter the list of matched rules by specifying a filter. - // This method is only available to extensions with the - // "declarativeNetRequestFeedback" permission or having the - // "activeTab" permission granted for the tabId - // specified in filter. - // Note: Rules not associated with an active document that were matched more - // than five minutes ago will not be returned. - // |filter|: An object to filter the list of matched rules. - // |callback|: Promise that resolves once the list of matched rules has been - // fetched. In case of an error, the Promise will be rejected. This can - // happen for multiple reasons, such as insufficient permissions, or - // exceeding the quota. - static void getMatchedRules( - optional MatchedRulesFilter filter, - GetMatchedRulesCallback callback); - - // Configures if the action count for tabs should be displayed as the - // extension action's badge text and provides a way for that action count to - // be incremented. - static void setExtensionActionOptions( - ExtensionActionOptions options, - optional EmptyCallback callback); - - // Checks if the given regular expression will be supported as a - // regexFilter rule condition. - // |regexOptions|: The regular expression to check. - // |callback|: Promise that resolves with details consisting of whether the - // regular expression is supported and the reason if not. - static void isRegexSupported( - RegexOptions regexOptions, - IsRegexSupportedCallback callback); - - // Returns the number of static rules an extension can enable before the - // global static rule limit is - // reached. - static void getAvailableStaticRuleCount( - GetAvailableStaticRuleCountCallback callback); - - // Checks if any of the extension's declarativeNetRequest rules would match - // a hypothetical request. - // Note: Only available for unpacked extensions as this is only intended to - // be used during extension development. - // |requestDetails|: The request details to test. - // |callback|: Promise that resolves with the details of matched rules. - static void testMatchOutcome( - TestMatchRequestDetails request, - TestMatchOutcomeCallback callback); - }; - - interface Properties { - // The minimum number of static rules guaranteed to an extension across its - // enabled static rulesets. Any rules above this limit will count towards - // the global static rule limit. - [value=30000] static long GUARANTEED_MINIMUM_STATIC_RULES(); - - // The maximum number of combined dynamic and session scoped rules an - // extension can add. - [nodoc, value=5000, deprecated="There is no longer a combined limit. See $(ref:MAX_NUMBER_OF_DYNAMIC_RULES) and $(ref:MAX_NUMBER_OF_SESSION_RULES)."] static long MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES(); - - // The maximum number of dynamic rules that an extension can add. - [value=30000] static long MAX_NUMBER_OF_DYNAMIC_RULES(); - - // The maximum number of "unsafe" dynamic rules that an extension can add. - [value=5000] static long MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES(); - - // The maximum number of session scoped rules that an extension can add. - [value=5000] static long MAX_NUMBER_OF_SESSION_RULES(); - - // The maximum number of "unsafe" session scoped rules that an extension can - // add. - [value=5000] static long MAX_NUMBER_OF_UNSAFE_SESSION_RULES(); - - // Time interval within which MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL - // getMatchedRules calls can be made, specified in minutes. - // Additional calls will fail immediately and set $(ref:runtime.lastError). - // Note: getMatchedRules calls associated with a user gesture - // are exempt from the quota. - [value=10] static long GETMATCHEDRULES_QUOTA_INTERVAL(); - - // The number of times getMatchedRules can be called within a - // period of GETMATCHEDRULES_QUOTA_INTERVAL. - [value=20] static long MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL(); - - // The maximum number of regular expression rules that an extension can - // add. This limit is evaluated separately for the set of dynamic rules and - // those specified in the rule resources file. - [value=1000] static long MAX_NUMBER_OF_REGEX_RULES(); - - // The maximum number of static Rulesets an extension can - // specify as part of the "rule_resources" manifest key. - [value=100] static long MAX_NUMBER_OF_STATIC_RULESETS(); - - // The maximum number of static Rulesets an extension can - // enable at any one time. - [value=50] static long MAX_NUMBER_OF_ENABLED_STATIC_RULESETS(); - - // Ruleset ID for the dynamic rules added by the extension. - [value="_dynamic"] static DOMString DYNAMIC_RULESET_ID(); - - // Ruleset ID for the session-scoped rules added by the extension. - [value="_session"] static DOMString SESSION_RULESET_ID(); - }; - - interface Events { - // Fired when a rule is matched with a request. Only available for unpacked - // extensions with the "declarativeNetRequestFeedback" permission - // as this is intended to be used for debugging purposes only. - // |info|: The rule that has been matched along with information about the - // associated request. - static void onRuleMatchedDebug(MatchedRuleInfoDebug info); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/printer_provider.idl b/tools/under-control/src/extensions/common/api/printer_provider.idl deleted file mode 100755 index 56266311..00000000 --- a/tools/under-control/src/extensions/common/api/printer_provider.idl +++ /dev/null @@ -1,114 +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. - -// The chrome.printerProvider API exposes events used by print -// manager to query printers controlled by extensions, to query their -// capabilities and to submit print jobs to these printers. -namespace printerProvider { - // Error codes returned in response to $(ref:onPrintRequested) event. - enum PrintError { - // Specifies that the operation was completed successfully. - OK, - - // Specifies that a general failure occured. - FAILED, - - // Specifies that the print ticket is invalid. For example, the ticket is - // inconsistent with some capabilities, or the extension is not able to - // handle all settings from the ticket. - INVALID_TICKET, - - // Specifies that the document is invalid. For example, data may be - // corrupted or the format is incompatible with the extension. - INVALID_DATA - }; - - // Printer description for $(ref:onGetPrintersRequested) event. - dictionary PrinterInfo { - // Unique printer ID. - DOMString id; - - // Printer's human readable name. - DOMString name; - - // Printer's human readable description. - DOMString? description; - }; - - // Printing request parameters. Passed to $(ref:onPrintRequested) event. - dictionary PrintJob { - // ID of the printer which should handle the job. - DOMString printerId; - - // The print job title. - DOMString title; - - // Print ticket in - // - // CJT format. - // - object ticket; - - // The document content type. Supported formats are - // "application/pdf" and "image/pwg-raster". - DOMString contentType; - - // Blob containing the document data to print. Format must match - // |contentType|. - [instanceOf=Blob] object document; - }; - - callback PrintersCallback = void(PrinterInfo[] printerInfo); - - callback PrinterInfoCallback = void(optional PrinterInfo printerInfo); - - // |capabilities|: Device capabilities in - // CDD - // format. - callback CapabilitiesCallback = void(object capabilities); - - callback PrintCallback = void(PrintError result); - - interface Events { - // Event fired when print manager requests printers provided by extensions. - // |resultCallback|: Callback to return printer list. Every listener must - // call callback exactly once. - static void onGetPrintersRequested(PrintersCallback resultCallback); - - // Event fired when print manager requests information about a USB device - // that may be a printer. - //

Note: An application should not rely on this event being - // fired more than once per device. If a connected device is supported it - // should be returned in the $(ref:onGetPrintersRequested) event.

- // |device|: The USB device. - // |resultCallback|: Callback to return printer info. The receiving listener - // must call callback exactly once. If the parameter to this callback is - // undefined that indicates that the application has determined that the - // device is not supported. - static void onGetUsbPrinterInfoRequested( - usb.Device device, - PrinterInfoCallback resultCallback); - - // Event fired when print manager requests printer capabilities. - // |printerId|: Unique ID of the printer whose capabilities are requested. - // |resultCallback|: Callback to return device capabilities in - // CDD - // format. - // The receiving listener must call callback exectly once. - static void onGetCapabilityRequested(DOMString printerId, - CapabilitiesCallback resultCallback); - - // Event fired when print manager requests printing. - // |printJob|: The printing request parameters. - // |resultCallback|: Callback that should be called when the printing - // request is completed. - static void onPrintRequested(PrintJob printJob, - PrintCallback resultCallback); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/printer_provider_internal.idl b/tools/under-control/src/extensions/common/api/printer_provider_internal.idl deleted file mode 100755 index b9d2d1de..00000000 --- a/tools/under-control/src/extensions/common/api/printer_provider_internal.idl +++ /dev/null @@ -1,58 +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. - -// printerProviderInternal -// Internal API used to run callbacks passed to chrome.printerProvider API -// events. -// When dispatching a chrome.printerProvider API event, its arguments will be -// massaged in custom bindings so a callback is added. The callback uses -// chrome.printerProviderInternal API to report the event results. -// In order to identify the event for which the callback is called, the event -// is internally dispatched having a requestId argument (which is removed from -// the argument list before the event actually reaches the event listeners). The -// requestId is forwarded to the chrome.printerProviderInternal API functions. -[implemented_in="extensions/browser/api/printer_provider/printer_provider_internal_api.h"] -namespace printerProviderInternal { - // Same as in printerProvider.PrintError enum API. - enum PrintError { OK, FAILED, INVALID_TICKET, INVALID_DATA }; - - // Callback carrying a blob. - callback BlobCallback = void([instanceOf=Blob] object blob); - - interface Functions { - // Runs callback to printerProvider.onGetPrintersRequested event. - // |requestId|: Parameter identifying the event instance for which the - // callback is run. - // |printers|: List of printers reported by the extension. - void reportPrinters(long requestId, - optional printerProvider.PrinterInfo[] printers); - - // Runs callback to printerProvider.onUsbAccessGranted event. - // |requestId|: Parameter identifying the event instance for which the - // callback is run. - // |printerInfo|: Printer information reported by the extension. - void reportUsbPrinterInfo(long requestId, - optional printerProvider.PrinterInfo printerInfo); - - // Runs callback to printerProvider.onGetCapabilityRequested event. - // |requestId|: Parameter identifying the event instance for which the - // callback is run. - // |error|: The printer capability returned by the extension. - void reportPrinterCapability(long request_id, optional object capability); - - // Runs callback to printerProvider.onPrintRequested event. - // |requestId|: Parameter identifying the event instance for which the - // callback is run. - // |error|: The requested print job result. - void reportPrintResult(long request_id, optional PrintError error); - - // Gets information needed to create a print data blob for a print request. - // The blob will be dispatched to the extension via - // printerProvider.onPrintRequested event. - // |requestId|: The request id for the print request for which data is - // needed. - // |callback|: Callback called with a blob of print data. - void getPrintData(long requestId, BlobCallback callback); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/scripts_internal.idl b/tools/under-control/src/extensions/common/api/scripts_internal.idl deleted file mode 100755 index 57fa71a8..00000000 --- a/tools/under-control/src/extensions/common/api/scripts_internal.idl +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Internal namespace for representing content scripts. -namespace scriptsInternal { - // The source of the user script. This will also determine certain - // capabilities of the script (such as whether it can use globs, raw strings - // for code, etc). - enum Source { - DYNAMIC_CONTENT_SCRIPT, - DYNAMIC_USER_SCRIPT, - MANIFEST_CONTENT_SCRIPT - }; - - // The source of the script to inject. - dictionary ScriptSource { - // A string containing the JavaScript code to inject. Exactly one of - // file or code must be specified. - DOMString? code; - // The path of the JavaScript file to inject relative to the extension's - // root directory. Exactly one of file or code - // must be specified. - DOMString? file; - }; - - // Describes a serialized script, intended for storage and persistence across - // browser sessions. - // Note: Though it is called "UserScript", this is used for scripts through - // the scripting API (dynamic content scripts), content scripts in the - // manifest (static content scripts), and user scripts through the userScripts - // API. "UserScript" was chosen because it matches the correspodning - // extenisons::UserScript object (the runtime representation of this) and - // because "Script" is ambiguous (e.g. background script, general JS script, - // etc). - dictionary SerializedUserScript { - // Whether the script will inject into all frames, regardless if it is not - // the top-most frame in the tab. - boolean? allFrames; - // The list of CSS files to be injected into matching pages. Note that, - // today, we only expect these to contain files. It is represented as a - // ScriptSource for compatibility and consistency with `js`. - ScriptSource[]? css; - // Excludes pages that this user script would otherwise be injected into. - DOMString[]? excludeMatches; - // Specifies wildcard patterns for pages this user script will NOT be - // injected into. - DOMString[]? excludeGlobs; - // The ID of the script. - DOMString id; - // Specifies wildcard patterns for pages this user script will be injected - // into. - DOMString[]? includeGlobs; - // The list of sources of javascript to be injected into matching pages. - ScriptSource[]? js; - // Specifies which pages this user script will be injected into. - DOMString[] matches; - // Whether the script should inject into any frames where the URL belongs to - // a scheme that would never match a specified Match Pattern, including - // about:, data:, blob:, and filesystem: schemes. - boolean? matchOriginAsFallback; - // Specifies when JavaScript files are injected into the web page. - extensionTypes.RunAt? runAt; - // The "source" of the user script. - Source source; - // The JavaScript "world" to run the script in. - extensionTypes.ExecutionWorld world; - // The ID of the world into which to inject. If omitted, uses the default - // world. - DOMString? worldId; - }; -}; diff --git a/tools/under-control/src/extensions/common/api/user_scripts.idl b/tools/under-control/src/extensions/common/api/user_scripts.idl deleted file mode 100755 index d6eed152..00000000 --- a/tools/under-control/src/extensions/common/api/user_scripts.idl +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2023 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 userScripts API to execute user scripts in the User -// Scripts context. -namespace userScripts { - // The JavaScript world for a user script to execute within. - enum ExecutionWorld { - // Specifies the execution environment of the DOM, which is the execution - // environment shared with the host page's JavaScript. - MAIN, - // Specifies the execution environment that is specific to user scripts and - // is exempt from the page's CSP. - USER_SCRIPT - }; - - // The source of the script to inject. - dictionary ScriptSource { - // A string containing the JavaScript code to inject. Exactly one of - // file or code must be specified. - DOMString? code; - // The path of the JavaScript file to inject relative to the extension's - // root directory. Exactly one of file or code - // must be specified. - DOMString? file; - }; - - // Describes a user script to be injected into a web page registered through - // this API. The script is injected into a page if its URL matches any of - // "matches" or "include_globs" patterns, and the URL doesn't match - // "exclude_matches" and "exclude_globs" patterns. - dictionary RegisteredUserScript { - // If true, it will inject into all frames, even if the frame is not the - // top-most frame in the tab. Each frame is checked independently for URL - // requirements; it will not inject into child frames if the URL - // requirements are not met. Defaults to false, meaning that only the top - // frame is matched. - boolean? allFrames; - // Excludes pages that this user script would otherwise be injected into. - // See Match Patterns for more details on - // the syntax of these strings. - DOMString[]? excludeMatches; - // The ID of the user script specified in the API call. This property must - // not start with a '_' as it's reserved as a prefix for generated script - // IDs. - DOMString id; - // Specifies wildcard patterns for pages this user script will be injected - // into. - DOMString[]? includeGlobs; - // Specifies wildcard patterns for pages this user script will NOT be - // injected into. - DOMString[]? excludeGlobs; - // The list of ScriptSource objects defining sources of scripts to be - // injected into matching pages. - // This property must be specified for ${ref:register}, and when specified - // it must be a non-empty array. - ScriptSource[]? js; - // Specifies which pages this user script will be injected into. See - // Match Patterns for more details on the - // syntax of these strings. This property must be specified for - // ${ref:register}. - DOMString[]? matches; - // Specifies when JavaScript files are injected into the web page. The - // preferred and default value is document_idle. - extensionTypes.RunAt? runAt; - // The JavaScript execution environment to run the script in. The default is - // `USER_SCRIPT`. - ExecutionWorld? world; - // Specifies the user script world ID to execute in. If omitted, the script - // will execute in the default user script world. Only valid if `world` is - // omitted or is `USER_SCRIPT`. Values with leading underscores (`_`) are - // reserved. - DOMString? worldId; - }; - - // An object used to filter user scripts for ${ref:getScripts}. - dictionary UserScriptFilter { - // $(ref:getScripts) only returns scripts with the IDs specified in this - // list. - DOMString[]? ids; - }; - - dictionary InjectionTarget { - // Whether the script should inject into all frames within the tab. Defaults - // to false. This must not be true if frameIds is specified. - boolean? allFrames; - // The IDs of specific documentIds to inject into. This must not be set if - // frameIds is set. - DOMString[]? documentIds; - // The IDs of specific frames to inject into. - long[]? frameIds; - // The ID of the tab into which to inject. - long tabId; - }; - - dictionary InjectionResult { - // The document associated with the injection. - DOMString documentId; - // The frame associated with the injection. - long frameId; - // The result of the script execution. - any? result; - // The error, if any. error and result are - // mutually exclusive. - DOMString? error; - }; - - dictionary UserScriptInjection { - // Whether the injection should be triggered in the target as soon as - // possible. Note that this is not a guarantee that injection will occur - // prior to page load, as the page may have already loaded by the time the - // script reaches the target. - boolean? injectImmediately; - // The list of ScriptSource objects defining sources of scripts to be - // injected into the target. - ScriptSource[] js; - // Details specifying the target into which to inject the script. - InjectionTarget target; - // The JavaScript "world" to run the script in. The default is - // USER_SCRIPT. - ExecutionWorld? world; - // Specifies the user script world ID to execute in. If omitted, the script - // will execute in the default user script world. Only valid if `world` is - // omitted or is `USER_SCRIPT`. Values with leading underscores (`_`) are - // reserved. - DOMString? worldId; - }; - - // An object used to update the `USER_SCRIPT` world - // configuration. If a property is not specified, it will reset it to its - // default value. - dictionary WorldProperties{ - // Specifies the ID of the specific user script world to update. - // If not provided, updates the properties of the default user script world. - // Values with leading underscores (`_`) are reserved. - DOMString? worldId; - - // Specifies the world csp. The default is the `ISOLATED` - // world csp. - DOMString? csp; - - // Specifies whether messaging APIs are exposed. The default is - // false. - boolean? messaging; - }; - - callback RegisterCallback = void(); - - callback GetScriptsCallback = void(RegisteredUserScript[] scripts); - - callback UnregisterCallback = void(); - - callback UpdateCallback = void(); - - callback ExecuteCallback = void(InjectionResult[] result); - - callback ConfigureWorldCallback = void(); - - callback GetAllWorldConfigurationsCallback = void(WorldProperties[] worlds); - - callback ResetWorldConfigurationCallback = void(); - - interface Functions { - // Registers one or more user scripts for this extension. - // |scripts|: Contains a list of user scripts to be registered. - // |callback|: Promise that resolves once scripts have been fully - // registered. The promise will be rejected if an error occurs. - static void register( - RegisteredUserScript[] scripts, - optional RegisterCallback callback); - - // Returns all dynamically-registered user scripts for this extension. - // |filter|: If specified, this method returns only the user scripts that - // match it. - // |callback|: Promise that resolves with the registered scripts. - // The promise will be rejected if an error occurs. - static void getScripts( - optional UserScriptFilter filter, - GetScriptsCallback callback); - - // Unregisters all dynamically-registered user scripts for this extension. - // |filter|: If specified, this method unregisters only the user scripts - // that match it. - // |callback|: Promise that resolves once scripts have been fully - // unregistered. The promise will be rejected if an error occurs. - static void unregister( - optional UserScriptFilter filter, - UnregisterCallback callback); - - // Updates one or more user scripts for this extension. - // |scripts|: Contains a list of user scripts to be updated. A property is - // only updated for the existing script if it is specified in this object. - // If there are errors during script parsing/file validation, or if the IDs - // specified do not correspond to a fully registered script, then no scripts - // are updated. - // |callback|: Promise that resolves once scripts have been fully updated. - // The promise will be rejected if an error occurs. - static void update( - RegisteredUserScript[] scripts, - optional UpdateCallback callback); - - // Injects a script into a target context. By default, the script will be - // run at document_idle, or immediately if the page has already - // loaded. If the injectImmediately property is set, the script - // will inject without waiting, even if the page has not finished loading. - // If the script evaluates to a promise, the browser will wait for the - // promise to settle and return the resulting value. - static void execute( - UserScriptInjection injection, - optional ExecuteCallback callback); - - // Configures the `USER_SCRIPT` execution environment. - // |properties|: Contains the user script world configuration. - // |callback|: Promise that resolves once the world has been - // configured. - static void configureWorld( - WorldProperties properties, - optional ConfigureWorldCallback callback); - - // Retrieves all registered world configurations. - // |callback|: Promise that resolves with the registered world - // configurations. - static void getWorldConfigurations( - GetAllWorldConfigurationsCallback callback); - - // Resets the configuration for a user script world. Any scripts that inject - // into the world with the specified ID will use the default world - // configuration. - // |worldId|: The ID of the user script world to reset. If omitted, resets - // the default world's configuration. - // |callback|: Promise that resolves when the configuration is reset. - static void resetWorldConfiguration( - optional DOMString worldId, - ResetWorldConfigurationCallback callback); - }; -}; diff --git a/tools/under-control/src/gin/v8_initializer.cc b/tools/under-control/src/gin/v8_initializer.cc index c9263027..6146bd47 100755 --- a/tools/under-control/src/gin/v8_initializer.cc +++ b/tools/under-control/src/gin/v8_initializer.cc @@ -404,6 +404,10 @@ void SetFeatureFlags() { SetV8FlagsFormatted("--preconfigured-old-space-size=%i", features::kV8PreconfigureOldGenSize.Get()); } + if (base::FeatureList::IsEnabled(features::kV8MemoryReducerDelay)) { + SetV8FlagsFormatted("--memory-reducer-delay-ms=%i", + features::kV8MemoryReducerDelayInSeconds.Get() * 1000); + } if (base::FeatureList::IsEnabled(features::kV8HighEndAndroid)) { SetV8FlagsFormatted("--high-end-android-physical-memory-threshold=%i", features::kV8HighEndAndroidMemoryThreshold.Get()); @@ -568,26 +572,14 @@ void V8Initializer::Initialize(IsolateHolder::ScriptMode mode, // do it is that there are no Isolates available yet, which are required // for recording histograms in V8. - // Record the mode of the sandbox. - // These values are persisted to logs. Entries should not be renumbered and - // numeric values should never be reused. This should match enum - // V8SandboxMode in tools/metrics/histograms/enums.xml. - enum class V8SandboxMode { - kSecure = 0, - kInsecure = 1, - kMaxValue = kInsecure, - }; - base::UmaHistogramEnumeration("V8.SandboxMode", - v8::V8::IsSandboxConfiguredSecurely() - ? V8SandboxMode::kSecure - : V8SandboxMode::kInsecure); + base::UmaHistogramEnumeration("V8.SandboxMode", v8::V8::GetSandboxMode()); // Record the size of the address space reservation backing the sandbox. // The size will always be one of a handful of values, so use a sparse // histogram to capture it. - size_t size = v8::V8::GetSandboxReservationSizeInBytes(); + const size_t size = v8::V8::GetSandboxReservationSizeInBytes(); DCHECK_GT(size, 0U); - size_t sizeInGB = size >> 30; + const size_t sizeInGB = size >> 30; DCHECK_EQ(sizeInGB << 30, size); base::UmaHistogramSparse("V8.SandboxReservationSizeGB", sizeInGB); diff --git a/tools/under-control/src/media/base/video_codecs.h b/tools/under-control/src/media/base/video_codecs.h index 6cb32b0e..5063dd4d 100755 --- a/tools/under-control/src/media/base/video_codecs.h +++ b/tools/under-control/src/media/base/video_codecs.h @@ -106,7 +106,9 @@ enum VideoCodecProfile { HEVCPROFILE_SCALABLE_REXT = 35, HEVCPROFILE_HIGH_THROUGHPUT_SCREEN_EXTENDED = 36, HEVCPROFILE_EXT_MAX = HEVCPROFILE_HIGH_THROUGHPUT_SCREEN_EXTENDED, - VIDEO_CODEC_PROFILE_MAX = HEVCPROFILE_HIGH_THROUGHPUT_SCREEN_EXTENDED, + DOLBYVISION_PROFILE10 = 37, + DOLBYVISION_PROFILE20 = 38, + VIDEO_CODEC_PROFILE_MAX = DOLBYVISION_PROFILE20, }; // 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 7e784eca..3b928d61 100755 --- a/tools/under-control/src/services/network/network_context.cc +++ b/tools/under-control/src/services/network/network_context.cc @@ -33,6 +33,7 @@ #include "base/memory/scoped_refptr.h" #include "base/metrics/histogram_functions.h" #include "base/sequence_checker.h" +#include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -565,7 +566,7 @@ bool GetFullDataFilePath( // processes. mojom::URLLoaderFactoryParamsPtr CreateURLLoaderFactoryParamsForPrefetch() { auto params = mojom::URLLoaderFactoryParams::New(); - params->process_id = OriginatingProcess::browser(); + params->process_id = OriginatingProcessId::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 @@ -999,7 +1000,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 = OriginatingProcess::browser(); + url_loader_factory_params->process_id = OriginatingProcessId::browser(); url_loader_factory_params->automatically_assign_isolation_info = true; url_loader_factory_params->is_orb_enabled = false; if (url_request_context()->bound_network() != @@ -1021,6 +1022,12 @@ void NetworkContext::ActivateDohProbes() { doh_probes_request_ = url_request_context_->host_resolver()->CreateDohProbeRequest(); doh_probes_request_->Start(); + + net::HostResolver* primary_resolver = url_request_context_->host_resolver(); + canary_domain_service_ = primary_resolver->CreateCanaryDomainService(); + if (canary_domain_service_) { + canary_domain_service_->Start(); + } } void NetworkContext::SetClient( @@ -1261,11 +1268,11 @@ void NetworkContext::Remove(WebTransport* transport) { } } -void NetworkContext::LoaderCreated(const OriginatingProcess& process_id) { +void NetworkContext::LoaderCreated(const OriginatingProcessId& process_id) { loader_count_per_process_[process_id] += 1; } -void NetworkContext::LoaderDestroyed(const OriginatingProcess& process_id) { +void NetworkContext::LoaderDestroyed(const OriginatingProcessId& process_id) { auto it = loader_count_per_process_.find(process_id); CHECK(it != loader_count_per_process_.end()); it->second -= 1; @@ -1274,7 +1281,7 @@ void NetworkContext::LoaderDestroyed(const OriginatingProcess& process_id) { } } -bool NetworkContext::CanCreateLoader(const OriginatingProcess& process_id) { +bool NetworkContext::CanCreateLoader(const OriginatingProcessId& 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_; @@ -1367,6 +1374,43 @@ void NetworkContext::ClearHttpCache(base::Time start_time, base::Time end_time, mojom::ClearDataFilterPtr filter, ClearHttpCacheCallback callback) { + if (base::FeatureList::IsEnabled(net::features::kLogicalClearHttpCache)) { + net::HttpCache* cache = + url_request_context_->http_transaction_factory()->GetCache(); + if (cache) { + // Step 1: Add a logical filter to the HttpCache. This is near-instant + // and ensures that subsequent requests won't see invalidated data. + net::HttpCache::InvalidationFilter invalidation_filter; + invalidation_filter.begin_time = start_time; + // Cap the end_time to Now() so we don't accidentally invalidate future + // cache entries if the caller passes Time::Max(). + invalidation_filter.end_time = std::min(end_time, base::Time::Now()); + if (filter) { + invalidation_filter.filter_type = + ConvertClearDataFilterType(filter->type); + invalidation_filter.origins = base::flat_set( + filter->origins.begin(), filter->origins.end()); + invalidation_filter.domains = base::flat_set( + filter->domains.begin(), filter->domains.end()); + } else { + invalidation_filter.filter_type = net::UrlFilterType::kFalseIfMatches; + } + cache->AddInvalidationFilter(std::move(invalidation_filter)); + } + + // Step 2: Trigger the slow physical cleanup in the background. We use a + // no-op callback because the logical invalidation already satisfies + // the consistency requirements of the caller. + http_cache_data_removers_.push_back(HttpCacheDataRemover::CreateAndStart( + url_request_context_, std::move(filter), start_time, end_time, + base::BindOnce(&NetworkContext::OnHttpCacheCleared, + base::Unretained(this), base::DoNothing()))); + + // Step 3: Respond to the caller immediately. + std::move(callback).Run(); + return; + } + // It's safe to use Unretained below as the HttpCacheDataRemover is owned by // |this| and guarantees it won't call its callback if deleted. http_cache_data_removers_.push_back(HttpCacheDataRemover::CreateAndStart( @@ -1923,11 +1967,10 @@ void NetworkContext::ClearBadProxiesCache( void NetworkContext::CreateWebSocket( const GURL& url, const std::vector& requested_protocols, - const net::SiteForCookies& site_for_cookies, net::StorageAccessApiStatus storage_access_api_status, const net::IsolationInfo& isolation_info, std::vector additional_headers, - const network::OriginatingProcess& process_id, + const network::OriginatingProcessId& process_id, const url::Origin& origin, network::mojom::ClientSecurityStatePtr client_security_state, uint32_t options, @@ -1946,8 +1989,8 @@ void NetworkContext::CreateWebSocket( DCHECK(process_id); websocket_factory_->CreateWebSocket( - url, requested_protocols, site_for_cookies, storage_access_api_status, - isolation_info, std::move(additional_headers), process_id, origin, + url, requested_protocols, storage_access_api_status, isolation_info, + std::move(additional_headers), process_id, origin, std::move(client_security_state), options, static_cast(traffic_annotation), std::move(handshake_client), std::move(url_loader_network_observer), @@ -3360,7 +3403,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 = OriginatingProcess::browser(); + url_loader_factory_params->process_id = OriginatingProcessId::browser(); CreateURLLoaderFactory(std::move(url_loader_factory_pending_receiver), std::move(url_loader_factory_params)); } @@ -3609,7 +3652,8 @@ void NetworkContext::AddQuicHints( bool NetworkContext::IsNetworkForNonceAndUrlAllowed( const base::UnguessableToken& nonce, - const GURL& url) const { + const GURL& url, + bool is_redirect) const { // If network hasn't been revoked for the nonce, it's allowed. if (!network_revocation_nonces_.contains(nonce)) { return true; @@ -3627,16 +3671,17 @@ bool NetworkContext::IsNetworkForNonceAndUrlAllowed( for (const std::unique_ptr& pattern : allowlisted_patterns) { if (pattern->Match(url)) { - return true; + // Redirects are blocked for URLs allowed through connection allowlists. + return !is_redirect; } } } // If network has been revoked for the nonce, but the url is exempted, it's // allowed. - if (network_revocation_exemptions_.contains(nonce) && - network_revocation_exemptions_.find(nonce)->second.contains( - url.GetWithoutFilename())) { + if (auto it = network_revocation_exemptions_.find(nonce); + it != network_revocation_exemptions_.end() && + it->second.contains(url.GetWithoutFilename())) { return true; } // The nonce was revoked and the url isn't exempted. @@ -3650,16 +3695,16 @@ bool NetworkContext::IsHostResolutionForNonceAndHostAllowed( return true; } - if (!network_revocation_nonces_.contains(nonce)) { + auto it = network_revocation_nonces_.find(nonce); + if (it == network_revocation_nonces_.end()) { 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); + GURL synthetic_url = GURL(base::StrCat( + {url::kHttpsScheme, url::kStandardSchemeSeparator, host_fragment})); if (!synthetic_url.is_valid()) { return false; } @@ -3669,7 +3714,7 @@ bool NetworkContext::IsHostResolutionForNonceAndHostAllowed( // 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; + allowlisted_patterns = it->second; for (const std::unique_ptr& pattern : allowlisted_patterns) { if (pattern->HostOnlyMatch(synthetic_url)) { 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 4836e529..23ff7985 100755 --- a/tools/under-control/src/testing/variations/fieldtrial_testing_config.json +++ b/tools/under-control/src/testing/variations/fieldtrial_testing_config.json @@ -38,6 +38,27 @@ ] } ], + "AIMEligibilityImprovements": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AimEligibilityServiceIdentityImprovements", + "AimUrlNavigationFetchEnabled" + ] + } + ] + } + ], "AIMHintText": [ { "platforms": [ @@ -169,6 +190,29 @@ ] } ], + "AccessibilityAnnotatorContentAnnotatorPipeline": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "ContentAnnotatorEnabledFullAnnotationDisabled", + "params": { + "content_annotator_classifier_relevance_values": "{\"ShoppingCart\":2}", + "content_annotator_classifier_title_keyword_rules": "{\"ShoppingCart\":[\"\\\\\\\\bcart\\\\\\\\b\",\"\\\\\\\\bbag\\\\\\\\b\",\"\\\\\\\\bbasket\\\\\\\\b\",\"\\\\\\\\bpac\\\\\\\\b\"]}", + "content_annotator_classifier_url_match_rules": "{\"ShoppingCart\":[\".*/cart(?:[/?#].*|$)\",\".*/bag(?:[/?#].*|$)\",\".*/basket(?:[/?#].*|$)\",\".*/pac(?:[/?#].*|$)\"]}" + }, + "enable_features": [ + "ContentAnnotator" + ] + } + ] + } + ], "AccessibilityCheckJavaNodeCacheFreshness": [ { "platforms": [ @@ -474,22 +518,6 @@ ] } ], - "AccessibilityTextChangeTypes": [ - { - "platforms": [ - "android", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AccessibilityTextChangeTypes" - ] - } - ] - } - ], "AccessibilityUnifiedSnapshots": [ { "platforms": [ @@ -566,7 +594,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -655,6 +682,21 @@ ] } ], + "AllowDelayedAudioFocusGainAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AllowDelayedAudioFocusGainAndroid" + ] + } + ] + } + ], "AlwaysUseAudioManagerOutputFramesPerBuffer": [ { "platforms": [ @@ -694,21 +736,6 @@ ] } ], - "AndroidAnimateSuggestionsListAppearance": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AnimateSuggestionsListAppearance" - ] - } - ] - } - ], "AndroidAnimatedImageDragShadow": [ { "platforms": [ @@ -757,66 +784,6 @@ ] } ], - "AndroidBookmarkBar": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_V2", - "params": { - "show_bookmark_bar": "false" - }, - "enable_features": [ - "AndroidAppearanceSettings", - "AndroidBookmarkBar", - "IPH_BookmarksBar", - "TopControlsRefactor", - "TopControlsRefactorV2" - ] - }, - { - "name": "Enabled", - "params": { - "show_bookmark_bar": "false" - }, - "enable_features": [ - "AndroidAppearanceSettings", - "AndroidBookmarkBar", - "IPH_BookmarksBar", - "TopControlsRefactor" - ] - }, - { - "name": "Enabled_DefaultVisible", - "params": { - "show_bookmark_bar": "true" - }, - "enable_features": [ - "AndroidAppearanceSettings", - "AndroidBookmarkBar", - "IPH_BookmarksBar", - "TopControlsRefactor" - ] - }, - { - "name": "Enabled_IPHTrackingOnly", - "params": { - "event_trigger": "name:bookmark_bar_iph_triggered_tracking_only;comparator:any;window:0;storage:360", - "show_bookmark_bar": "false", - "tracking_only": "true" - }, - "enable_features": [ - "AndroidAppearanceSettings", - "AndroidBookmarkBar", - "IPH_BookmarksBar", - "TopControlsRefactor" - ] - } - ] - } - ], "AndroidBookmarkHistoryPane": [ { "platforms": [ @@ -832,21 +799,6 @@ ] } ], - "AndroidBottomToolbar": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AndroidBottomToolbar" - ] - } - ] - } - ], "AndroidBottomToolbarV2": [ { "platforms": [ @@ -983,25 +935,6 @@ ] } ], - "AndroidHubSearchTabGroups": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "enable_hub_search_tab_group_strings": "true", - "enable_hub_search_tab_groups_pane": "true" - }, - "enable_features": [ - "AndroidHubSearchTabGroups" - ] - } - ] - } - ], "AndroidLowLatencyCanvas": [ { "platforms": [ @@ -1035,6 +968,21 @@ ] } ], + "AndroidMediaInsertion": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidMediaInsertion" + ] + } + ] + } + ], "AndroidMediaPickerAdoption": [ { "platforms": [ @@ -1074,21 +1022,6 @@ ] } ], - "AndroidOmniboxAimShortcut": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_all_20250815", - "enable_features": [ - "OmniboxAimShortcutTypedState" - ] - } - ] - } - ], "AndroidOpenIncognitoAsWindow": [ { "platforms": [ @@ -1108,26 +1041,93 @@ "AndroidParentalControlsV2": [ { "platforms": [ - "android", - "android_webview", - "fuchsia", - "ios", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ + "SupervisedUserEmitLogRecordSeparately", "SupervisedUserMergeDeviceParentalControlsAndFamilyLinkPrefs", - "SupervisedUserUseEmitDeviceLogRecordSeparately", "SupervisedUserUseUrlFilteringService" ] } ] } ], + "AndroidPermissionOptIns": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "FirstPromptDay7_SecondPromptDay14", + "params": { + "initial_prompt_delay_days": "7", + "permission_request_interval_days": "7", + "permission_request_max_count": "2" + }, + "enable_features": [ + "NotificationPermissionVariant" + ] + }, + { + "name": "FirstPromptDay7_Only", + "params": { + "initial_prompt_delay_days": "7", + "permission_request_max_count": "1" + }, + "enable_features": [ + "NotificationPermissionVariant" + ] + }, + { + "name": "FirstPromptDay56_SecondPromptDay63", + "params": { + "initial_prompt_delay_days": "56", + "permission_request_interval_days": "7", + "permission_request_max_count": "2" + }, + "enable_features": [ + "NotificationPermissionVariant" + ] + } + ] + } + ], + "AndroidPkAutocorrectUnderline": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidPkAutocorrectUnderline" + ] + } + ] + } + ], + "AndroidReaderModeFastFollows": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnabledAll", + "enable_features": [ + "ReaderModeBlurTransitionAnimation", + "ReaderModeDelayBottomSheetPeek", + "ReaderModeToggleLinks" + ] + } + ] + } + ], "AndroidReaderModeImproveAppExperience": [ { "platforms": [ @@ -1203,6 +1203,25 @@ ] } ], + "AndroidSetupList": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "AddressBarAndPwManagementEnabled", + "params": { + "include_address_bar_placement": "true", + "include_pw_management": "true" + }, + "enable_features": [ + "AndroidSetupList" + ] + } + ] + } + ], "AndroidSmsOtpFilling": [ { "platforms": [ @@ -1280,52 +1299,6 @@ ] } ], - "AndroidTNotifications": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "RationaleShownAtFirstRequest_20220909", - "params": { - "always_show_rationale_before_requesting_permission": "true", - "notification_permission_dialog_text_variant_2": "false", - "permission_request_interval_days": "7" - }, - "enable_features": [ - "NotificationPermissionVariant" - ] - }, - { - "name": "TextVariant2_20220909", - "params": { - "always_show_rationale_before_requesting_permission": "true", - "notification_permission_dialog_text_variant_2": "true", - "permission_request_interval_days": "7" - }, - "enable_features": [ - "NotificationPermissionVariant" - ] - } - ] - } - ], - "AndroidTabDeclutterPerformanceImprovements": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AndroidTabDeclutterPerformanceImprovements" - ] - } - ] - } - ], "AndroidThreadPriority": [ { "platforms": [ @@ -1353,15 +1326,6 @@ "android" ], "experiments": [ - { - "name": "Enabled_TrustAndSafety", - "params": { - "trust_and_safety": "true" - }, - "enable_features": [ - "AndroidTipsNotifications" - ] - }, { "name": "Enabled_Essential", "params": { @@ -1428,21 +1392,6 @@ ] } ], - "AndroidWebAppLaunchHandler": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "AndroidWebAppLaunchHandler" - ] - } - ] - } - ], "AndroidWindowManagementWebApi": [ { "platforms": [ @@ -1478,6 +1427,21 @@ ] } ], + "AndroidZeroCopyVideoCapture": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidZeroCopyVideoCapture" + ] + } + ] + } + ], "AndroidZoomIndicator": [ { "platforms": [ @@ -1638,21 +1602,6 @@ ] } ], - "AppBundlePromoMagicStackStudy": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AppBundlePromoEphemeralCard" - ] - } - ] - } - ], "AppListLaunchRecorder": [ { "platforms": [ @@ -1883,27 +1832,6 @@ ] } ], - "ArcVmIdleManagerV2": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "EnabledAC_V2", - "params": { - "delay_ms": "420000", - "ignore_battery_for_test": "true", - "pending_idle_reactivate": "false" - }, - "enable_features": [ - "ArcIdleManager" - ], - "min_os_version": "15795.0.0" - } - ] - } - ], "ArcVmInitThrottle3": [ { "platforms": [ @@ -2451,27 +2379,16 @@ ] } ], - "AutofillAiM3PublicPasses": [ + "AutofillAiM4": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AutofillAiDedupeEntities", - "AutofillAiVoteForFormatStringsForFlightNumbers", - "AutofillAiWalletFlightReservation", - "AutofillAiWalletVehicleRegistration", - "IPH_AutofillAiValuables", - "SyncAccountSettings", - "SyncAutofillValuableMetadata", - "SyncWalletFlightReservations", - "SyncWalletVehicleRegistrations" + "AutofillAiWithDataSchema" ] } ] @@ -2519,26 +2436,6 @@ ] } ], - "AutofillBetterLocalHeuristicPlaceholderSupport": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillBetterLocalHeuristicPlaceholderSupport" - ] - } - ] - } - ], "AutofillConsiderAutocompleteUnrecognizedFieldsInMetrics": [ { "platforms": [ @@ -2581,6 +2478,24 @@ ] } ], + "AutofillDelayApcForPredictions": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillDelayApcForPredictions" + ] + } + ] + } + ], "AutofillEnableAiBasedAmountExtraction": [ { "platforms": [ @@ -2620,179 +2535,6 @@ ] } ], - "AutofillEnableBuyNowPayLaterDesktop": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableAmountExtractionDesktop", - "AutofillEnableBuyNowPayLater" - ] - } - ] - } - ], - "AutofillEnableBuyNowPayLaterForExternallyLinked": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableBuyNowPayLaterForExternallyLinked" - ] - } - ] - } - ], - "AutofillEnableBuyNowPayLaterForKlarna": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableBuyNowPayLaterForKlarna" - ] - } - ] - } - ], - "AutofillEnableBuyNowPayLaterUpdatedSuggestionSecondLineString": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableBuyNowPayLaterUpdatedSuggestionSecondLineString" - ] - } - ] - } - ], - "AutofillEnableCvcStorage": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableCvcStorageAndFilling", - "AutofillEnableCvcStorageAndFillingEnhancement", - "AutofillEnableCvcStorageAndFillingStandaloneFormEnhancement", - "SyncAutofillWalletCredentialData" - ] - } - ] - } - ], - "AutofillEnableExpirationDateImprovements": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableExpirationDateImprovements" - ] - } - ] - } - ], - "AutofillEnableFillingPhoneCountryCodesByAddressCountryCodes": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableFillingPhoneCountryCodesByAddressCountryCodes" - ] - } - ] - } - ], - "AutofillEnableFpanRiskBasedAuthentication": [ - { - "platforms": [ - "android", - "ios", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableFpanRiskBasedAuthentication" - ] - } - ] - } - ], - "AutofillEnableLabelPrecedenceForTurkishAddresses": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableLabelPrecedenceForTurkishAddresses" - ] - } - ] - } - ], "AutofillEnableMandatoryReauthAndFpanRiskBasedAuthenticationChromeOs": [ { "platforms": [ @@ -2888,45 +2630,6 @@ ] } ], - "AutofillEnableSupportForParsingWithSharedLabels": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableSupportForParsingWithSharedLabels" - ] - } - ] - } - ], - "AutofillEnableVcn3dsAuthentication": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableVcn3dsAuthentication" - ] - } - ] - } - ], "AutofillEnableWalletBranding": [ { "platforms": [ @@ -2968,6 +2671,26 @@ ] } ], + "AutofillFilterPlaceholderValuesOnImport": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillFilterPlaceholderValuesOnImport" + ] + } + ] + } + ], "AutofillFixCivilStateMisclassificationForESPT": [ { "platforms": [ @@ -3010,6 +2733,27 @@ ] } ], + "AutofillFixIsAutofilled": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillFixIsAutofilled" + ] + } + ] + } + ], "AutofillFixRewriterRules": [ { "platforms": [ @@ -3051,27 +2795,6 @@ ] } ], - "AutofillI18nINAddressModel": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillUseINAddressModel" - ] - } - ] - } - ], "AutofillImproveAddressFieldSwapping": [ { "platforms": [ @@ -3092,7 +2815,7 @@ ] } ], - "AutofillImprovePhoneFieldParser": [ + "AutofillImprovePhoneNumberDetection": [ { "platforms": [ "android", @@ -3107,7 +2830,11 @@ { "name": "Enabled", "enable_features": [ - "AutofillImprovePhoneFieldParser" + "AutofillImprovePhoneFieldParser", + "AutofillImprovePhoneNumberRationalization", + "AutofillNewAugmentedPhoneCountryCodeRegex", + "AutofillNewRegexForPhoneCountryCode", + "AutofillPreferPhoneCountryCodeTypeOverCountryHtmlType" ] } ] @@ -3134,6 +2861,26 @@ ] } ], + "AutofillIntroduceGlobalEmptyValueRewriterRules": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillIntroduceGlobalEmptyValueRewriterRules" + ] + } + ] + } + ], "AutofillModelPredictions": [ { "platforms": [ @@ -3178,27 +2925,6 @@ ] } ], - "AutofillNewRegexForPhoneCountryCode": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillNewRegexForPhoneCountryCode" - ] - } - ] - } - ], "AutofillOptimizeCacheUpdates": [ { "platforms": [ @@ -3220,11 +2946,10 @@ ] } ], - "AutofillPageLanguageDetection": [ + "AutofillOptimizeIsNormalizedNameVariantOf": [ { "platforms": [ "android", - "android_webview", "chromeos", "ios", "linux", @@ -3235,7 +2960,7 @@ { "name": "Enabled", "enable_features": [ - "AutofillPageLanguageDetection" + "AutofillOptimizeIsNormalizedNameVariantOf" ] } ] @@ -3283,16 +3008,19 @@ ] } ], - "AutofillPaymentsSheetV2Ios": [ + "AutofillPopupCheckHtmlFormPopupOverlap": [ { "platforms": [ - "ios" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AutofillPaymentsSheetV2Ios" + "AutofillPopupCheckHtmlFormPopupOverlap" ] } ] @@ -3316,44 +3044,6 @@ ] } ], - "AutofillPreferBuyNowPayLaterBlocklists": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillPreferBuyNowPayLaterBlocklists" - ] - } - ] - } - ], - "AutofillPrioritizeSaveCardOverMandatoryReauth": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillPrioritizeSaveCardOverMandatoryReauth" - ] - } - ] - } - ], "AutofillReintroduceHybridPasskeyDropdownItem": [ { "platforms": [ @@ -3591,6 +3281,26 @@ ] } ], + "AutofillTrackSelectFieldEdits": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillTrackSelectFieldEdits" + ] + } + ] + } + ], "AutofillUKMExperimentalFields": [ { "platforms": [ @@ -3655,29 +3365,6 @@ ] } ], - "AutofillVcnEnrollStrikeExpiryTime": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "autofill_vcn_strike_expiry_time_days": "180" - }, - "enable_features": [ - "AutofillVcnEnrollStrikeExpiryTime" - ] - } - ] - } - ], "AutofillYourSavedInfoHatsSurveysContactInfo": [ { "platforms": [ @@ -3847,24 +3534,6 @@ ] } ], - "AutomaticJsOptimizer": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BlockV8OptimizerOnUnfamiliarSitesSetting" - ] - } - ] - } - ], "AutomaticUsbDetach": [ { "platforms": [ @@ -4016,22 +3685,6 @@ ] } ], - "BGPriorityWorkerThreadsWithPISupport": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledBoth_20250410", - "enable_features": [ - "UseBackgroundPriorityForWorkerThreads", - "UsePriorityInheritanceMutex" - ] - } - ] - } - ], "BackForwardCacheMemoryControls": [ { "platforms": [ @@ -4131,26 +3784,6 @@ ] } ], - "BackForwardCacheNonStickyDoubleFix": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Holdback", - "disable_features": [ - "BackForwardCacheNonStickyDoubleFix" - ] - } - ] - } - ], "BackForwardCacheNotRestoredReasons": [ { "platforms": [ @@ -4173,18 +3806,23 @@ ] } ], - "BackForwardTransitionsSharedImage": [ + "BackForwardCachePauseMicrotasks": [ { "platforms": [ - "android" + "android", + "android_webview", + "chromeos", + "fuchsia", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "BackForwardTransitionsCrossDocSharedImage", - "BackForwardTransitionsNativePageSharedImage", - "BackForwardTransitionsSameDocSharedImage" + "BackForwardCachePauseMicrotasks" ] } ] @@ -4216,6 +3854,24 @@ ] } ], + "BackToOpener": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BackToOpener" + ] + } + ] + } + ], "BackgroundResourceFetch": [ { "platforms": [ @@ -4288,8 +3944,7 @@ "android", "chromeos", "linux", - "android_webview", - "android_weblayer" + "android_webview" ], "experiments": [ { @@ -4361,8 +4016,6 @@ "BeforeFirstRunDesktopRefreshSurvey": [ { "platforms": [ - "linux", - "mac", "windows" ], "experiments": [ @@ -4380,21 +4033,6 @@ ] } ], - "BeginCursorAtPointTentativeFix": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BeginCursorAtPointTentativeFix" - ] - } - ] - } - ], "BiometricAuthPwdFillAndroid": [ { "platforms": [ @@ -4429,7 +4067,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "linux", @@ -4579,21 +4216,6 @@ ] } ], - "BocaRedirectStudentAudioToKiosk": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BocaRedirectStudentAudioToKiosk" - ] - } - ] - } - ], "BocaScreenSharingStudent": [ { "platforms": [ @@ -4641,6 +4263,21 @@ ] } ], + "BookmarksMigrateUiChanges": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BookmarksMigrateUiChanges" + ] + } + ] + } + ], "BookmarksTreeView": [ { "platforms": [ @@ -4659,26 +4296,6 @@ ] } ], - "BookmarksUseBinaryTreeInTitledUrlIndex": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BookmarksUseBinaryTreeInTitledUrlIndex" - ] - } - ] - } - ], "BoostClosingTabs": [ { "platforms": [ @@ -4696,24 +4313,6 @@ ] } ], - "BoostThreadsPriority": [ - { - "platforms": [ - "windows", - "chromeos", - "linux", - "mac" - ], - "experiments": [ - { - "name": "IOThreadInteractive", - "enable_features": [ - "IOThreadInteractiveThreadType" - ] - } - ] - } - ], "BorealisProvision": [ { "platforms": [ @@ -4744,27 +4343,6 @@ ] } ], - "BoundaryEventDispatchTracksNodeRemoval": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BoundaryEventDispatchTracksNodeRemoval" - ] - } - ] - } - ], "BrowserControlsEarlyResize": [ { "platforms": [ @@ -4926,24 +4504,6 @@ ] } ], - "BrowsingHistoryActorIntegrationM2": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BrowsingHistoryActorIntegrationM2" - ] - } - ] - } - ], "BrowsingHistoryActorIntegrationM3": [ { "platforms": [ @@ -4981,6 +4541,21 @@ ] } ], + "BusyLoopLessWhenCompositorGesture": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_20260302", + "enable_features": [ + "BusyLoopLessWhenCompositorGesture" + ] + } + ] + } + ], "BusyLoopOnMainThread": [ { "platforms": [ @@ -4999,6 +4574,24 @@ ] } ], + "BypassRequestForbiddenHeadersCheck": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BypassRequestForbiddenHeadersCheck" + ] + } + ] + } + ], "CADisplayLinkInBrowser": [ { "platforms": [ @@ -5014,21 +4607,6 @@ ] } ], - "CCTEphemeralMediaViewerExperiment": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CCTEphemeralMediaViewerExperiment" - ] - } - ] - } - ], "CCTGoogleBottomBar": [ { "platforms": [ @@ -5074,21 +4652,6 @@ ] } ], - "CCTToolbarRefactor": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CCTToolbarRefactor" - ] - } - ] - } - ], "CSSReadingFlow": [ { "platforms": [ @@ -5241,11 +4804,9 @@ ] } ], - "CanvasTextNg": [ + "CastStreamingExponentialVideoBitrateAlgorithm": [ { "platforms": [ - "android_webview", - "android", "chromeos", "linux", "mac", @@ -5254,8 +4815,15 @@ "experiments": [ { "name": "Enabled", + "params": { + "decrease_factor": "0.9", + "drop_threshold": "1", + "dynamic_window_multiplier": "0.0", + "increase_factor": "1.05", + "window_size": "30" + }, "enable_features": [ - "CanvasTextNg" + "CastStreamingExponentialVideoBitrateAlgorithm" ] } ] @@ -5369,258 +4937,6 @@ ] } ], - "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": [ @@ -6098,27 +5414,6 @@ ] } ], - "ChromeOSHoldingSpaceSuggestions": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "enable_features": [ - "HoldingSpaceSuggestions" - ] - }, - { - "name": "Enabled_Teamfood", - "enable_features": [ - "HoldingSpaceSuggestions" - ] - } - ] - } - ], "ChromeOSMaterialNextWaveOneWithTimeOfDayM117AndBeyond": [ { "platforms": [ @@ -6417,6 +5712,28 @@ ] } ], + "ChromnientNonBlockingPrivacyNotice": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "id": "4" + }, + "enable_features": [ + "LensOverlayEntrypointLabelAlt", + "LensOverlayNonBlockingPrivacyNotice" + ] + } + ] + } + ], "ChromnientReinvocationAffordance": [ { "platforms": [ @@ -6828,6 +6145,52 @@ ] } ], + "ClientSideDetectionNewObservers": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_0", + "params": { + "ClassificationDelay": "0.0" + }, + "enable_features": [ + "ClientSideDetectionNewObservers" + ] + }, + { + "name": "Enabled_0_5", + "params": { + "ClassificationDelay": "0.5" + }, + "enable_features": [ + "ClientSideDetectionNewObservers" + ] + } + ] + } + ], + "ClientSideDetectionOnDeviceModelLazyDownloadAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ClientSideDetectionOnDeviceModelLazyDownloadAndroid" + ] + } + ] + } + ], "ClientSideDetectionRetryLimit": [ { "platforms": [ @@ -6977,28 +6340,6 @@ ] } ], - "CoalesceSelectionchangeEvent": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CoalesceSelectionchangeEvent" - ] - } - ] - } - ], "Collections": [ { "platforms": [ @@ -7339,7 +6680,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -7408,6 +6748,27 @@ ] } ], + "CompressionDictionaryLimitEarlyMatching": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "fuchsia", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enable", + "enable_features": [ + "CompressionDictionaryLimitEarlyMatching" + ] + } + ] + } + ], "CompressionDictionaryPreload": [ { "platforms": [ @@ -7505,28 +6866,6 @@ ] } ], - "ConfigurableV8CodeCacheHotHours": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "cache_72h_20230904", - "params": { - "V8CodeCacheHotHours": "72" - }, - "enable_features": [ - "ConfigurableV8CodeCacheHotHours" - ] - } - ] - } - ], "ConnectionKeepAliveForHttp2": [ { "platforms": [ @@ -7565,6 +6904,21 @@ ] } ], + "ContentSchemeIsLocal": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ContentSchemeIsLocal" + ] + } + ] + } + ], "ContentVerifyJobUseJobVersionForHashing": [ { "platforms": [ @@ -7583,7 +6937,7 @@ ] } ], - "ContextualSearchBoxExpansion": [ + "ContextualCueingDynamicCues": [ { "platforms": [ "chromeos", @@ -7594,11 +6948,11 @@ "experiments": [ { "name": "Enabled", + "params": { + "UseDynamicCues": "true" + }, "enable_features": [ - "LensOverlayContextualSearchbox", - "LensOverlayEntrypointLabelAlt", - "LensOverlayNonBlockingPrivacyNotice", - "LensOverlayVisualSelectionUpdates" + "ContextualCueing" ] } ] @@ -7652,9 +7006,6 @@ "experiments": [ { "name": "Enabled", - "params": { - "ContextualTasksEntryPoint": "toolbar-revisit" - }, "enable_features": [ "ContextualTasks", "HappinessTrackingSurveysForDesktopNextPanel" @@ -7869,24 +7220,6 @@ ] } ], - "CrOSFederatedAutocorrectPhh": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "launch_stage": "prod" - }, - "enable_features": [ - "AutocorrectFederatedPhh" - ] - } - ] - } - ], "CrOSFederatedLauncherQueryPhhVersion2": [ { "platforms": [ @@ -8314,25 +7647,6 @@ ] } ], - "CreateURLLoaderPipeAsync": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CreateURLLoaderPipeAsync" - ] - } - ] - } - ], "CredentialManagementThirdPartyWebApiRequestForwarding": [ { "platforms": [ @@ -8348,6 +7662,24 @@ ] } ], + "CredentialManagementUnifiedUi": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CredentialManagementUnifiedUi" + ] + } + ] + } + ], "CreditCardInfobarDisplayLength": [ { "platforms": [ @@ -8366,21 +7698,6 @@ ] } ], - "CrosBatteryChargeLimit": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CrosBatteryChargeLimit" - ] - } - ] - } - ], "CrosBatterySaver": [ { "platforms": [ @@ -8431,22 +7748,6 @@ } ], "CrossDevicePrefTracker": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableCrossDevicePrefTracker" - ] - } - ] - }, { "platforms": [ "android" @@ -8456,7 +7757,8 @@ "name": "Enabled", "enable_features": [ "EnableCrossDevicePrefTracker", - "HomeModulePrefRefactor" + "HomeModulePrefRefactor", + "XplatSyncedSetup" ] } ] @@ -8522,6 +7824,27 @@ ] } ], + "CustomizeChromeExperiments": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "max_customize_chrome_auto_shown_count": "5", + "max_customize_chrome_auto_shown_session_count": "1" + }, + "enable_features": [ + "NtpCustomizeChromeAutoOpen" + ] + } + ] + } + ], "CustomizeChromeSidePanelExtensionsCard": [ { "platforms": [ @@ -8620,36 +7943,6 @@ ] } ], - "DTCAntivirusSignalEnabled": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DTCAntivirusSignalEnabled" - ] - } - ] - } - ], - "DTCKeyRotationUploadedBySharedAPIEnabled": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DTCKeyRotationUploadedBySharedAPIEnabled" - ] - } - ] - } - ], "DXGIWaitableSwapChain": [ { "platforms": [ @@ -8668,23 +7961,20 @@ ] } ], - "DecommitPooledPages": [ + "DataControlsDragEnforcement": [ { "platforms": [ "android", - "android_weblayer", - "android_webview", "chromeos", - "fuchsia", "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260223", "enable_features": [ - "DecommitPooledPages" + "DataControlsDragEnforcement" ] } ] @@ -8730,6 +8020,9 @@ "experiments": [ { "name": "Enabled", + "params": { + "prompt_surface": "bubble_dialog" + }, "enable_features": [ "DefaultBrowserFramework" ] @@ -8835,21 +8128,6 @@ ] } ], - "DeferConciergeStartup": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DeferConciergeStartup" - ] - } - ] - } - ], "DeferSpeculativeRFHCreation": [ { "platforms": [ @@ -9112,24 +8390,6 @@ ] } ], - "DesktopNtpMobilePromo": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_20241101", - "enable_features": [ - "NtpMobilePromo" - ] - } - ] - } - ], "DesktopNtpModules": [ { "platforms": [ @@ -9223,30 +8483,45 @@ ], "experiments": [ { - "name": "Enabled_Dev_Canary_Beta", + "name": "Enabled", "params": { "ModuleMinStalenessUpdateTimeInterval": "1d", - "ShortcutsMinStalenessUpdateTimeInterval": "1d", - "StaleModulesCountThreshold": "1", - "StaleShortcutsCountThreshold": "2" + "StaleModulesCountThreshold": "14" }, "enable_features": [ "NtpFeatureOptimizationDismissModulesRemoval", - "NtpFeatureOptimizationModuleRemoval", + "NtpFeatureOptimizationModuleRemoval" + ] + } + ] + } + ], + "DesktopNtpSimplificationShortcutsRemoval": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_Dev_Canary_Beta", + "params": { + "ShortcutsMinStalenessUpdateTimeInterval": "1d", + "StaleShortcutsCountThreshold": "2" + }, + "enable_features": [ "NtpFeatureOptimizationShortcutsRemoval" ] }, { "name": "Enabled_Stable", "params": { - "ModuleMinStalenessUpdateTimeInterval": "1d", "ShortcutsMinStalenessUpdateTimeInterval": "1d", - "StaleModulesCountThreshold": "14", "StaleShortcutsCountThreshold": "60" }, "enable_features": [ - "NtpFeatureOptimizationDismissModulesRemoval", - "NtpFeatureOptimizationModuleRemoval", "NtpFeatureOptimizationShortcutsRemoval" ] } @@ -9448,13 +8723,13 @@ { "name": "Enabled", "params": { - "Value": "l1_enabled" + "RequireOriginTrialTokens": "false", + "SchemaVersion": "4" }, "enable_features": [ "DeviceBoundSessions", "DeviceBoundSessionsFederatedRegistration", "DeviceBoundSessionsForRestrictedSites", - "DeviceBoundSessionsForRestrictedSitesExperimentId", "EnableChromeRefreshTokenBinding", "EnableOAuthMultiloginStandardCookiesBinding", "PersistDeviceBoundSessions", @@ -9473,12 +8748,8 @@ "experiments": [ { "name": "Enabled", - "params": { - "Value": "l2_enabled" - }, "enable_features": [ "DeviceBoundSessionsForRestrictedSites", - "DeviceBoundSessionsForRestrictedSitesExperimentId", "EnableOAuthMultiloginStandardCookiesBinding", "UseUnexportableKeyServiceInBrowserProcess" ] @@ -9486,27 +8757,6 @@ ] } ], - "DeviceBoundSessionsStandardLaunch": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled_20260130", - "params": { - "RequireOriginTrialTokens": "false", - "SchemaVersion": "3" - }, - "enable_features": [ - "DeviceBoundSessions", - "DeviceBoundSessionsFederatedRegistration", - "PersistDeviceBoundSessions" - ] - } - ] - } - ], "DexFixer": [ { "platforms": [ @@ -9661,22 +8911,6 @@ ] } ], - "DisableMemoryReclaimerInBackground": [ - { - "platforms": [ - "android", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DisableMemoryReclaimerInBackground" - ] - } - ] - } - ], "DisableNonYUVOverlaysFromExo": [ { "platforms": [ @@ -9714,37 +8948,6 @@ ] } ], - "DisableProgressBarAndroidAnimations": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AndroidPbDisablePulseAnimation", - "AndroidPbDisableSmoothAnimation" - ] - } - ] - } - ], - "DisableSystemBlur": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "DisableSystemBlur", - "enable_features": [ - "DisableSystemBlur" - ] - } - ] - } - ], "DisableUrgentPageDiscarding": [ { "platforms": [ @@ -9765,7 +8968,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "linux", @@ -9907,25 +9109,6 @@ ] } ], - "DnsOverHttpsQuad9Secure": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DohProviderQuad9Secure" - ] - } - ] - } - ], "DoNotEvictOnAXLocationChange": [ { "platforms": [ @@ -9948,6 +9131,26 @@ ] } ], + "DomStorageSqliteInMemory": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DomStorageSqliteInMemory" + ] + } + ] + } + ], "DownloadLater": [ { "platforms": [ @@ -10164,7 +9367,14 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnableADPFAsyncAndScrollNoRendererMain", + "enable_features": [ + "EnableADPFAsyncSetThreads", + "EnableADPFScrollNoRendererMain" + ] + }, + { + "name": "EnableADPFAsyncSetThreadsOnly", "enable_features": [ "EnableADPFAsyncSetThreads" ] @@ -10202,21 +9412,6 @@ ] } ], - "EnableADPFScrollNoRendererMain": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableADPFScrollNoRendererMain" - ] - } - ] - } - ], "EnableADPFSeparateRendererMainSession": [ { "platforms": [ @@ -10262,42 +9457,6 @@ ] } ], - "EnableAsyncUploadAfterVerdict": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "max_parallel_requests": "15" - }, - "enable_features": [ - "EnableAsyncUploadAfterVerdict" - ] - } - ] - } - ], - "EnableBEContextMenuConfiguration": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableBEContextMenuConfiguration" - ] - } - ] - } - ], "EnableBestEffortTaskInhibitingPolicy": [ { "platforms": [ @@ -10477,6 +9636,24 @@ ] } ], + "EnableEncryptedFileUpload": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableEncryptedFileUpload" + ] + } + ] + } + ], "EnableEncryptedMediaOcclusionTracking": [ { "platforms": [ @@ -10492,16 +9669,33 @@ ] } ], - "EnableFallbackFontsCrashReporting": [ + "EnableExtensionInstallPolicyFetching": [ { "platforms": [ + "linux", + "mac", "windows" ], "experiments": [ { - "name": "Enabled_20230404", + "name": "Enabled", "enable_features": [ - "EnableFallbackFontsCrashReporting" + "EnableExtensionInstallPolicyFetching" + ] + } + ] + } + ], + "EnableExtensionsForCorpDesktopAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_20260219", + "enable_features": [ + "EnableExtensionsForCorpDesktopAndroid" ] } ] @@ -10522,6 +9716,24 @@ ] } ], + "EnableForceDownloadToOneDrive": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableForceDownloadToOneDrive" + ] + } + ] + } + ], "EnableFullscreenToAnyScreenAndroid": [ { "platforms": [ @@ -10766,24 +9978,6 @@ ] } ], - "EnablePrintWatermark": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Disabled", - "enable_features": [ - "EnablePrintWatermark" - ] - } - ] - } - ], "EnableRootNsDnsProxy": [ { "platforms": [ @@ -10903,24 +10097,6 @@ ] } ], - "EndOfLifeIncentive": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "EnabledOffer_20230324", - "params": { - "incentive_type": "offer" - }, - "enable_features": [ - "EolIncentive" - ] - } - ] - } - ], "EnhancedFieldsForSecOps": [ { "platforms": [ @@ -10942,38 +10118,22 @@ ] } ], - "EnterpriseActiveUserDetection": [ + "EnterpriseConnectorEnableNewUploadCountLimit": [ { "platforms": [ "chromeos", - "linux", - "mac", - "windows", - "android", - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnterpriseActiveUserDetection" - ] - } - ] - } - ], - "EnterpriseBadgingForNtpFooter": [ - { - "platforms": [ "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Raise_to_20", + "params": { + "ParallelContentAnalysisRequestCountMax": "20" + }, "enable_features": [ - "EnterpriseBadgingForNtpFooter" + "EnableNewUploadCountLimit" ] } ] @@ -11124,7 +10284,7 @@ ] } ], - "ExtensionBrowserNamespaceAlternative": [ + "ExtensionBrowserNamespaceAndPolyfillSupport": [ { "platforms": [ "chromeos", @@ -11136,13 +10296,13 @@ { "name": "Enabled", "enable_features": [ - "ExtensionBrowserNamespaceAlternative" + "ExtensionBrowserNamespaceAndPolyfillSupport" ] }, { "name": "Disabled", "disable_features": [ - "ExtensionBrowserNamespaceAlternative" + "ExtensionBrowserNamespaceAndPolyfillSupport" ] } ] @@ -11464,7 +10624,6 @@ { "platforms": [ "android", - "android_weblayer", "linux", "mac", "windows" @@ -11671,24 +10830,6 @@ ] } ], - "FieldRankServerClassification": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "FieldRankServerClassification_Experiment_20250422" - } - ] - } - ], "FlingSchedulingImprovements": [ { "platforms": [ @@ -11810,6 +10951,33 @@ ] } ], + "FontDataServiceChromeOS": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Fontations_Enabled", + "params": { + "typeface": "Fontations" + }, + "enable_features": [ + "FontDataServiceChromeOS" + ] + }, + { + "name": "Freetype_Enabled", + "params": { + "typeface": "Freetype" + }, + "enable_features": [ + "FontDataServiceChromeOS" + ] + } + ] + } + ], "FontDataServiceLinux": [ { "platforms": [ @@ -11969,6 +11137,21 @@ ] } ], + "FullscreenVideoPictureInPicture": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "FullscreenVideoPictureInPicture" + ] + } + ] + } + ], "FusedLocationProviderTuning": [ { "platforms": [ @@ -12025,73 +11208,6 @@ ] } ], - "GMSCoreEmoji": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GMSCoreEmoji" - ] - } - ] - } - ], - "GamingPerksStudy": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "CounterfactualControl_20240805", - "params": { - "IPH_ScalableIphGaming_availability": ">=0", - "IPH_ScalableIphGaming_event_1": "name:ScalableIphGameWindowOpened;comparator:>0;window:365;storage:365", - "IPH_ScalableIphGaming_event_trigger": "name:IphScalableIphGamingEventTrigger;comparator:==0;window:365;storage:365", - "IPH_ScalableIphGaming_event_used": "name:IphScalableIphGamingEventUsed;comparator:any;window:365;storage:365", - "IPH_ScalableIphGaming_session_rate": "any", - "IPH_ScalableIphGaming_tracking_only": "true", - "IPH_ScalableIphGaming_x_CustomConditionTriggerEvent": "ScalableIphUnlocked", - "IPH_ScalableIphGaming_x_CustomUiType": "None", - "IPH_ScalableIphGaming_x_CustomVersionNumber": "1" - }, - "enable_features": [ - "IPH_ScalableIphGaming" - ] - }, - { - "name": "Notification_20240805", - "params": { - "IPH_ScalableIphGaming_availability": ">=0", - "IPH_ScalableIphGaming_event_1": "name:ScalableIphGameWindowOpened;comparator:>0;window:365;storage:365", - "IPH_ScalableIphGaming_event_trigger": "name:IphScalableIphGamingEventTrigger;comparator:==0;window:365;storage:365", - "IPH_ScalableIphGaming_event_used": "name:IphScalableIphGamingEventUsed;comparator:any;window:365;storage:365", - "IPH_ScalableIphGaming_session_rate": "any", - "IPH_ScalableIphGaming_x_CustomButtonActionType": "PerksMinecraftRealms2023", - "IPH_ScalableIphGaming_x_CustomConditionTriggerEvent": "ScalableIphUnlocked", - "IPH_ScalableIphGaming_x_CustomNotificationBodyText": "", - "IPH_ScalableIphGaming_x_CustomNotificationButtonText": "Get perk", - "IPH_ScalableIphGaming_x_CustomNotificationIcon": "Redeem", - "IPH_ScalableIphGaming_x_CustomNotificationId": "scalable_iph_gaming", - "IPH_ScalableIphGaming_x_CustomNotificationImageType": "Minecraft", - "IPH_ScalableIphGaming_x_CustomNotificationSummaryText": "None", - "IPH_ScalableIphGaming_x_CustomNotificationTitle": "Get 3 months of Minecraft Realms Plus at no cost on your Chromebook", - "IPH_ScalableIphGaming_x_CustomUiType": "Notification", - "IPH_ScalableIphGaming_x_CustomVersionNumber": "1" - }, - "enable_features": [ - "IPH_ScalableIphGaming" - ] - } - ] - } - ], "GeminiAntiscamProtectionForMetricsCollection": [ { "platforms": [ @@ -12108,7 +11224,8 @@ "GeminiAntiscamProtectionMinScamScoreLogPageContent": "0.5" }, "enable_features": [ - "GeminiAntiscamProtectionForMetricsCollection" + "GeminiAntiscamProtectionForMetricsCollection", + "GeminiAntiscamProtectionMqlsLogging" ] } ] @@ -12122,23 +11239,13 @@ "experiments": [ { "name": "Enabled", + "params": { + "GeminiCopresenceResponseReadyInterval": "7.0", + "GeminiCopresenceWithFullscreenDisabler": "true" + }, "enable_features": [ - "GeminiCopresence" - ] - } - ] - } - ], - "GeminiRefactoredFRE": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_GeminiRefactoredFRE", - "enable_features": [ - "GeminiRefactoredFRE" + "GeminiCopresence", + "GeminiResponseViewDynamicResizing" ] } ] @@ -12160,23 +11267,6 @@ ] } ], - "GlicActOnWebCapabilityForManagedTrials": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "enable_features": [ - "GlicActOnWebCapabilityForManagedTrials" - ] - } - ] - } - ], "GlicActorObservationDelayExcludeAdFrameLoading": [ { "platforms": [ @@ -12235,13 +11325,19 @@ "platforms": [ "linux", "mac", - "windows" + "windows", + "chromeos" ], "experiments": [ { "name": "Enabled", + "params": { + "magic-cursor-max-duration-ms": "300", + "magic-cursor-min-duration-ms": "50", + "magic-cursor-speed-px-per-ms": "1.5" + }, "enable_features": [ - "GlicActorUiOverlayMagicCursor" + "GlicActorUiMagicCursor" ] } ] @@ -12264,51 +11360,6 @@ ] } ], - "GlicButtonAltLabel": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "LabelA", - "params": { - "glic-button-alt-label-variant": "0" - }, - "enable_features": [ - "GlicButtonAltLabel" - ] - }, - { - "name": "LabelB", - "params": { - "glic-button-alt-label-variant": "1" - }, - "enable_features": [ - "GlicButtonAltLabel" - ] - }, - { - "name": "LabelC", - "params": { - "glic-button-alt-label-variant": "2" - }, - "enable_features": [ - "GlicButtonAltLabel" - ] - }, - { - "name": "Control", - "disable_features": [ - "GlicButtonAltLabel" - ] - } - ] - } - ], "GlicButtonPressedState": [ { "platforms": [ @@ -12337,6 +11388,21 @@ ] } ], + "GlicChromeStatusIcon": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicChromeStatusIcon" + ] + } + ] + } + ], "GlicClientResponsivenessCheckExtension": [ { "platforms": [ @@ -12356,17 +11422,22 @@ ] } ], - "GlicClosedCaptioning": [ + "GlicConfirmNavigationToNewOrigins": [ { "platforms": [ + "chromeos", + "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWithConfirmParam", + "params": { + "confirm_navigation_to_new_origins": "true" + }, "enable_features": [ - "GlicClosedCaptioning" + "GlicCrossOriginNavigationGating" ] } ] @@ -12389,6 +11460,23 @@ ] } ], + "GlicEligibilitySeparateAccountCapability": [ + { + "platforms": [ + "chromeos", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicEligibilitySeparateAccountCapability" + ] + } + ] + } + ], "GlicEnableMultiInstanceBasedOnTier": [ { "platforms": [ @@ -12411,12 +11499,9 @@ ] } ], - "GlicEntrypointVariations": [ + "GlicEntrypointVariationsChromeOS": [ { "platforms": [ - "linux", - "mac", - "windows", "chromeos" ], "experiments": [ @@ -12553,6 +11638,24 @@ ] } ], + "GlicPdfSummarizeButton": [ + { + "platforms": [ + "linux", + "mac", + "windows", + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PdfGlicSummarize" + ] + } + ] + } + ], "GlicPersonalContext": [ { "platforms": [ @@ -12570,6 +11673,24 @@ ] } ], + "GlicRecordNavigationConfirmationMetrics": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicRecordNavigationConfirmationRequestMetrics" + ] + } + ] + } + ], "GlicResetPanelSizeAndLocationOnOpen": [ { "platforms": [ @@ -12621,6 +11742,22 @@ ] } ], + "GlicStatusTrayIcon_ChromeOS_Dogfood": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled_Dogfood", + "enable_features": [ + "GlicShowStatusTrayIcon", + "SupportCustomIconsInStatusArea" + ] + } + ] + } + ], "GlicTeamfoodAllowlistedChromeOS": [ { "platforms": [ @@ -12630,7 +11767,6 @@ { "name": "Enabled", "enable_features": [ - "ContextualCueing", "Glic", "GlicRollout", "GlicUseNonClient", @@ -12672,7 +11808,8 @@ "arm": "1" }, "enable_features": [ - "GlicTrustFirstOnboarding" + "GlicTrustFirstOnboarding", + "IPH_GlicTrustFirstOnboardingShortcutSnoozePromo" ] }, { @@ -12681,47 +11818,13 @@ "arm": "2" }, "enable_features": [ - "GlicTrustFirstOnboarding" - ] - } - ] - } - ], - "GlicTrustFirstOnboardingShortcutSnoozePromo": [ - { - "platforms": [ - "chromeos", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ + "GlicTrustFirstOnboarding", "IPH_GlicTrustFirstOnboardingShortcutSnoozePromo" ] } ] } ], - "GlicUseMainPartitionForUnifiedFre": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GlicUseMainPartitionForUnifiedFre" - ] - } - ] - } - ], "GlicUserStatusCheckDogfood": [ { "platforms": [ @@ -12760,6 +11863,24 @@ ] } ], + "GlicWebActuationSettingsToggle": [ + { + "platforms": [ + "linux", + "mac", + "windows", + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicWebActuationSettingsToggle" + ] + } + ] + } + ], "GlicZeroStateSuggestionsDogfood": [ { "platforms": [ @@ -12792,6 +11913,24 @@ ] } ], + "GoogleChromeScheme": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GoogleChromeScheme" + ] + } + ] + } + ], "GoogleLensDesktopImageFormatOptimizations": [ { "platforms": [ @@ -13066,37 +12205,6 @@ ] } ], - "HandleNonDamagingInputsInScrollJankV4Metric": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Experiment_NewBehaviorCountAllScrolls", - "params": { - "histogram_emission_policy": "emit_for_all_scrolls" - }, - "enable_features": [ - "HandleNonDamagingInputsInScrollJankV4Metric" - ] - }, - { - "name": "Experiment_NewBehaviorCountDamagingScrolls", - "params": { - "histogram_emission_policy": "emit_for_damaging_scrolls" - }, - "enable_features": [ - "HandleNonDamagingInputsInScrollJankV4Metric" - ] - } - ] - } - ], "HangoutsExtensionV3": [ { "platforms": [ @@ -13475,7 +12583,7 @@ ] } ], - "HappyEyeballsV3": [ + "HappyEyeballsV2": [ { "platforms": [ "android", @@ -13486,12 +12594,9 @@ ], "experiments": [ { - "name": "EnabledFirstJob", - "params": { - "tcp_based_attempt_delay_behavior": "first_job" - }, + "name": "Enabled", "enable_features": [ - "HappyEyeballsV3" + "HappyEyeballsV2" ] } ] @@ -13607,71 +12712,6 @@ ] } ], - "HeadlessTabModel": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "HeadlessTabModel" - ] - } - ] - } - ], - "HeapProfilerBloomFilter": [ - { - "platforms": [ - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "//0": "Gathers metrics on the Heap Profiler, which has known overhead that affects benchmarks.", - "//1": "HeapProfilerReporting is an existing feature that forces the profiler on/off.", - "//2": "UseLockFreeBloomFilter is a new feature that modifies the profiler behaviour, so needs it to be on.", - "//3": "HeapProfilerReporting will never go beyond 1% stable, so the control group should come first.", - "name": "DisabledControl_20251203", - "disable_features": [ - "HeapProfilerReporting", - "UseLockFreeBloomFilter" - ] - }, - { - "name": "EnabledBloomFilter_20251203", - "params": { - "nonstable-probability": "1.0", - "stable-probability": "1.0" - }, - "enable_features": [ - "HeapProfilerReporting", - "UseLockFreeBloomFilter" - ], - "disable_benchmarking": "true" - }, - { - "name": "EnabledNoBloomFilter_20251203", - "params": { - "nonstable-probability": "1.0", - "stable-probability": "1.0" - }, - "enable_features": [ - "HeapProfilerReporting" - ], - "disable_features": [ - "UseLockFreeBloomFilter" - ], - "disable_benchmarking": "true" - } - ] - } - ], "HeatmapPalmDetectionStudy": [ { "platforms": [ @@ -13705,7 +12745,7 @@ ] } ], - "HeliosFullChatHistory": [ + "HeliosDynamicSettings": [ { "platforms": [ "ios" @@ -13714,23 +12754,7 @@ { "name": "Enabled", "enable_features": [ - "GeminiFullChatHistory", - "GeminiLoadingStateRedesign" - ] - } - ] - } - ], - "HeliosImmediateOverlay": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GeminiImmediateOverlay" + "GeminiDynamicSettings" ] } ] @@ -13808,42 +12832,6 @@ ] } ], - "HistoryOptInEducationalTip": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledWithTurnOn", - "params": { - "history_opt_in_educational_tip_param": "0" - }, - "enable_features": [ - "HistoryOptInEducationalTip" - ] - }, - { - "name": "EnabledWithLetsGo", - "params": { - "history_opt_in_educational_tip_param": "1" - }, - "enable_features": [ - "HistoryOptInEducationalTip" - ] - }, - { - "name": "EnabledWithContinue", - "params": { - "history_opt_in_educational_tip_param": "2" - }, - "enable_features": [ - "HistoryOptInEducationalTip" - ] - } - ] - } - ], "HistoryQueryOnlyLocalFirst": [ { "platforms": [ @@ -13913,6 +12901,9 @@ "experiments": [ { "name": "Enabled", + "params": { + "check_disk": "true" + }, "enable_features": [ "HttpCacheInitializeDiskCacheBackendEarly" ] @@ -13923,10 +12914,7 @@ "HttpCacheNoVarySearch": [ { "platforms": [ - "android", - "android_weblayer", - "android_webview", - "fuchsia" + "android_webview" ], "experiments": [ { @@ -13938,36 +12926,12 @@ "DsePreload2", "PrefetchPrerenderIntegration" ] - }, - { - "name": "Enabled_NVS_Omnibox_Prefetch", - "enable_features": [ - "HttpCacheNoVarySearch", - "SearchPrefetchWithNoVarySearchDiskCache" - ], - "disable_features": [ - "DsePreload2", - "PrefetchPrerenderIntegration" - ] - }, - { - "name": "Enabled_DsePreload2", - "params": { - "kDsePreload2UsePreloadServingMetrics": "true" - }, - "enable_features": [ - "DsePreload2", - "HttpCacheNoVarySearch", - "PrefetchPrerenderIntegration" - ], - "disable_features": [ - "SearchPrefetchWithNoVarySearchDiskCache" - ] } ] }, { "platforms": [ + "android", "chromeos", "linux", "mac", @@ -13992,7 +12956,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -14104,21 +13067,6 @@ ] } ], - "IOSBackgroundPasteboardAccess": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_CanaryDev", - "enable_features": [ - "OnlyAccessClipboardAsync" - ] - } - ] - } - ], "IOSBestOfAppFRE": [ { "platforms": [ @@ -14198,6 +13146,24 @@ ] } ], + "IOSContextMenuCrashConfig": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableBEContextMenuConfiguration" + ], + "disable_features": [ + "EnableContextMenuTimeout" + ] + } + ] + } + ], "IOSCustomFileUploadMenu": [ { "platforms": [ @@ -14228,33 +13194,6 @@ ] } ], - "IOSDefaultBrowserPromoMagicStackCard": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_TapToDeviceSettings", - "params": { - "DefaultBrowserMagicStackIosVariationType": "1" - }, - "enable_features": [ - "DefaultBrowserMagicStackIos" - ] - }, - { - "name": "Enabled_TapToInAppSettings", - "params": { - "DefaultBrowserMagicStackIosVariationType": "2" - }, - "enable_features": [ - "DefaultBrowserMagicStackIos" - ] - } - ] - } - ], "IOSDefaultBrowserPromoPropensityStudy": [ { "platforms": [ @@ -14363,6 +13302,21 @@ ] } ], + "IOSDockingPromoV2": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IOSDockingPromoV2" + ] + } + ] + } + ], "IOSDownloadAutoDeletionFeatureEnabled": [ { "platforms": [ @@ -14393,36 +13347,6 @@ ] } ], - "IOSDownloadSanitizeFilename": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSDownloadSanitizeFilename" - ] - } - ] - } - ], - "IOSEnablePasswordManagerTrustedVaultWidget": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSEnablePasswordManagerTrustedVaultWidget" - ] - } - ] - } - ], "IOSExpandedSetupList": [ { "platforms": [ @@ -14513,21 +13437,6 @@ ] } ], - "IOSFullscreenImprovement": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "FullscreenImprovement" - ] - } - ] - } - ], "IOSFullscreenScrollThreshold": [ { "platforms": [ @@ -14602,25 +13511,7 @@ "name": "Enabled", "enable_features": [ "AIHubNewBadge", - "GeminiCrossTab", - "GeminiForManagedAccounts", - "PageActionMenu", - "PageContextAnchorTags" - ] - } - ] - } - ], - "IOSHomeMemoryImprovements": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "HomeMemoryImprovements" + "PageActionMenu" ] } ] @@ -14710,21 +13601,6 @@ ] } ], - "IOSLensFetchSrp": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LensVsintParamEnabled" - ] - } - ] - } - ], "IOSLensGestureTextSelectionDisabled": [ { "platforms": [ @@ -14789,16 +13665,16 @@ ] } ], - "IOSManageAccountStorage": [ + "IOSMagicStackRemoteTabKillSwitch": [ { "platforms": [ "ios" ], "experiments": [ { - "name": "Enabled_20250328", + "name": "Enabled", "enable_features": [ - "IOSManageAccountStorage" + "IOSRemoteTabResumptionKillSwitch" ] } ] @@ -14834,21 +13710,6 @@ ] } ], - "IOSMiniMapUniversalLink": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSMiniMapUniversalLink" - ] - } - ] - } - ], "IOSMostVisitedTilesCustomization": [ { "platforms": [ @@ -14894,39 +13755,6 @@ ] } ], - "IOSOmniboxAimShortcut": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled1Char", - "params": { - "MinimumTypedCharactersToInvokeAimShortcut": "1" - }, - "enable_features": [ - "OmniboxAimShortcutTypedState" - ] - } - ] - } - ], - "IOSOneTapMiniMapRemoveSectionsBreaks": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSOneTapMiniMapRemoveSectionsBreaks" - ] - } - ] - } - ], "IOSOneTapMiniMapRestrictions": [ { "platforms": [ @@ -15046,28 +13874,6 @@ ] } ], - "IOSPersistTabContext": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "data_extracted": "0", - "extraction_timing": "0", - "storage_implementation": "1", - "ttl_days": "7" - }, - "enable_features": [ - "PageContentCache", - "PersistTabContext" - ] - } - ] - } - ], "IOSProactivePasswordGenerationBottomSheet": [ { "platforms": [ @@ -15114,21 +13920,6 @@ ] } ], - "IOSSaveToPhotosImprovements": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SaveToPhotosImprovements" - ] - } - ] - } - ], "IOSScopedCriticalActionSkipOnShutdown": [ { "platforms": [ @@ -15270,6 +14061,21 @@ ] } ], + "IOSTabGroupColorOnSurface": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled_20260211", + "enable_features": [ + "TabGroupColorOnSurface" + ] + } + ] + } + ], "IOSTabGroupEntryPoints": [ { "platforms": [ @@ -15315,24 +14121,6 @@ ] } ], - "IOSTabResumptionThumbnails": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "tr-images-type": "thumbnails" - }, - "enable_features": [ - "TabResumptionImages" - ] - } - ] - } - ], "IOSTipsNotificationsAlternativeStrings": [ { "platforms": [ @@ -15366,6 +14154,21 @@ ] } ], + "IOSUndoAutofill": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillUndoIos" + ] + } + ] + } + ], "IOSUpdateFirstRunSequence": [ { "platforms": [ @@ -15528,7 +14331,8 @@ "enable_features": [ "ImmersiveReadAnything", "ReadAnythingImagesViaAlgorithm", - "ReadAnythingWithReadability" + "ReadAnythingWithReadability", + "ReadAnythingWithReadabilityAllowLinks" ] } ] @@ -15591,6 +14395,15 @@ "enable_features": [ "TryQuicByDefault" ] + }, + { + "name": "EnabledWithNOIP", + "params": { + "quic_options": "NOIP" + }, + "enable_features": [ + "TryQuicByDefault" + ] } ] } @@ -15599,7 +14412,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -15760,6 +14572,16 @@ "name": "InputOnVizEnabled", "enable_features": [ "InputOnViz" + ], + "disable_features": [ + "InputVizardSpeculativeTransfer" + ] + }, + { + "name": "InputOnVizEnabled_SpeculativeTransfer", + "enable_features": [ + "InputOnViz", + "InputVizardSpeculativeTransfer" ] } ] @@ -15884,7 +14706,7 @@ ] } ], - "JavalessRenderers": [ + "JavalessRendererExperimentOn": [ { "platforms": [ "android" @@ -15892,8 +14714,11 @@ "experiments": [ { "name": "Enabled", + "params": { + "JavalessRendererEnable": "true" + }, "enable_features": [ - "JavalessRenderers" + "JavalessRendererExperimentOn" ] } ] @@ -15903,7 +14728,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -16159,6 +14983,28 @@ ] } ], + "Keychain2026CohortRollout": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_20260210", + "params": { + "cert_xml": "https://www.gstatic.com/cryptauthvault/v0/10020.cert.xml", + "sig_xml": "https://www.gstatic.com/cryptauthvault/v0/10020.cert.sig.xml" + }, + "enable_features": [ + "WebAuthenticationEnclaveTrustedVaultCohort" + ] + } + ] + } + ], "KioskHeartbeatsViaERP": [ { "platforms": [ @@ -16304,21 +15150,6 @@ ] } ], - "LaunchCauseScreenOffFix": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LaunchCauseScreenOffFix" - ] - } - ] - } - ], "LaunchOnStartup": [ { "platforms": [ @@ -16328,8 +15159,8 @@ { "name": "Enabled_Foreground_OptOut", "params": { - "mode": "foreground", - "trial_group": "opt_out" + "default_preference": "enabled", + "mode": "foreground" }, "enable_features": [ "LaunchOnStartup" @@ -16338,8 +15169,8 @@ { "name": "Enabled_Foreground_OptIn", "params": { - "mode": "foreground", - "trial_group": "opt_in" + "default_preference": "disabled", + "mode": "foreground" }, "enable_features": [ "LaunchOnStartup" @@ -16580,21 +15411,6 @@ ] } ], - "LobsterQueryRewrittenDogfood": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "enable_features": [ - "LobsterUseRewrittenQuery" - ] - } - ] - } - ], "LocalNetworkAccessChecks": [ { "platforms": [ @@ -16811,21 +15627,6 @@ ] } ], - "MacICloudKeychainRecoveryFactor": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableICloudKeychainRecoveryFactor" - ] - } - ] - } - ], "MainIdleBypassSchedulerExperiment": [ { "platforms": [ @@ -16881,21 +15682,6 @@ ] } ], - "MakeAccountsAvailableInIdentityManager": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MakeAccountsAvailableInIdentityManager" - ] - } - ] - } - ], "MaliciousApkDownloadCheck": [ { "platforms": [ @@ -17032,8 +15818,21 @@ "android" ], "experiments": [ + { + "name": "EnabledWithSharingAndEnhancedAudioResponsiveness", + "params": { + "sharing": "true" + }, + "enable_features": [ + "EnableAudioMonitoringOnAndroid", + "MediaIndicatorsAndroid" + ] + }, { "name": "EnabledWithEnhancedAudioResponsiveness", + "params": { + "sharing": "false" + }, "enable_features": [ "EnableAudioMonitoringOnAndroid", "MediaIndicatorsAndroid" @@ -17041,6 +15840,9 @@ }, { "name": "Enabled", + "params": { + "sharing": "false" + }, "enable_features": [ "MediaIndicatorsAndroid" ], @@ -17100,7 +15902,6 @@ "android", "android_webview", "chromeos", - "ios", "linux", "mac", "windows" @@ -17139,7 +15940,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -17193,62 +15993,29 @@ ] } ], - "MetricsLogJobSchedulerUpload": [ + "MetricsDataQuality": [ { "platforms": [ "android" ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "MetricsLogJobSchedulerUpload" - ] - } - ] - } - ], - "MetricsLogTrimming": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", + "name": "TrimmingAndSchedulerEnabled_20260220", + "params": { + "initial_log_count_trim_threshold": "40", + "log_bytes_trim_threshold": "614400", + "max_initial_log_size_bytes": "0", + "max_ongoing_log_size_bytes": "204800", + "ongoing_log_count_trim_threshold": "16" + }, "enable_features": [ + "MetricsLogJobSchedulerUpload", "MetricsLogTrimming" ] } ] } ], - "MetricsRenderFrameObserverImprovement": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MetricsRenderFrameObserverImprovement" - ] - } - ] - } - ], "MigrateAccountManagerDelegate": [ { "platforms": [ @@ -17332,22 +16099,7 @@ ] } ], - "MiniOriginBar": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MiniOriginBar" - ] - } - ] - } - ], - "MobilePromoOnDesktopWithQRCode": [ + "MigrateSyncingUserToSignedInDesktop": [ { "platforms": [ "linux", @@ -17358,28 +16110,51 @@ { "name": "Enabled", "enable_features": [ - "MobilePromoOnDesktopWithQRCode" + "MigrateSyncingUserToSignedIn" ] } ] } ], - "MobilePromoOnDesktopWithReminder": [ + "MobilePromoOnDesktop": [ { "platforms": [ - "ios", - "linux", - "mac", - "windows" + "ios" ], "experiments": [ { "name": "Enabled", + "params": { + "mobile_promo_on_desktop_notification": "true" + }, "enable_features": [ "MobilePromoOnDesktopWithReminder" ] } ] + }, + { + "platforms": [ + "linux", + "mac", + "windows", + "chromeos" + ], + "experiments": [ + { + "name": "Enabled_ESB", + "params": { + "mobile_promo_on_desktop_promo_type": "2" + }, + "enable_features": [ + "EnableCrossDevicePrefTracker", + "MobilePromoOnDesktopWithReminder" + ], + "disable_features": [ + "MobilePromoOnDesktopWithQRCode" + ] + } + ] } ], "ModelBasedPageClassification": [ @@ -17600,36 +16375,6 @@ ] } ], - "NearbyBleV2GattServer": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableNearbyBleV2GattServer" - ] - } - ] - } - ], - "NearbyMdns": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableNearbyMdns" - ] - } - ] - } - ], "NearbyShareNameEnabled": [ { "platforms": [ @@ -17698,6 +16443,29 @@ ] } ], + "NetworkQualityEstimatorAsyncNotifyHeadersReceived": [ + { + "platforms": [ + "android_webview", + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Experiment", + "params": { + "defer_until_next_step": "true" + }, + "enable_features": [ + "NetworkQualityEstimatorAsyncNotifyHeadersReceived" + ] + } + ] + } + ], "NetworkQualityEstimatorParameterTuning": [ { "platforms": [ @@ -17737,6 +16505,7 @@ { "name": "Enabled", "enable_features": [ + "DrainSpdySessionSynchronouslyOnRemoteEndpointDisconnect", "NetworkServicePerPriorityTaskQueues" ] } @@ -17800,6 +16569,24 @@ ] } ], + "NetworkServiceThreadIncreasedPriority": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "WhileLoading_20260309", + "enable_features": [ + "NetworkServiceIncreasedPriorityWhileLoading" + ], + "disable_features": [ + "NetworkServiceIncreasedPriorityAlways" + ] + } + ] + } + ], "NeuralPalmRejectionModelForRedrix": [ { "platforms": [ @@ -17911,6 +16698,27 @@ ] } ], + "NoOpParentalControlsV2": [ + { + "platforms": [ + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SupervisedUserEmitLogRecordSeparately", + "SupervisedUserMergeDeviceParentalControlsAndFamilyLinkPrefs", + "SupervisedUserUseUrlFilteringService" + ] + } + ] + } + ], "NoPasswordSuggestionFiltering": [ { "platforms": [ @@ -17960,9 +16768,11 @@ ] } ], - "NoSynchronizedScrolling": [ + "NoSequenceForLevelDBCleanupTasks": [ { "platforms": [ + "android_webview", + "android", "chromeos", "linux", "mac", @@ -17970,9 +16780,9 @@ ], "experiments": [ { - "name": "Disabled", - "disable_features": [ - "SynchronizedScrolling" + "name": "Enabled", + "enable_features": [ + "NoSequenceForLevelDBCleanupTasks" ] } ] @@ -18059,6 +16869,21 @@ ] } ], + "NotificationTrampolineNoNewTask": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "NotificationTrampolineNoNewTask" + ] + } + ] + } + ], "NotificationWidthIncrease": [ { "platforms": [ @@ -18134,23 +16959,6 @@ ] } ], - "NtpCustomizeChromeAutoOpen": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Control", - "disable_features": [ - "NtpCustomizeChromeAutoOpen" - ] - } - ] - } - ], "NtpMicrosoftFilesCard": [ { "platforms": [ @@ -18215,25 +17023,6 @@ ] } ], - "OAuthMultiloginCookiesBinding": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "enforced": "true" - }, - "enable_features": [ - "EnableOAuthMultiloginCookiesBinding", - "EnableOAuthMultiloginCookiesBindingServerExperiment" - ] - } - ] - } - ], "OcclusionCullingQuadSplitLimit": [ { "platforms": [ @@ -18309,7 +17098,7 @@ ], "experiments": [ { - "name": "Enabled", + "name": "MostlyLaunched", "enable_features": [ "OfferPinToTaskbarInFirstRunExperience" ] @@ -18340,7 +17129,7 @@ ], "experiments": [ { - "name": "Enabled", + "name": "MostlyLaunched", "enable_features": [ "OfferPinToTaskbarInfoBar" ] @@ -18704,24 +17493,6 @@ ] } ], - "OnBeginFrameThrottleVideoDesktop": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OnBeginFrameThrottleVideo" - ] - } - ] - } - ], "OnDeviceModelBackgroundDownload": [ { "platforms": [ @@ -18744,20 +17515,18 @@ ] } ], - "OnDeviceNotificationContentDetectionModelv2": [ + "OnDeviceModelLitertLmBackend": [ { "platforms": [ - "android" + "windows", + "mac", + "linux" ], "experiments": [ { - "name": "EnabledSyntheticOnly", - "params": { - "ShowWarningsForSuspiciousNotificationsScoreThreshold": "90", - "ShowWarningsForSuspiciousNotificationsShouldSwapButtons": "false" - }, + "name": "Enabled", "enable_features": [ - "ShowWarningsForSuspiciousNotifications" + "OnDeviceModelLitertLmBackend" ] } ] @@ -18796,21 +17565,6 @@ ] } ], - "OneGroupPerRenderer": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OneGroupPerRenderer" - ] - } - ] - } - ], "OngoingProcesses": [ { "platforms": [ @@ -19085,21 +17839,6 @@ ] } ], - "OzonePlatformAutoExternal": [ - { - "platforms": [ - "linux" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OverrideDefaultOzonePlatformHintToAuto" - ] - } - ] - } - ], "PWAIconAndTitleInNativeNotificationsWin": [ { "platforms": [ @@ -19269,7 +18008,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -19303,9 +18041,9 @@ ], "experiments": [ { - "name": "enabled_with_strict_check_20251212", + "name": "enabled_without_strict_check_20260227", "params": { - "strict-free-size-check": "true" + "strict-free-size-check": "false" }, "enable_features": [ "PartitionAllocFreeWithSize" @@ -19322,7 +18060,10 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled2048_20260302", + "params": { + "spin_count": "2048" + }, "enable_features": [ "PartitionAllocLockTuneSpin" ] @@ -19439,7 +18180,6 @@ "PartitionAllocParameterTuning": [ { "platforms": [ - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -19474,6 +18214,23 @@ ] } ], + "PartitionAllocParameterTuningWin": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BlinkUseLargeEmptySlotSpanRingForBufferRoot", + "PartitionAllocAdjustSizeWhenInForeground", + "PartitionAllocLargeEmptySlotSpanRing" + ] + } + ] + } + ], "PartitionAllocPermissiveMte": [ { "platforms": [ @@ -19489,26 +18246,6 @@ ] } ], - "PartitionAllocShortMemoryReclaim": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PartitionAllocShortMemoryReclaim" - ] - } - ] - } - ], "PartitionAllocUnretainedDanglingPtr": [ { "platforms": [ @@ -19535,34 +18272,56 @@ "PartitionAllocWithAdvancedChecks": [ { "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", "linux", "mac", "windows" ], "experiments": [ { - "name": "enabled_512K_20250912", + "name": "enabled_512K_20260203", "params": { "PartitionAllocSchedulerLoopQuarantineConfig": "{\"browser\":{\"main\":{\"branch-capacity-in-bytes\":524288,\"enable-quarantine\":true,\"enable-zapping\":true,\"leak-on-destruction\":false}}}", "enabled-processes": "browser-only" }, "enable_features": [ "PartitionAllocSchedulerLoopQuarantine", - "PartitionAllocSchedulerLoopQuarantineTaskControlledPurge", + "PartitionAllocSchedulerLoopQuarantineTaskObserverForBrowserUIThread", "PartitionAllocWithAdvancedChecks" ], "disable_features": [ - "PartitionAllocSchedulerLoopQuarantineTaskObserverForBrowserUIThread", "ScreenAIPartitionAllocAdvancedChecksEnabled" ] } ] } ], + "PartitionAllocWithAdvancedChecksAMSC": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios" + ], + "experiments": [ + { + "name": "enabled_amsc_macro_only_20260130", + "params": { + "PartitionAllocSchedulerLoopQuarantineConfig": "{\"browser\":{\"amsc\":{\"branch-capacity-in-bytes\":524288,\"enable-quarantine\":true,\"enable-zapping\":true,\"leak-on-destruction\":false}}}", + "enabled-processes": "browser-only" + }, + "enable_features": [ + "PartitionAllocSchedulerLoopQuarantine", + "PartitionAllocWithAdvancedChecks", + "ScreenAIPartitionAllocAdvancedChecksEnabled" + ], + "disable_features": [ + "PartitionAllocSchedulerLoopQuarantineTaskObserverForBrowserUIThread" + ] + } + ] + } + ], "PartitionNetworkStateByNetworkAnonymizationKey": [ { "platforms": [ @@ -19625,7 +18384,7 @@ ] } ], - "PasskeyUnlockManager": [ + "PasskeyUnlockErrorUi": [ { "platforms": [ "chromeos", @@ -19635,9 +18394,12 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_with_unlock_wording_20260212", + "params": { + "passkey_unlock_ui_experiment_arm": "text_with_unlock_wording" + }, "enable_features": [ - "PasskeyUnlockManager" + "PasskeyUnlockErrorUi" ] } ] @@ -19678,21 +18440,6 @@ ] } ], - "PasswordlessSetup": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AllowPasswordlessSetup" - ] - } - ] - } - ], "PasswordsSyncErrorMessageAlternatives": [ { "platforms": [ @@ -19730,6 +18477,44 @@ ] } ], + "PaymentRequestRejectTooSmallWindows": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PaymentRequestRejectTooSmallWindows" + ] + } + ] + } + ], + "PaymentRequestUseRendererUrlLoader": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PaymentRequestUseRendererUrlLoader" + ] + } + ] + } + ], "PdfBufferedPaintManager": [ { "platforms": [ @@ -19775,7 +18560,7 @@ ], "experiments": [ { - "name": "EnabledStartup", + "name": "MostlyLaunched", "params": { "trigger": "startup" }, @@ -19786,27 +18571,6 @@ ] } ], - "PdfInkSignaturesTextHighlighter": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "enabled", - "params": { - "text-highlighting": "true" - }, - "enable_features": [ - "PdfInk2" - ] - } - ] - } - ], "PdfOutOfProcessIframe": [ { "platforms": [ @@ -19822,23 +18586,6 @@ ] } ], - "PdfSaveToDrive": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PdfSaveToDrive" - ] - } - ] - } - ], "PdfSaveToDriveSurvey": [ { "platforms": [ @@ -19861,6 +18608,21 @@ ] } ], + "PdfSaveToDrive_ChromeOS": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PdfSaveToDrive" + ] + } + ] + } + ], "PdfUseShowSaveFilePicker": [ { "platforms": [ @@ -19946,168 +18708,30 @@ "PerfCombined2025": [ { "platforms": [ - "android", "android_webview" ], "experiments": [ { - "name": "EnabledConservative_20251114", - "params": { - "MacCriticalDiskSpacePressureThresholdMB": "250" - }, + "name": "EnabledConservative", "enable_features": [ - "AbslFlatMapInVariantMap", "AsyncSetCookie", "AvoidCloneArgsOnExtensionFunctionDispatch", "AvoidUnnecessaryGetMinimizeButtonOffset", "AvoidUnnecessaryShouldRenderRichAnimation", - "CompressParkableStrings", "FastPathNoRaster", "GCOnArrayBufferAllocationFailure", - "MacAllowBackgroundingRenderProcesses", - "MacCriticalDiskSpacePressure", "MvcUpdateViewWhenModelChanged", - "NoPreReadMainDllIfSsd", - "PageAllocatorRetryOnCommitFailure", - "ReducePPMs", - "ReloadTabUiResourcesIfChanged", - "RemoveCancelledScriptedIdleTasks", - "ScreenWinDisplayLookupByHMONITOR", - "SlimDirectReceiverIpc", - "TerminationTargetPolicy", - "UpdateDirectManipulationHelperOnParentChange" - ], - "disable_features": [ - "MemoryCacheStrongReference", - "SuppressMemoryListeners", - "SuppressMemoryMonitor" - ] - } - ] - }, - { - "platforms": [ - "chromeos", - "linux" - ], - "experiments": [ - { - "name": "EnabledConservative_20251114", - "params": { - "MacCriticalDiskSpacePressureThresholdMB": "250" - }, - "enable_features": [ - "AbslFlatMapInVariantMap", - "AsyncSetCookie", - "AvoidCloneArgsOnExtensionFunctionDispatch", - "AvoidUnnecessaryGetMinimizeButtonOffset", - "AvoidUnnecessaryShouldRenderRichAnimation", - "CompressParkableStrings", - "FastPathNoRaster", - "GCOnArrayBufferAllocationFailure", - "MacAllowBackgroundingRenderProcesses", - "MacCriticalDiskSpacePressure", - "MvcUpdateViewWhenModelChanged", - "NoPreReadMainDllIfSsd", - "PageAllocatorRetryOnCommitFailure", - "ReducePPMs", - "ReloadTabUiResourcesIfChanged", - "RemoveCancelledScriptedIdleTasks", - "ScreenWinDisplayLookupByHMONITOR", - "SlimDirectReceiverIpc", - "TerminationTargetPolicy", - "UpdateDirectManipulationHelperOnParentChange" - ] - } - ] - }, - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "EnabledConservative_20251114", - "params": { - "MacCriticalDiskSpacePressureThresholdMB": "250", - "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020", - "suppress_memory_monitor_mask": "00020000020000" - }, - "enable_features": [ - "AbslFlatMapInVariantMap", - "AsyncSetCookie", - "AvoidCloneArgsOnExtensionFunctionDispatch", - "AvoidUnnecessaryGetMinimizeButtonOffset", - "AvoidUnnecessaryShouldRenderRichAnimation", - "CompressParkableStrings", - "FastPathNoRaster", - "GCOnArrayBufferAllocationFailure", - "MacAllowBackgroundingRenderProcesses", - "MacCriticalDiskSpacePressure", - "MemoryCacheStrongReference", - "MvcUpdateViewWhenModelChanged", - "NoPreReadMainDllIfSsd", - "PageAllocatorRetryOnCommitFailure", "ReducePPMs", "ReleaseResourceDecodedDataOnMemoryPressure", "ReleaseResourceStrongReferencesOnMemoryPressure", "ReloadTabUiResourcesIfChanged", "RemoveCancelledScriptedIdleTasks", - "ScreenWinDisplayLookupByHMONITOR", - "SlimDirectReceiverIpc", - "SuppressMemoryListeners", - "SuppressMemoryMonitor", - "TerminationTargetPolicy", - "UpdateDirectManipulationHelperOnParentChange" + "SlimDirectReceiverIpc" ], "disable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay" - ] - } - ] - }, - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "EnabledConservative_20251114", - "params": { - "MacCriticalDiskSpacePressureThresholdMB": "250", - "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020", - "suppress_memory_monitor_mask": "00020000020000" - }, - "enable_features": [ - "AbslFlatMapInVariantMap", - "AsyncSetCookie", - "AvoidCloneArgsOnExtensionFunctionDispatch", - "AvoidUnnecessaryGetMinimizeButtonOffset", - "AvoidUnnecessaryShouldRenderRichAnimation", - "CompressParkableStrings", - "DirectCompositorThreadIpc", - "FastPathNoRaster", - "GCOnArrayBufferAllocationFailure", - "MacAllowBackgroundingRenderProcesses", - "MacCriticalDiskSpacePressure", + "MemoryCacheChangeStrongReferencePruneDelay", "MemoryCacheStrongReference", - "MvcUpdateViewWhenModelChanged", - "NoPreReadMainDllIfSsd", - "PageAllocatorRetryOnCommitFailure", - "ReducePPMs", - "ReleaseResourceDecodedDataOnMemoryPressure", - "ReleaseResourceStrongReferencesOnMemoryPressure", - "ReloadTabUiResourcesIfChanged", - "RemoveCancelledScriptedIdleTasks", - "ScreenWinDisplayLookupByHMONITOR", - "SlimDirectReceiverIpc", - "SuppressMemoryListeners", - "SuppressMemoryMonitor", - "TerminationTargetPolicy", - "UpdateDirectManipulationHelperOnParentChange" - ], - "disable_features": [ - "MemoryCacheChangeStrongReferencePruneDelay" + "SuppressMemoryListeners" ] } ] @@ -20128,48 +18752,6 @@ ] } ], - "PerformanceControlsHatsStudy": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "EnabledHighEfficiencyOptOut_20230223", - "params": { - "en_site_id": "hEedoxCS30ugnJ3q1cK0YKKzXjSm", - "probability": "1.0" - }, - "enable_features": [ - "PerformanceControlsHighEfficiencyOptOutSurvey" - ], - "disable_features": [ - "PerformanceControlsBatteryPerformanceSurvey", - "PerformanceControlsBatterySaverOptOutSurvey", - "PerformanceControlsPerformanceSurvey" - ] - }, - { - "name": "EnabledBatterySaverOptOut_20230223", - "params": { - "en_site_id": "gyuzHnE940ugnJ3q1cK0RyY65eG8", - "probability": "1.0" - }, - "enable_features": [ - "PerformanceControlsBatterySaverOptOutSurvey" - ], - "disable_features": [ - "PerformanceControlsBatteryPerformanceSurvey", - "PerformanceControlsHighEfficiencyOptOutSurvey", - "PerformanceControlsPerformanceSurvey" - ] - } - ] - } - ], "PerformanceControlsPPMSurvey": [ { "platforms": [ @@ -20255,38 +18837,16 @@ ] } ], - "PermissionPromiseLifetimeModulation": [ + "PermissionPromiseLifetimeModulationAndroid": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PermissionPromiseLifetimeModulation" - ] - } - ] - } - ], - "PermissionSiteSettingsRadioButton": [ - { - "platforms": [ - "chromeos", - "linux", - "windows", - "mac", "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "PermissionSiteSettingsRadioButton" + "PermissionPromiseLifetimeModulationAndroid" ] } ] @@ -20311,24 +18871,6 @@ ] } ], - "PermissionsAIv3": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PermissionsAIv3" - ] - } - ] - } - ], "PermissionsAIv4": [ { "platforms": [ @@ -20776,14 +19318,13 @@ { "platforms": [ "android", - "android_weblayer", "android_webview" ], "experiments": [ { "name": "Enabled", "params": { - "post_delayed_task_focus_tab_time_millis": "10" + "post_delayed_task_focus_tab_time_millis": "25" }, "enable_features": [ "PostDelayedTaskFocusTab" @@ -20792,26 +19333,6 @@ ] } ], - "PowerBookmarkBackend": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PowerBookmarkBackend" - ] - } - ] - } - ], "PreconnectCreateNewTab": [ { "platforms": [ @@ -20998,27 +19519,6 @@ ] } ], - "PrefixCookieHttp": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PrefixCookieHostHttp", - "PrefixCookieHttp" - ] - } - ] - } - ], "PreloadTopChromeWebUILessNavigations": [ { "platforms": [ @@ -21037,6 +19537,26 @@ ] } ], + "PreloadingRespectUserAgentOverride": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PreloadingRespectUserAgentOverride", + "RespectUserAgentOverrideInSearchPrefetch" + ] + } + ] + } + ], "Prerender2EarlyDocumentLifecycleUpdateV2": [ { "platforms": [ @@ -21069,8 +19589,7 @@ "name": "Enabled_NoTimeout_Burst", "params": { "kPrerender2FallbackPrefetchSchedulerPolicy": "Burst", - "kPrerender2FallbackPrefetchUseBlockUntilHeadTimetout": "false", - "kPrerender2FallbackUsePreloadServingMetrics": "true" + "kPrerender2FallbackPrefetchUseBlockUntilHeadTimetout": "false" }, "enable_features": [ "Prerender2FallbackPrefetchSpecRules" @@ -21250,21 +19769,6 @@ ] } ], - "Printscanmgr": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AddPrinterViaPrintscanmgr" - ] - } - ] - } - ], "PrivacySandboxActivityTypeStorage": [ { "platforms": [ @@ -21343,10 +19847,10 @@ ] } ], - "PrivacySandboxSentimentSurvey": [ + "PrivateAI": [ { "platforms": [ - "android", + "chromeos", "linux", "mac", "windows" @@ -21355,11 +19859,13 @@ { "name": "Enabled", "params": { - "probability": "1.0", - "sentiment-survey-trigger-id": "EHJUDsZQd0ugnJ3q1cK0Ru5GreU3" + "api-key": "xxxxxxxxxxxxxxxxxxxxxx", + "url": "example.com/ws/mdi.privatearatea.PrivateArateaService.StartNoiseSession" }, "enable_features": [ - "PrivacySandboxSentimentSurvey" + "PrivateAi", + "PrivateAiUseTokenAttestation", + "ZeroStateSuggestionsUsePrivateAi" ] } ] @@ -21424,6 +19930,7 @@ "ProbeStylusWritingInBackground": [ { "platforms": [ + "android", "android_webview" ], "experiments": [ @@ -21436,26 +19943,10 @@ ] } ], - "ProcessBoundStringEncryption": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ProcessBoundStringEncryption" - ] - } - ] - } - ], "ProcessHtmlDataImmediately": [ { "platforms": [ "android", - "android_weblayer", "chromeos", "linux", "mac", @@ -21494,26 +19985,6 @@ ] } ], - "ProcessRankPolicyAndroid2": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledProtectedTabsAndroid_20260126", - "enable_features": [ - "ProcessRankPolicyAndroid", - "ProtectedTabsAndroid", - "SubframeImportance" - ], - "disable_features": [ - "ChangeUnfocusedPriority" - ] - } - ] - } - ], "ProcessReuseOnPrerenderCOOPSwapAndroid": [ { "platforms": [ @@ -21819,29 +20290,6 @@ ] } ], - "PushMessagingGcmEndpointEnvironment": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "params": { - "PushMessagingGcmEndpointUrl": "https://jmt17.google.com/fcm/send/" - }, - "enable_features": [ - "PushMessagingGcmEndpointEnvironment" - ] - } - ] - } - ], "PushMessagingGcmEndpointWebpushPath": [ { "platforms": [ @@ -21946,6 +20394,25 @@ ] } ], + "RazeOldHistoryDatabase": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "RazeOldHistoryDatabase" + ] + } + ] + } + ], "ReactivePrefetchAndroidDiscardBody": [ { "platforms": [ @@ -21987,21 +20454,6 @@ ] } ], - "ReadAloudTapToSeek": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ReadAloudTapToSeek" - ] - } - ] - } - ], "ReadAnythingIPHRollout": [ { "platforms": [ @@ -22081,6 +20533,7 @@ "ReadAnythingOmnibox": [ { "platforms": [ + "chromeos", "linux", "mac", "windows" @@ -22127,30 +20580,6 @@ ] } ], - "ReadAnythingReadAloudTsTextSegmentation": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ReadAnythingReadAloudTSTextSegmentation" - ] - }, - { - "name": "Disabled", - "disable_features": [ - "ReadAnythingReadAloudTSTextSegmentation" - ] - } - ] - } - ], "RebindServiceBatchApi": [ { "platforms": [ @@ -22314,6 +20743,21 @@ ] } ], + "RejectWeakCiphertext": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "RejectWeakCiphertext" + ] + } + ] + } + ], "RemotePageMetadataAndroid": [ { "platforms": [ @@ -22426,26 +20870,6 @@ ] } ], - "RemoveGraphicsUKMs": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "ReportUkm" - ] - } - ] - } - ], "RemoveGreySnapshot": [ { "platforms": [ @@ -22541,8 +20965,11 @@ }, "enable_features": [ "DelayLayerTreeViewDeletionOnLocalSwap", - "QueueNavigationsWhileWaitingForCommit", - "RenderDocument" + "RenderDocument", + "SkipRendererCancellationThrottle" + ], + "disable_features": [ + "RendererCancellationThrottleImprovements" ] } ] @@ -22674,6 +21101,25 @@ ] } ], + "ResetBrowsingInstanceSwapResultOnSameDocument": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ResetBrowsingInstanceSwapResultOnSameDocument" + ] + } + ] + } + ], "ResolutionBasedDecoderPriority": [ { "platforms": [ @@ -22771,22 +21217,6 @@ ] } ], - "RetrieveTrustedVaultKeyKeyboardAccessoryAction": [ - { - "platforms": [ - "android", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RetrieveTrustedVaultKeyKeyboardAccessoryAction" - ] - } - ] - } - ], "RetryGetVideoCaptureDeviceInfos": [ { "platforms": [ @@ -22822,25 +21252,6 @@ ] } ], - "RollBackModeB": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RollBackModeB" - ] - } - ] - } - ], "RoundedWindows": [ { "platforms": [ @@ -22873,25 +21284,22 @@ ] } ], - "RuntimeOnMessageWebExtensionPolyfillSupport": [ + "RustyBmpFeature": [ { "platforms": [ + "android", + "android_webview", "chromeos", + "ios", "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "RustyBmpExperimentForTests", "enable_features": [ - "RuntimeOnMessageWebExtensionPolyfillSupport" - ] - }, - { - "name": "Disabled", - "disable_features": [ - "RuntimeOnMessageWebExtensionPolyfillSupport" + "RustyBmpFeature" ] } ] @@ -23061,52 +21469,6 @@ ] } ], - "SafetyHubOneOffHats": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "SafetyHub_NoNotification", - "params": { - "probability": "0.0155", - "safety-hub-ab-control-trigger-id": "XxxasK3Zu0ugnJ3q1cK0Yv2LaPos", - "survey": "safety-hub-control" - }, - "enable_features": [ - "SafetyHubHaTSOneOffSurvey" - ] - }, - { - "name": "SafetyHub_Notification", - "params": { - "probability": "0.0155", - "safety-hub-ab-notification-trigger-id": "MVbs4W6AD0ugnJ3q1cK0Nc4CZvj2", - "survey": "safety-hub-notification" - }, - "enable_features": [ - "SafetyHubHaTSOneOffSurvey" - ] - }, - { - "name": "SafetyHub_Interaction", - "params": { - "probability": "0.1516", - "safety-hub-ab-interaction-trigger-id": "o6hoLZqjX0ugnJ3q1cK0XCht6ei6", - "survey": "safety-hub-interaction" - }, - "enable_features": [ - "SafetyHubHaTSOneOffSurvey" - ] - } - ] - } - ], "SafetyHubUnusedPermissionRevocationForAllSurfaces": [ { "platforms": [ @@ -23146,921 +21508,6 @@ ] } ], - "ScalableIphStudy": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "CounterfactualControl_BETA_20231204", - "params": { - "IPH_ScalableIphHelpAppBasedNudge_availability": "any", - "IPH_ScalableIphHelpAppBasedNudge_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedNudge_blocking": "none", - "IPH_ScalableIphHelpAppBasedNudge_event_trigger": "name:ScalableIphHelpAppBasedNudgeTrigger;comparator:==0;window:1;storage:7", - "IPH_ScalableIphHelpAppBasedNudge_event_used": "name:ScalableIphHelpAppBasedNudgeEventUsedNotUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedNudge_session_rate": "any", - "IPH_ScalableIphHelpAppBasedNudge_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedNudge_tracking_only": "true", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedEight_availability": "any", - "IPH_ScalableIphTimerBasedEight_blocked_by": "none", - "IPH_ScalableIphTimerBasedEight_blocking": "none", - "IPH_ScalableIphTimerBasedEight_event_1": "name:ScalableIphFiveMinTick;comparator:>=26;window:7;storage:8", - "IPH_ScalableIphTimerBasedEight_event_trigger": "name:ScalableIphTimerBasedEightTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedEight_event_used": "name:ScalableIphTimerBasedEightEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedEight_session_rate": "any", - "IPH_ScalableIphTimerBasedEight_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedEight_tracking_only": "true", - "IPH_ScalableIphTimerBasedEight_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedEight_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedEight_x_CustomConditionPhoneHubOnboardingEligible": "True", - "IPH_ScalableIphTimerBasedEight_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedEight_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedFive_availability": "any", - "IPH_ScalableIphTimerBasedFive_blocked_by": "none", - "IPH_ScalableIphTimerBasedFive_blocking": "none", - "IPH_ScalableIphTimerBasedFive_event_1": "name:ScalableIphFiveMinTick;comparator:>=16;window:7;storage:8", - "IPH_ScalableIphTimerBasedFive_event_trigger": "name:ScalableIphTimerBasedFiveTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedFive_event_used": "name:ScalableIphTimerBasedFiveEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedFive_session_rate": "any", - "IPH_ScalableIphTimerBasedFive_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedFive_tracking_only": "true", - "IPH_ScalableIphTimerBasedFive_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedFive_x_CustomConditionHasSavedPrinter": "False", - "IPH_ScalableIphTimerBasedFive_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedFive_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedFive_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedFour_availability": "any", - "IPH_ScalableIphTimerBasedFour_blocked_by": "none", - "IPH_ScalableIphTimerBasedFour_blocking": "none", - "IPH_ScalableIphTimerBasedFour_event_1": "name:ScalableIphFiveMinTick;comparator:>=12;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_event_precondition_personalization_app": "name:ScalableIphOpenPersonalizationApp;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_event_trigger": "name:ScalableIphTimerBasedFourTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_event_used": "name:ScalableIphTimerBasedFourEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_session_rate": "any", - "IPH_ScalableIphTimerBasedFour_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedFour_tracking_only": "true", - "IPH_ScalableIphTimerBasedFour_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedFour_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedFour_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedFour_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedNine_availability": "any", - "IPH_ScalableIphTimerBasedNine_blocked_by": "none", - "IPH_ScalableIphTimerBasedNine_blocking": "none", - "IPH_ScalableIphTimerBasedNine_event_1": "name:ScalableIphFiveMinTick;comparator:>=30;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_precondition_youtube_app_list": "name:ScalableIphAppListItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_precondition_youtube_shelf": "name:ScalableIphShelfItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_trigger": "name:ScalableIphTimerBasedNineTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_used": "name:ScalableIphTimerBasedNineEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_session_rate": "any", - "IPH_ScalableIphTimerBasedNine_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedNine_tracking_only": "true", - "IPH_ScalableIphTimerBasedNine_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedNine_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedNine_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedNine_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedOne_availability": "any", - "IPH_ScalableIphTimerBasedOne_blocked_by": "none", - "IPH_ScalableIphTimerBasedOne_blocking": "none", - "IPH_ScalableIphTimerBasedOne_event_1": "name:ScalableIphFiveMinTick;comparator:>=0;window:7;storage:8", - "IPH_ScalableIphTimerBasedOne_event_trigger": "name:ScalableIphTimerBasedOneTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedOne_event_used": "name:ScalableIphTimerBasedOneEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedOne_session_rate": "any", - "IPH_ScalableIphTimerBasedOne_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedOne_tracking_only": "true", - "IPH_ScalableIphTimerBasedOne_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedOne_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedOne_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedOne_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedSeven_availability": "any", - "IPH_ScalableIphTimerBasedSeven_blocked_by": "none", - "IPH_ScalableIphTimerBasedSeven_blocking": "none", - "IPH_ScalableIphTimerBasedSeven_event_1": "name:ScalableIphFiveMinTick;comparator:>=24;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_android_app_list": "name:ScalableIphAppListItemActivationOpenGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_android_shelf": "name:ScalableIphShelfItemActivationGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_web_app_list": "name:ScalableIphAppListItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_web_shelf": "name:ScalableIphShelfItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_trigger": "name:ScalableIphTimerBasedSevenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_used": "name:ScalableIphTimerBasedSevenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_session_rate": "any", - "IPH_ScalableIphTimerBasedSeven_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedSeven_tracking_only": "true", - "IPH_ScalableIphTimerBasedSeven_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedSeven_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedSeven_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedSeven_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedSix_availability": "any", - "IPH_ScalableIphTimerBasedSix_blocked_by": "none", - "IPH_ScalableIphTimerBasedSix_blocking": "none", - "IPH_ScalableIphTimerBasedSix_event_1": "name:ScalableIphFiveMinTick;comparator:>=18;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_precondition_google_play_app_list": "name:ScalableIphAppListItemActivationOpenGooglePlayStore;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_precondition_google_play_shelf": "name:ScalableIphShelfItemActivationGooglePlay;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_trigger": "name:ScalableIphTimerBasedSixTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_used": "name:ScalableIphTimerBasedSixEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_session_rate": "any", - "IPH_ScalableIphTimerBasedSix_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedSix_tracking_only": "true", - "IPH_ScalableIphTimerBasedSix_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedSix_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedSix_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedSix_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedTen_availability": "any", - "IPH_ScalableIphTimerBasedTen_blocked_by": "none", - "IPH_ScalableIphTimerBasedTen_blocking": "none", - "IPH_ScalableIphTimerBasedTen_event_1": "name:ScalableIphFiveMinTick;comparator:>=48;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_event_precondition_print_job": "name:ScalableIphPrintJobCreated;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_event_trigger": "name:ScalableIphTimerBasedTenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_event_used": "name:ScalableIphTimerBasedTenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_session_rate": "any", - "IPH_ScalableIphTimerBasedTen_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedTen_tracking_only": "true", - "IPH_ScalableIphTimerBasedTen_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedTen_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedTen_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedTen_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedThree_availability": "any", - "IPH_ScalableIphTimerBasedThree_blocked_by": "none", - "IPH_ScalableIphTimerBasedThree_blocking": "none", - "IPH_ScalableIphTimerBasedThree_event_1": "name:ScalableIphFiveMinTick;comparator:>=2;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_precondition_google_docs_app_list": "name:ScalableIphAppListItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_precondition_google_docs_shelf": "name:ScalableIphShelfItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_trigger": "name:ScalableIphTimerBasedThreeTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_used": "name:ScalableIphTimerBasedThreeEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_session_rate": "any", - "IPH_ScalableIphTimerBasedThree_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedThree_tracking_only": "true", - "IPH_ScalableIphTimerBasedThree_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedThree_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedThree_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedThree_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedTwo_availability": "any", - "IPH_ScalableIphTimerBasedTwo_blocked_by": "none", - "IPH_ScalableIphTimerBasedTwo_blocking": "none", - "IPH_ScalableIphTimerBasedTwo_event_1": "name:ScalableIphFiveMinTick;comparator:>=1;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_event_precondition_launcher": "name:ScalableIphAppListShown;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_event_trigger": "name:ScalableIphTimerBasedTwoTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_event_used": "name:ScalableIphAppListShown;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_session_rate": "any", - "IPH_ScalableIphTimerBasedTwo_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedTwo_tracking_only": "true", - "IPH_ScalableIphTimerBasedTwo_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedTwo_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedTwo_x_CustomUiType": "None", - "IPH_ScalableIphTimerBasedTwo_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedEight_availability": "any", - "IPH_ScalableIphUnlockedBasedEight_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedEight_blocking": "none", - "IPH_ScalableIphUnlockedBasedEight_event_1": "name:ScalableIphUnlocked;comparator:>=7;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedEight_event_trigger": "name:ScalableIphUnlockedBasedEightTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedEight_event_used": "name:ScalableIphUnlockedBasedEightEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedEight_session_rate": "any", - "IPH_ScalableIphUnlockedBasedEight_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedEight_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedEight_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedEight_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedEight_x_CustomConditionPhoneHubOnboardingEligible": "True", - "IPH_ScalableIphUnlockedBasedEight_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedEight_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedFive_availability": "any", - "IPH_ScalableIphUnlockedBasedFive_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedFive_blocking": "none", - "IPH_ScalableIphUnlockedBasedFive_event_1": "name:ScalableIphUnlocked;comparator:>=4;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_precondition_google_docs_app_list": "name:ScalableIphAppListItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_precondition_google_docs_shelf": "name:ScalableIphShelfItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_trigger": "name:ScalableIphUnlockedBasedFiveTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_used": "name:ScalableIphUnlockedBasedFiveEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_session_rate": "any", - "IPH_ScalableIphUnlockedBasedFive_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedFive_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedFive_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedFive_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedFive_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedFive_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedFour_availability": "any", - "IPH_ScalableIphUnlockedBasedFour_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedFour_blocking": "none", - "IPH_ScalableIphUnlockedBasedFour_event_1": "name:ScalableIphUnlocked;comparator:>=3;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_precondition_google_play_app_list": "name:ScalableIphAppListItemActivationOpenGooglePlayStore;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_precondition_google_play_shelf": "name:ScalableIphShelfItemActivationGooglePlay;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_trigger": "name:ScalableIphUnlockedBasedFourTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_used": "name:ScalableIphUnlockedBasedFourEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_session_rate": "any", - "IPH_ScalableIphUnlockedBasedFour_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedFour_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedFour_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedFour_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedFour_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedFour_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedNine_availability": "any", - "IPH_ScalableIphUnlockedBasedNine_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedNine_blocking": "none", - "IPH_ScalableIphUnlockedBasedNine_event_1": "name:ScalableIphUnlocked;comparator:>=8;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_precondition_youtube_app_list": "name:ScalableIphAppListItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_precondition_youtube_shelf": "name:ScalableIphShelfItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_trigger": "name:ScalableIphUnlockedBasedNineTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_used": "name:ScalableIphUnlockedBasedNineEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_session_rate": "any", - "IPH_ScalableIphUnlockedBasedNine_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedNine_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedNine_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedNine_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedNine_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedNine_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedOne_availability": "any", - "IPH_ScalableIphUnlockedBasedOne_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedOne_blocking": "none", - "IPH_ScalableIphUnlockedBasedOne_event_1": "name:ScalableIphUnlocked;comparator:>=0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedOne_event_trigger": "name:ScalableIphUnlockedBasedOneTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedOne_event_used": "name:ScalableIphUnlockedBasedOneEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedOne_session_rate": "any", - "IPH_ScalableIphUnlockedBasedOne_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedOne_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedOne_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedOne_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedOne_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedOne_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedSeven_availability": "any", - "IPH_ScalableIphUnlockedBasedSeven_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedSeven_blocking": "none", - "IPH_ScalableIphUnlockedBasedSeven_event_1": "name:ScalableIphUnlocked;comparator:>=6;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSeven_event_trigger": "name:ScalableIphUnlockedBasedSevenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSeven_event_used": "name:ScalableIphUnlockedBasedSevenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSeven_session_rate": "any", - "IPH_ScalableIphUnlockedBasedSeven_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedSeven_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomConditionHasSavedPrinter": "False", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedSix_availability": "any", - "IPH_ScalableIphUnlockedBasedSix_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedSix_blocking": "none", - "IPH_ScalableIphUnlockedBasedSix_event_1": "name:ScalableIphUnlocked;comparator:>=5;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_android_app_list": "name:ScalableIphAppListItemActivationOpenGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_android_shelf": "name:ScalableIphShelfItemActivationGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_web_app_list": "name:ScalableIphAppListItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_web_shelf": "name:ScalableIphShelfItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_trigger": "name:ScalableIphUnlockedBasedSixTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_used": "name:ScalableIphUnlockedBasedSixEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_session_rate": "any", - "IPH_ScalableIphUnlockedBasedSix_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedSix_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedSix_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedSix_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedSix_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedSix_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedTen_availability": "any", - "IPH_ScalableIphUnlockedBasedTen_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedTen_blocking": "none", - "IPH_ScalableIphUnlockedBasedTen_event_1": "name:ScalableIphUnlocked;comparator:>=9;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_event_precondition_print_job": "name:ScalableIphPrintJobCreated;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_event_trigger": "name:ScalableIphUnlockedBasedTenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_event_used": "name:ScalableIphUnlockedBasedTenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_session_rate": "any", - "IPH_ScalableIphUnlockedBasedTen_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedTen_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedTen_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedTen_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedTen_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedTen_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedThree_availability": "any", - "IPH_ScalableIphUnlockedBasedThree_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedThree_blocking": "none", - "IPH_ScalableIphUnlockedBasedThree_event_1": "name:ScalableIphUnlocked;comparator:>=2;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_event_precondition_personalization_app": "name:ScalableIphOpenPersonalizationApp;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_event_trigger": "name:ScalableIphUnlockedBasedThreeTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_event_used": "name:ScalableIphUnlockedBasedThreeEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_session_rate": "any", - "IPH_ScalableIphUnlockedBasedThree_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedThree_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedThree_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedThree_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedThree_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedThree_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedTwo_availability": "any", - "IPH_ScalableIphUnlockedBasedTwo_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedTwo_blocking": "none", - "IPH_ScalableIphUnlockedBasedTwo_event_1": "name:ScalableIphUnlocked;comparator:>=1;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_event_precondition_launcher": "name:ScalableIphAppListShown;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_event_trigger": "name:ScalableIphUnlockedBasedTwoTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_event_used": "name:ScalableIphAppListShown;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_session_rate": "any", - "IPH_ScalableIphUnlockedBasedTwo_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedTwo_tracking_only": "true", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomUiType": "None", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomVersionNumber": "1" - }, - "enable_features": [ - "IPH_ScalableIphHelpAppBasedNudge", - "IPH_ScalableIphTimerBasedEight", - "IPH_ScalableIphTimerBasedFive", - "IPH_ScalableIphTimerBasedFour", - "IPH_ScalableIphTimerBasedNine", - "IPH_ScalableIphTimerBasedOne", - "IPH_ScalableIphTimerBasedSeven", - "IPH_ScalableIphTimerBasedSix", - "IPH_ScalableIphTimerBasedTen", - "IPH_ScalableIphTimerBasedThree", - "IPH_ScalableIphTimerBasedTwo", - "IPH_ScalableIphUnlockedBasedEight", - "IPH_ScalableIphUnlockedBasedFive", - "IPH_ScalableIphUnlockedBasedFour", - "IPH_ScalableIphUnlockedBasedNine", - "IPH_ScalableIphUnlockedBasedOne", - "IPH_ScalableIphUnlockedBasedSeven", - "IPH_ScalableIphUnlockedBasedSix", - "IPH_ScalableIphUnlockedBasedTen", - "IPH_ScalableIphUnlockedBasedThree", - "IPH_ScalableIphUnlockedBasedTwo", - "ScalableIph" - ], - "disable_features": [ - "ShelfLauncherNudge" - ] - }, - { - "name": "HelpAppBased_BETA_20231204", - "params": { - "IPH_ScalableIphHelpAppBasedEight_availability": "any", - "IPH_ScalableIphHelpAppBasedEight_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedEight_blocking": "none", - "IPH_ScalableIphHelpAppBasedEight_event_trigger": "name:ScalableIphHelpAppBasedEightTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedEight_event_used": "name:ScalableIphHelpAppActionOpenPhoneHub;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedEight_session_rate": "any", - "IPH_ScalableIphHelpAppBasedEight_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedEight_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedEight_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedEight_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedEight_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedFive_availability": "any", - "IPH_ScalableIphHelpAppBasedFive_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedFive_blocking": "none", - "IPH_ScalableIphHelpAppBasedFive_event_trigger": "name:ScalableIphHelpAppBasedFiveTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedFive_event_used": "name:ScalableIphHelpAppActionOpenGoogleDocs;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedFive_session_rate": "any", - "IPH_ScalableIphHelpAppBasedFive_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedFive_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedFive_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedFive_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedFive_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedFour_availability": "any", - "IPH_ScalableIphHelpAppBasedFour_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedFour_blocking": "none", - "IPH_ScalableIphHelpAppBasedFour_event_trigger": "name:ScalableIphHelpAppBasedFourTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedFour_event_used": "name:ScalableIphHelpAppActionOpenPlayStore;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedFour_session_rate": "any", - "IPH_ScalableIphHelpAppBasedFour_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedFour_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedFour_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedFour_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedFour_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedNine_availability": "any", - "IPH_ScalableIphHelpAppBasedNine_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedNine_blocking": "none", - "IPH_ScalableIphHelpAppBasedNine_event_trigger": "name:ScalableIphHelpAppBasedNineTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedNine_event_used": "name:ScalableIphHelpAppActionOpenYouTube;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedNine_session_rate": "any", - "IPH_ScalableIphHelpAppBasedNine_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedNine_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedNine_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedNine_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedNine_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedNudge_availability": "any", - "IPH_ScalableIphHelpAppBasedNudge_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedNudge_blocking": "none", - "IPH_ScalableIphHelpAppBasedNudge_event_trigger": "name:ScalableIphHelpAppBasedNudgeTrigger;comparator:==0;window:1;storage:7", - "IPH_ScalableIphHelpAppBasedNudge_event_used": "name:ScalableIphHelpAppBasedNudgeEventUsedNotUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedNudge_session_rate": "any", - "IPH_ScalableIphHelpAppBasedNudge_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomBubbleAnchorViewAppId": "nbljnnecbjbmifnoehiemkgefbnpoeak", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomBubbleId": "scalable_iph_help_app_based_open_help_app", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomBubbleText": "Continue learning about your Chromebook", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomUiType": "Bubble", - "IPH_ScalableIphHelpAppBasedNudge_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedOne_availability": "any", - "IPH_ScalableIphHelpAppBasedOne_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedOne_blocking": "none", - "IPH_ScalableIphHelpAppBasedOne_event_trigger": "name:ScalableIphHelpAppBasedOneTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedOne_event_used": "name:ScalableIphHelpAppActionOpenChrome;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedOne_session_rate": "any", - "IPH_ScalableIphHelpAppBasedOne_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedOne_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedOne_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedOne_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedOne_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedSeven_availability": "any", - "IPH_ScalableIphHelpAppBasedSeven_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedSeven_blocking": "none", - "IPH_ScalableIphHelpAppBasedSeven_event_trigger": "name:ScalableIphHelpAppBasedSevenTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedSeven_event_used": "name:ScalableIphHelpAppActionOpenSettingsPrinter;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedSeven_session_rate": "any", - "IPH_ScalableIphHelpAppBasedSeven_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedSeven_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedSeven_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedSeven_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedSeven_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedSix_availability": "any", - "IPH_ScalableIphHelpAppBasedSix_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedSix_blocking": "none", - "IPH_ScalableIphHelpAppBasedSix_event_trigger": "name:ScalableIphHelpAppBasedSixTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedSix_event_used": "name:ScalableIphHelpAppActionOpenGooglePhotos;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedSix_session_rate": "any", - "IPH_ScalableIphHelpAppBasedSix_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedSix_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedSix_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedSix_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedSix_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedTen_availability": "any", - "IPH_ScalableIphHelpAppBasedTen_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedTen_blocking": "none", - "IPH_ScalableIphHelpAppBasedTen_event_trigger": "name:ScalableIphHelpAppBasedTenTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedTen_event_used": "name:ScalableIphHelpAppActionOpenFileManager;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedTen_session_rate": "any", - "IPH_ScalableIphHelpAppBasedTen_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedTen_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedTen_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedTen_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedTen_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedThree_availability": "any", - "IPH_ScalableIphHelpAppBasedThree_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedThree_blocking": "none", - "IPH_ScalableIphHelpAppBasedThree_event_trigger": "name:ScalableIphHelpAppBasedThreeTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedThree_event_used": "name:ScalableIphHelpAppActionOpenPersonalizationApp;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedThree_session_rate": "any", - "IPH_ScalableIphHelpAppBasedThree_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedThree_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedThree_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedThree_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedThree_x_CustomVersionNumber": "1", - "IPH_ScalableIphHelpAppBasedTwo_availability": "any", - "IPH_ScalableIphHelpAppBasedTwo_blocked_by": "none", - "IPH_ScalableIphHelpAppBasedTwo_blocking": "none", - "IPH_ScalableIphHelpAppBasedTwo_event_trigger": "name:ScalableIphHelpAppBasedTwoTriggerNotUsed;comparator:==1;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedTwo_event_used": "name:ScalableIphAppListShown;comparator:any;window:7;storage:8", - "IPH_ScalableIphHelpAppBasedTwo_session_rate": "any", - "IPH_ScalableIphHelpAppBasedTwo_session_rate_impact": "none", - "IPH_ScalableIphHelpAppBasedTwo_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphHelpAppBasedTwo_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphHelpAppBasedTwo_x_CustomUiType": "None", - "IPH_ScalableIphHelpAppBasedTwo_x_CustomVersionNumber": "1" - }, - "enable_features": [ - "HelpAppWelcomeTips", - "IPH_ScalableIphHelpAppBasedEight", - "IPH_ScalableIphHelpAppBasedFive", - "IPH_ScalableIphHelpAppBasedFour", - "IPH_ScalableIphHelpAppBasedNine", - "IPH_ScalableIphHelpAppBasedNudge", - "IPH_ScalableIphHelpAppBasedOne", - "IPH_ScalableIphHelpAppBasedSeven", - "IPH_ScalableIphHelpAppBasedSix", - "IPH_ScalableIphHelpAppBasedTen", - "IPH_ScalableIphHelpAppBasedThree", - "IPH_ScalableIphHelpAppBasedTwo", - "ScalableIph" - ], - "disable_features": [ - "ShelfLauncherNudge" - ] - }, - { - "name": "TimerBased_BETA_20231204", - "params": { - "IPH_ScalableIphTimerBasedEight_availability": "any", - "IPH_ScalableIphTimerBasedEight_blocked_by": "none", - "IPH_ScalableIphTimerBasedEight_blocking": "none", - "IPH_ScalableIphTimerBasedEight_event_1": "name:ScalableIphFiveMinTick;comparator:>=26;window:7;storage:8", - "IPH_ScalableIphTimerBasedEight_event_trigger": "name:ScalableIphTimerBasedEightTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedEight_event_used": "name:ScalableIphTimerBasedEightEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedEight_session_rate": "any", - "IPH_ScalableIphTimerBasedEight_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedEight_x_CustomButtonActionType": "OpenPhoneHub", - "IPH_ScalableIphTimerBasedEight_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedEight_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedEight_x_CustomConditionPhoneHubOnboardingEligible": "True", - "IPH_ScalableIphTimerBasedEight_x_CustomNotificationBodyText": "You can quickly reply to messages from your Android phone, right from your Chromebook", - "IPH_ScalableIphTimerBasedEight_x_CustomNotificationButtonText": "Connect phone", - "IPH_ScalableIphTimerBasedEight_x_CustomNotificationId": "scalable_iph_timer_based_eight", - "IPH_ScalableIphTimerBasedEight_x_CustomNotificationSummaryText": "Welcome Tips", - "IPH_ScalableIphTimerBasedEight_x_CustomNotificationTitle": "Connect your Android phone", - "IPH_ScalableIphTimerBasedEight_x_CustomUiType": "Notification", - "IPH_ScalableIphTimerBasedEight_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedFive_availability": "any", - "IPH_ScalableIphTimerBasedFive_blocked_by": "none", - "IPH_ScalableIphTimerBasedFive_blocking": "none", - "IPH_ScalableIphTimerBasedFive_event_1": "name:ScalableIphFiveMinTick;comparator:>=16;window:7;storage:8", - "IPH_ScalableIphTimerBasedFive_event_trigger": "name:ScalableIphTimerBasedFiveTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedFive_event_used": "name:ScalableIphTimerBasedFiveEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedFive_session_rate": "any", - "IPH_ScalableIphTimerBasedFive_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedFive_x_CustomButtonActionType": "OpenSettingsPrinter", - "IPH_ScalableIphTimerBasedFive_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedFive_x_CustomConditionHasSavedPrinter": "False", - "IPH_ScalableIphTimerBasedFive_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedFive_x_CustomNotificationBodyText": "Easily add a printer to your Chromebook so it will be ready to go", - "IPH_ScalableIphTimerBasedFive_x_CustomNotificationButtonText": "Add printer", - "IPH_ScalableIphTimerBasedFive_x_CustomNotificationId": "scalable_iph_timer_based_five", - "IPH_ScalableIphTimerBasedFive_x_CustomNotificationSummaryText": "Welcome Tips", - "IPH_ScalableIphTimerBasedFive_x_CustomNotificationTitle": "Connect a printer", - "IPH_ScalableIphTimerBasedFive_x_CustomUiType": "Notification", - "IPH_ScalableIphTimerBasedFive_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedFour_availability": "any", - "IPH_ScalableIphTimerBasedFour_blocked_by": "none", - "IPH_ScalableIphTimerBasedFour_blocking": "none", - "IPH_ScalableIphTimerBasedFour_event_1": "name:ScalableIphFiveMinTick;comparator:>=12;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_event_precondition_personalization_app": "name:ScalableIphOpenPersonalizationApp;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_event_trigger": "name:ScalableIphTimerBasedFourTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_event_used": "name:ScalableIphTimerBasedFourEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedFour_session_rate": "any", - "IPH_ScalableIphTimerBasedFour_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedFour_x_CustomButtonActionType": "OpenPersonalizationApp", - "IPH_ScalableIphTimerBasedFour_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedFour_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedFour_x_CustomNotificationBodyText": "Make your Chromebook uniquely yours with a new wallpaper", - "IPH_ScalableIphTimerBasedFour_x_CustomNotificationButtonText": "Select wallpaper", - "IPH_ScalableIphTimerBasedFour_x_CustomNotificationId": "scalable_iph_timer_based_four", - "IPH_ScalableIphTimerBasedFour_x_CustomNotificationImageType": "Wallpaper", - "IPH_ScalableIphTimerBasedFour_x_CustomNotificationSummaryText": "Welcome Tips", - "IPH_ScalableIphTimerBasedFour_x_CustomNotificationTitle": "Customize your wallpaper", - "IPH_ScalableIphTimerBasedFour_x_CustomUiType": "Notification", - "IPH_ScalableIphTimerBasedFour_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedNine_availability": "any", - "IPH_ScalableIphTimerBasedNine_blocked_by": "none", - "IPH_ScalableIphTimerBasedNine_blocking": "none", - "IPH_ScalableIphTimerBasedNine_event_1": "name:ScalableIphFiveMinTick;comparator:>=30;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_precondition_youtube_app_list": "name:ScalableIphAppListItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_precondition_youtube_shelf": "name:ScalableIphShelfItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_trigger": "name:ScalableIphTimerBasedNineTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_event_used": "name:ScalableIphTimerBasedNineEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedNine_session_rate": "any", - "IPH_ScalableIphTimerBasedNine_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedNine_x_CustomBubbleButtonText": "Open YouTube", - "IPH_ScalableIphTimerBasedNine_x_CustomBubbleIcon": "YouTubeIcon", - "IPH_ScalableIphTimerBasedNine_x_CustomBubbleId": "scalable_iph_timer_based_nine", - "IPH_ScalableIphTimerBasedNine_x_CustomBubbleText": "Watch your favorite content on YouTube", - "IPH_ScalableIphTimerBasedNine_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphTimerBasedNine_x_CustomButtonActionType": "OpenYouTube", - "IPH_ScalableIphTimerBasedNine_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedNine_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedNine_x_CustomUiType": "Bubble", - "IPH_ScalableIphTimerBasedNine_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedOne_availability": "any", - "IPH_ScalableIphTimerBasedOne_blocked_by": "none", - "IPH_ScalableIphTimerBasedOne_blocking": "none", - "IPH_ScalableIphTimerBasedOne_event_1": "name:ScalableIphFiveMinTick;comparator:>=0;window:7;storage:8", - "IPH_ScalableIphTimerBasedOne_event_trigger": "name:ScalableIphTimerBasedOneTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedOne_event_used": "name:ScalableIphTimerBasedOneEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedOne_session_rate": "any", - "IPH_ScalableIphTimerBasedOne_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedOne_x_CustomBubbleButtonText": "Open Chrome", - "IPH_ScalableIphTimerBasedOne_x_CustomBubbleIcon": "ChromeIcon", - "IPH_ScalableIphTimerBasedOne_x_CustomBubbleId": "scalable_iph_timer_based_one", - "IPH_ScalableIphTimerBasedOne_x_CustomBubbleText": "Connect to the world on your Chromebook with Chrome browser", - "IPH_ScalableIphTimerBasedOne_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphTimerBasedOne_x_CustomButtonActionType": "OpenChrome", - "IPH_ScalableIphTimerBasedOne_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedOne_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedOne_x_CustomUiType": "Bubble", - "IPH_ScalableIphTimerBasedOne_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedSeven_availability": "any", - "IPH_ScalableIphTimerBasedSeven_blocked_by": "none", - "IPH_ScalableIphTimerBasedSeven_blocking": "none", - "IPH_ScalableIphTimerBasedSeven_event_1": "name:ScalableIphFiveMinTick;comparator:>=24;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_android_app_list": "name:ScalableIphAppListItemActivationOpenGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_android_shelf": "name:ScalableIphShelfItemActivationGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_web_app_list": "name:ScalableIphAppListItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_preconditions_google_photos_web_shelf": "name:ScalableIphShelfItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_trigger": "name:ScalableIphTimerBasedSevenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_event_used": "name:ScalableIphTimerBasedSevenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedSeven_session_rate": "any", - "IPH_ScalableIphTimerBasedSeven_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedSeven_x_CustomBubbleButtonText": "Open Photos", - "IPH_ScalableIphTimerBasedSeven_x_CustomBubbleIcon": "GooglePhotosIcon", - "IPH_ScalableIphTimerBasedSeven_x_CustomBubbleId": "scalable_iph_timer_based_seven", - "IPH_ScalableIphTimerBasedSeven_x_CustomBubbleText": "Explore your favorite memories in Google Photos", - "IPH_ScalableIphTimerBasedSeven_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphTimerBasedSeven_x_CustomButtonActionType": "OpenGooglePhotos", - "IPH_ScalableIphTimerBasedSeven_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedSeven_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedSeven_x_CustomUiType": "Bubble", - "IPH_ScalableIphTimerBasedSeven_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedSix_availability": "any", - "IPH_ScalableIphTimerBasedSix_blocked_by": "none", - "IPH_ScalableIphTimerBasedSix_blocking": "none", - "IPH_ScalableIphTimerBasedSix_event_1": "name:ScalableIphFiveMinTick;comparator:>=18;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_precondition_google_play_app_list": "name:ScalableIphAppListItemActivationOpenGooglePlayStore;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_precondition_google_play_shelf": "name:ScalableIphShelfItemActivationGooglePlay;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_trigger": "name:ScalableIphTimerBasedSixTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_event_used": "name:ScalableIphTimerBasedSixEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedSix_session_rate": "any", - "IPH_ScalableIphTimerBasedSix_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedSix_x_CustomButtonActionType": "OpenPlayStore", - "IPH_ScalableIphTimerBasedSix_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedSix_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedSix_x_CustomNotificationBodyText": "Download your favorite Android apps from the Google Play Store and use them on your Chromebook", - "IPH_ScalableIphTimerBasedSix_x_CustomNotificationButtonText": "Open Play Store", - "IPH_ScalableIphTimerBasedSix_x_CustomNotificationId": "scalable_iph_timer_based_six", - "IPH_ScalableIphTimerBasedSix_x_CustomNotificationSummaryText": "Welcome Tips", - "IPH_ScalableIphTimerBasedSix_x_CustomNotificationTitle": "Install apps from the Play Store", - "IPH_ScalableIphTimerBasedSix_x_CustomUiType": "Notification", - "IPH_ScalableIphTimerBasedSix_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedTen_availability": "any", - "IPH_ScalableIphTimerBasedTen_blocked_by": "none", - "IPH_ScalableIphTimerBasedTen_blocking": "none", - "IPH_ScalableIphTimerBasedTen_event_1": "name:ScalableIphFiveMinTick;comparator:>=48;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_event_precondition_print_job": "name:ScalableIphPrintJobCreated;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_event_trigger": "name:ScalableIphTimerBasedTenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_event_used": "name:ScalableIphTimerBasedTenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedTen_session_rate": "any", - "IPH_ScalableIphTimerBasedTen_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedTen_x_CustomBubbleButtonText": "Select file", - "IPH_ScalableIphTimerBasedTen_x_CustomBubbleIcon": "PrintJobsIcon", - "IPH_ScalableIphTimerBasedTen_x_CustomBubbleId": "scalable_iph_timer_based_ten", - "IPH_ScalableIphTimerBasedTen_x_CustomBubbleText": "Printing is easy with your Chromebook", - "IPH_ScalableIphTimerBasedTen_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphTimerBasedTen_x_CustomButtonActionType": "OpenFileManager", - "IPH_ScalableIphTimerBasedTen_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedTen_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedTen_x_CustomUiType": "Bubble", - "IPH_ScalableIphTimerBasedTen_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedThree_availability": "any", - "IPH_ScalableIphTimerBasedThree_blocked_by": "none", - "IPH_ScalableIphTimerBasedThree_blocking": "none", - "IPH_ScalableIphTimerBasedThree_event_1": "name:ScalableIphFiveMinTick;comparator:>=2;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_precondition_google_docs_app_list": "name:ScalableIphAppListItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_precondition_google_docs_shelf": "name:ScalableIphShelfItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_trigger": "name:ScalableIphTimerBasedThreeTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_event_used": "name:ScalableIphTimerBasedThreeEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedThree_session_rate": "any", - "IPH_ScalableIphTimerBasedThree_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedThree_x_CustomBubbleButtonText": "Open Docs", - "IPH_ScalableIphTimerBasedThree_x_CustomBubbleIcon": "GoogleDocsIcon", - "IPH_ScalableIphTimerBasedThree_x_CustomBubbleId": "scalable_iph_timer_based_three", - "IPH_ScalableIphTimerBasedThree_x_CustomBubbleText": "Create, edit, and collaborate with Google Docs", - "IPH_ScalableIphTimerBasedThree_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphTimerBasedThree_x_CustomButtonActionType": "OpenGoogleDocs", - "IPH_ScalableIphTimerBasedThree_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedThree_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedThree_x_CustomUiType": "Bubble", - "IPH_ScalableIphTimerBasedThree_x_CustomVersionNumber": "1", - "IPH_ScalableIphTimerBasedTwo_availability": "any", - "IPH_ScalableIphTimerBasedTwo_blocked_by": "none", - "IPH_ScalableIphTimerBasedTwo_blocking": "none", - "IPH_ScalableIphTimerBasedTwo_event_1": "name:ScalableIphFiveMinTick;comparator:>=1;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_event_precondition_launcher": "name:ScalableIphAppListShown;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_event_trigger": "name:ScalableIphTimerBasedTwoTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_event_used": "name:ScalableIphAppListShown;comparator:any;window:7;storage:8", - "IPH_ScalableIphTimerBasedTwo_session_rate": "any", - "IPH_ScalableIphTimerBasedTwo_session_rate_impact": "none", - "IPH_ScalableIphTimerBasedTwo_x_CustomBubbleId": "scalable_iph_timer_based_two", - "IPH_ScalableIphTimerBasedTwo_x_CustomBubbleText": "Search and find your apps in the Launcher \u25c9", - "IPH_ScalableIphTimerBasedTwo_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphTimerBasedTwo_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphTimerBasedTwo_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphTimerBasedTwo_x_CustomUiType": "Bubble", - "IPH_ScalableIphTimerBasedTwo_x_CustomVersionNumber": "1" - }, - "enable_features": [ - "IPH_ScalableIphTimerBasedEight", - "IPH_ScalableIphTimerBasedFive", - "IPH_ScalableIphTimerBasedFour", - "IPH_ScalableIphTimerBasedNine", - "IPH_ScalableIphTimerBasedOne", - "IPH_ScalableIphTimerBasedSeven", - "IPH_ScalableIphTimerBasedSix", - "IPH_ScalableIphTimerBasedTen", - "IPH_ScalableIphTimerBasedThree", - "IPH_ScalableIphTimerBasedTwo", - "ScalableIph" - ], - "disable_features": [ - "ShelfLauncherNudge" - ] - }, - { - "name": "UnlockedBased_BETA_20231204", - "params": { - "IPH_ScalableIphUnlockedBasedEight_availability": "any", - "IPH_ScalableIphUnlockedBasedEight_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedEight_blocking": "none", - "IPH_ScalableIphUnlockedBasedEight_event_1": "name:ScalableIphUnlocked;comparator:>=7;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedEight_event_trigger": "name:ScalableIphUnlockedBasedEightTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedEight_event_used": "name:ScalableIphUnlockedBasedEightEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedEight_session_rate": "any", - "IPH_ScalableIphUnlockedBasedEight_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedEight_x_CustomBubbleButtonText": "Connect phone", - "IPH_ScalableIphUnlockedBasedEight_x_CustomBubbleId": "scalable_iph_unlocked_based_eight", - "IPH_ScalableIphUnlockedBasedEight_x_CustomBubbleText": "Quickly reply to your messages from your Android phone", - "IPH_ScalableIphUnlockedBasedEight_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedEight_x_CustomButtonActionType": "OpenPhoneHub", - "IPH_ScalableIphUnlockedBasedEight_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedEight_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedEight_x_CustomConditionPhoneHubOnboardingEligible": "True", - "IPH_ScalableIphUnlockedBasedEight_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedEight_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedFive_availability": "any", - "IPH_ScalableIphUnlockedBasedFive_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedFive_blocking": "none", - "IPH_ScalableIphUnlockedBasedFive_event_1": "name:ScalableIphUnlocked;comparator:>=4;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_precondition_google_docs_app_list": "name:ScalableIphAppListItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_precondition_google_docs_shelf": "name:ScalableIphShelfItemActivationGoogleDocs;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_trigger": "name:ScalableIphUnlockedBasedFiveTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_event_used": "name:ScalableIphUnlockedBasedFiveEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFive_session_rate": "any", - "IPH_ScalableIphUnlockedBasedFive_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedFive_x_CustomBubbleButtonText": "Open Docs", - "IPH_ScalableIphUnlockedBasedFive_x_CustomBubbleIcon": "GoogleDocsIcon", - "IPH_ScalableIphUnlockedBasedFive_x_CustomBubbleId": "scalable_iph_unlocked_based_five", - "IPH_ScalableIphUnlockedBasedFive_x_CustomBubbleText": "Create, edit, and collaborate with Google Docs", - "IPH_ScalableIphUnlockedBasedFive_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedFive_x_CustomButtonActionType": "OpenGoogleDocs", - "IPH_ScalableIphUnlockedBasedFive_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedFive_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedFive_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedFive_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedFour_availability": "any", - "IPH_ScalableIphUnlockedBasedFour_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedFour_blocking": "none", - "IPH_ScalableIphUnlockedBasedFour_event_1": "name:ScalableIphUnlocked;comparator:>=3;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_precondition_google_play_app_list": "name:ScalableIphAppListItemActivationOpenGooglePlayStore;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_precondition_google_play_shelf": "name:ScalableIphShelfItemActivationGooglePlay;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_trigger": "name:ScalableIphUnlockedBasedFourTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_event_used": "name:ScalableIphUnlockedBasedFourEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedFour_session_rate": "any", - "IPH_ScalableIphUnlockedBasedFour_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedFour_x_CustomBubbleButtonText": "Open Play Store", - "IPH_ScalableIphUnlockedBasedFour_x_CustomBubbleIcon": "PlayStoreIcon", - "IPH_ScalableIphUnlockedBasedFour_x_CustomBubbleId": "scalable_iph_unlocked_based_four", - "IPH_ScalableIphUnlockedBasedFour_x_CustomBubbleText": "Get your favorite apps from the Play Store", - "IPH_ScalableIphUnlockedBasedFour_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedFour_x_CustomButtonActionType": "OpenPlayStore", - "IPH_ScalableIphUnlockedBasedFour_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedFour_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedFour_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedFour_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedNine_availability": "any", - "IPH_ScalableIphUnlockedBasedNine_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedNine_blocking": "none", - "IPH_ScalableIphUnlockedBasedNine_event_1": "name:ScalableIphUnlocked;comparator:>=8;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_precondition_youtube_app_list": "name:ScalableIphAppListItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_precondition_youtube_shelf": "name:ScalableIphShelfItemActivationYouTube;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_trigger": "name:ScalableIphUnlockedBasedNineTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_event_used": "name:ScalableIphUnlockedBasedNineEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedNine_session_rate": "any", - "IPH_ScalableIphUnlockedBasedNine_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedNine_x_CustomBubbleButtonText": "Open YouTube", - "IPH_ScalableIphUnlockedBasedNine_x_CustomBubbleIcon": "YouTubeIcon", - "IPH_ScalableIphUnlockedBasedNine_x_CustomBubbleId": "scalable_iph_unlocked_based_nine", - "IPH_ScalableIphUnlockedBasedNine_x_CustomBubbleText": "Watch your favorite content on YouTube", - "IPH_ScalableIphUnlockedBasedNine_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedNine_x_CustomButtonActionType": "OpenYouTube", - "IPH_ScalableIphUnlockedBasedNine_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedNine_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedNine_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedNine_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedOne_availability": "any", - "IPH_ScalableIphUnlockedBasedOne_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedOne_blocking": "none", - "IPH_ScalableIphUnlockedBasedOne_event_1": "name:ScalableIphUnlocked;comparator:>=0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedOne_event_trigger": "name:ScalableIphUnlockedBasedOneTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedOne_event_used": "name:ScalableIphUnlockedBasedOneEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedOne_session_rate": "any", - "IPH_ScalableIphUnlockedBasedOne_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedOne_x_CustomBubbleButtonText": "Open Chrome", - "IPH_ScalableIphUnlockedBasedOne_x_CustomBubbleIcon": "ChromeIcon", - "IPH_ScalableIphUnlockedBasedOne_x_CustomBubbleId": "scalable_iph_unlocked_based_one", - "IPH_ScalableIphUnlockedBasedOne_x_CustomBubbleText": "Connect to the world on your Chromebook with Chrome browser", - "IPH_ScalableIphUnlockedBasedOne_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedOne_x_CustomButtonActionType": "OpenChrome", - "IPH_ScalableIphUnlockedBasedOne_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedOne_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedOne_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedOne_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedSeven_availability": "any", - "IPH_ScalableIphUnlockedBasedSeven_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedSeven_blocking": "none", - "IPH_ScalableIphUnlockedBasedSeven_event_1": "name:ScalableIphUnlocked;comparator:>=6;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSeven_event_trigger": "name:ScalableIphUnlockedBasedSevenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSeven_event_used": "name:ScalableIphUnlockedBasedSevenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSeven_session_rate": "any", - "IPH_ScalableIphUnlockedBasedSeven_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomBubbleButtonText": "Add printer", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomBubbleIcon": "PrintJobsIcon", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomBubbleId": "scalable_iph_unlocked_based_seven", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomBubbleText": "Easily add a printer to your Chromebook", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomButtonActionType": "OpenSettingsPrinter", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomConditionHasSavedPrinter": "False", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedSeven_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedSix_availability": "any", - "IPH_ScalableIphUnlockedBasedSix_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedSix_blocking": "none", - "IPH_ScalableIphUnlockedBasedSix_event_1": "name:ScalableIphUnlocked;comparator:>=5;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_android_app_list": "name:ScalableIphAppListItemActivationOpenGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_android_shelf": "name:ScalableIphShelfItemActivationGooglePhotosAndroid;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_web_app_list": "name:ScalableIphAppListItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_preconditions_google_photos_web_shelf": "name:ScalableIphShelfItemActivationGooglePhotosWeb;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_trigger": "name:ScalableIphUnlockedBasedSixTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_event_used": "name:ScalableIphUnlockedBasedSixEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedSix_session_rate": "any", - "IPH_ScalableIphUnlockedBasedSix_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedSix_x_CustomBubbleButtonText": "Open Photos", - "IPH_ScalableIphUnlockedBasedSix_x_CustomBubbleIcon": "GooglePhotosIcon", - "IPH_ScalableIphUnlockedBasedSix_x_CustomBubbleId": "scalable_iph_unlocked_based_six", - "IPH_ScalableIphUnlockedBasedSix_x_CustomBubbleText": "Explore your favorite memories in Google Photos", - "IPH_ScalableIphUnlockedBasedSix_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedSix_x_CustomButtonActionType": "OpenGooglePhotos", - "IPH_ScalableIphUnlockedBasedSix_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedSix_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedSix_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedSix_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedTen_availability": "any", - "IPH_ScalableIphUnlockedBasedTen_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedTen_blocking": "none", - "IPH_ScalableIphUnlockedBasedTen_event_1": "name:ScalableIphUnlocked;comparator:>=9;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_event_precondition_print_job": "name:ScalableIphPrintJobCreated;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_event_trigger": "name:ScalableIphUnlockedBasedTenTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_event_used": "name:ScalableIphUnlockedBasedTenEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTen_session_rate": "any", - "IPH_ScalableIphUnlockedBasedTen_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedTen_x_CustomBubbleButtonText": "Select file", - "IPH_ScalableIphUnlockedBasedTen_x_CustomBubbleIcon": "PrintJobsIcon", - "IPH_ScalableIphUnlockedBasedTen_x_CustomBubbleId": "scalable_iph_unlocked_based_ten", - "IPH_ScalableIphUnlockedBasedTen_x_CustomBubbleText": "Printing is easy with your Chromebook", - "IPH_ScalableIphUnlockedBasedTen_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedTen_x_CustomButtonActionType": "OpenFileManager", - "IPH_ScalableIphUnlockedBasedTen_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedTen_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedTen_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedTen_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedThree_availability": "any", - "IPH_ScalableIphUnlockedBasedThree_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedThree_blocking": "none", - "IPH_ScalableIphUnlockedBasedThree_event_1": "name:ScalableIphUnlocked;comparator:>=2;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_event_precondition_personalization_app": "name:ScalableIphOpenPersonalizationApp;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_event_trigger": "name:ScalableIphUnlockedBasedThreeTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_event_used": "name:ScalableIphUnlockedBasedThreeEventUsed;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedThree_session_rate": "any", - "IPH_ScalableIphUnlockedBasedThree_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedThree_x_CustomBubbleButtonText": "Select wallpaper", - "IPH_ScalableIphUnlockedBasedThree_x_CustomBubbleId": "scalable_iph_unlocked_based_three", - "IPH_ScalableIphUnlockedBasedThree_x_CustomBubbleText": "Make your Chromebook uniquely yours with a new wallpaper", - "IPH_ScalableIphUnlockedBasedThree_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedThree_x_CustomButtonActionType": "OpenPersonalizationApp", - "IPH_ScalableIphUnlockedBasedThree_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedThree_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedThree_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedThree_x_CustomVersionNumber": "1", - "IPH_ScalableIphUnlockedBasedTwo_availability": "any", - "IPH_ScalableIphUnlockedBasedTwo_blocked_by": "none", - "IPH_ScalableIphUnlockedBasedTwo_blocking": "none", - "IPH_ScalableIphUnlockedBasedTwo_event_1": "name:ScalableIphUnlocked;comparator:>=1;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_event_precondition_launcher": "name:ScalableIphAppListShown;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_event_trigger": "name:ScalableIphUnlockedBasedTwoTriggered;comparator:==0;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_event_used": "name:ScalableIphAppListShown;comparator:any;window:7;storage:8", - "IPH_ScalableIphUnlockedBasedTwo_session_rate": "any", - "IPH_ScalableIphUnlockedBasedTwo_session_rate_impact": "none", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomBubbleId": "scalable_iph_unlocked_based_two", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomBubbleText": "Search and find your apps in the Launcher \u25c9", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomBubbleTitle": "Welcome Tips", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomConditionClientAgeInDays": "6", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomConditionNetworkConnection": "Online", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomUiType": "Bubble", - "IPH_ScalableIphUnlockedBasedTwo_x_CustomVersionNumber": "1" - }, - "enable_features": [ - "IPH_ScalableIphUnlockedBasedEight", - "IPH_ScalableIphUnlockedBasedFive", - "IPH_ScalableIphUnlockedBasedFour", - "IPH_ScalableIphUnlockedBasedNine", - "IPH_ScalableIphUnlockedBasedOne", - "IPH_ScalableIphUnlockedBasedSeven", - "IPH_ScalableIphUnlockedBasedSix", - "IPH_ScalableIphUnlockedBasedTen", - "IPH_ScalableIphUnlockedBasedThree", - "IPH_ScalableIphUnlockedBasedTwo", - "ScalableIph" - ], - "disable_features": [ - "ShelfLauncherNudge" - ] - } - ] - } - ], "ScaleScrollbarAnimationTiming": [ { "platforms": [ @@ -24384,21 +21831,18 @@ ] } ], - "SearchEngineChoiceClearInvalidPref": [ + "SearchEngineExplicitChoiceDialog": [ { "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" + "windows", + "mac" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "ClearCountryPrefForStoredUnknownCountry" + "SearchEngineExplicitChoiceDialog", + "SearchEngineUnconditionalDialog" ] } ] @@ -24486,6 +21930,25 @@ ] } ], + "SearchPrefetchBeaconLogging": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SearchPrefetchBeaconLogging" + ] + } + ] + } + ], "SearchPrefetchHighPriorityPrefetches": [ { "platforms": [ @@ -24581,6 +22044,25 @@ ] } ], + "SelectivePermissionsIntervention": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SelectivePermissionsIntervention" + ] + } + ] + } + ], "SendEmptyGestureScrollUpdate": [ { "platforms": [ @@ -24664,21 +22146,6 @@ ] } ], - "ServerBasedTranscriptionForScreencast": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "InternalServerSideSpeechRecognition" - ] - } - ] - } - ], "ServiceWorkerAutoPreload": [ { "platforms": [ @@ -24716,98 +22183,16 @@ "mac", "windows" ], - "experiments": [ - { - "name": "PreflightForDSE", - "params": { - "AvoidUnnecessaryBeforeUnloadCheckSyncMode": "WithSendBeforeUnload" - }, - "enable_features": [ - "AvoidUnnecessaryBeforeUnloadCheckSync", - "PrewarmServiceWorkerRegistrationForDSE", - "ReduceCallingServiceWorkerRegisteredStorageKeysOnStartup", - "ServiceWorkerBackgroundUpdateForRegisteredStorageKeys", - "ServiceWorkerMergeFindRegistrationForClientUrl" - ], - "disable_features": [ - "ServiceWorkerBackgroundUpdateForFindRegistrationForClientUrl", - "ServiceWorkerBackgroundUpdateForServiceWorkerScopeCache" - ] - }, - { - "name": "BackgroundUpdateForScopeCache", - "params": { - "AvoidUnnecessaryBeforeUnloadCheckSyncMode": "WithSendBeforeUnload" - }, - "enable_features": [ - "AvoidUnnecessaryBeforeUnloadCheckSync", - "PrewarmServiceWorkerRegistrationForDSE", - "ReduceCallingServiceWorkerRegisteredStorageKeysOnStartup", - "ServiceWorkerBackgroundUpdateForRegisteredStorageKeys", - "ServiceWorkerBackgroundUpdateForServiceWorkerScopeCache", - "ServiceWorkerMergeFindRegistrationForClientUrl" - ], - "disable_features": [ - "ServiceWorkerBackgroundUpdateForFindRegistrationForClientUrl" - ] - }, - { - "name": "BackgroundUpdateForRegistration", - "params": { - "AvoidUnnecessaryBeforeUnloadCheckSyncMode": "WithSendBeforeUnload" - }, - "enable_features": [ - "AvoidUnnecessaryBeforeUnloadCheckSync", - "PrewarmServiceWorkerRegistrationForDSE", - "ReduceCallingServiceWorkerRegisteredStorageKeysOnStartup", - "ServiceWorkerBackgroundUpdateForFindRegistrationForClientUrl", - "ServiceWorkerBackgroundUpdateForRegisteredStorageKeys", - "ServiceWorkerBackgroundUpdateForServiceWorkerScopeCache" - ], - "disable_features": [ - "ServiceWorkerMergeFindRegistrationForClientUrl" - ] - } - ] - } - ], - "ServiceWorkerStaticRouterRaceNetworkRequestPerformanceImprovement": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], "experiments": [ { "name": "Enabled", "enable_features": [ - "ServiceWorkerStaticRouterRaceNetworkRequestPerformanceImprovement", - "ServiceWorkerStaticRouterRaceRequestFix2" - ] - } - ] - } - ], - "ServiceWorkerSubresourceCancelPendingCallbacksBeforeFetchRestart": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CancelPendingCallbacksBeforeFetchRestart" + "PrewarmServiceWorkerRegistrationForDSE", + "ServiceWorkerBackgroundUpdateForFindRegistrationForClientUrl", + "ServiceWorkerBackgroundUpdateForServiceWorkerScopeCache" + ], + "disable_features": [ + "ServiceWorkerMergeFindRegistrationForClientUrl" ] } ] @@ -24941,21 +22326,6 @@ ] } ], - "ShareInWebContextMenuIOS": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ShareInWebContextMenuIOS" - ] - } - ] - } - ], "SharedHighlightingIphClank": [ { "platforms": [ @@ -25083,26 +22453,6 @@ ] } ], - "SharingDisableVapid": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SharingDisableVapid" - ] - } - ] - } - ], "SharingHubDesktopScreenshots": [ { "platforms": [ @@ -25220,6 +22570,24 @@ ] } ], + "SidePanelFlyoverAnimation": [ + { + "platforms": [ + "chromeos", + "fuchsia", + "linux", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SidePanelFlyoverAnimation" + ] + } + ] + } + ], "SidePanelPinningWithResponsiveToolbar": [ { "platforms": [ @@ -25247,31 +22615,6 @@ ] } ], - "SideSearchInProductHelp": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "availability": "any", - "event_trigger": "name:side_search_iph_tgr;comparator:==0;window:90;storage:360", - "event_used": "name:side_search_opened;comparator:==0;window:90;storage:360", - "session_rate": "<3" - }, - "enable_features": [ - "IPH_SideSearch" - ] - } - ] - } - ], "SigninPromoLimitsExperiment": [ { "platforms": [ @@ -25289,6 +22632,131 @@ ] } ], + "SigninPromoOnAvatarPill": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SigninPromoOnAvatarPill" + ] + } + ] + } + ], + "SigninSurveyAndroidBookmarkPromo": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "o2YBX3ZJc0tK1KeaPYj0UveLWhmf" + }, + "enable_features": [ + "ChromeAndroidIdentitySurveyBookmarkPromo" + ] + } + ] + } + ], + "SigninSurveyAndroidFirstRun": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "HhgAhQYhw0tK1KeaPYj0NeTaRKBh" + }, + "enable_features": [ + "ChromeAndroidIdentitySurveyFirstRun" + ] + } + ] + } + ], + "SigninSurveyAndroidNtpAccountAvatarTap": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "DujcsCGkZ0tK1KeaPYj0RGm9FgKX" + }, + "enable_features": [ + "ChromeAndroidIdentitySurveyNtpAccountAvatarTap" + ] + } + ] + } + ], + "SigninSurveyAndroidNtpPromo": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "15CWgMniG0tK1KeaPYj0RkWoZ4B9" + }, + "enable_features": [ + "ChromeAndroidIdentitySurveyNtpPromo" + ] + } + ] + } + ], + "SigninSurveyAndroidNtpSigninButton": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "yirfCKnhD0tK1KeaPYj0P9BTzPNw" + }, + "enable_features": [ + "ChromeAndroidIdentitySurveyNtpSigninButton" + ] + } + ] + } + ], + "SigninSurveyAndroidWeb": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "en_site_id": "36F2N72TP0tK1KeaPYj0SdXcHEJ4" + }, + "enable_features": [ + "ChromeAndroidIdentitySurveyWeb" + ] + } + ] + } + ], "SimdutfBase64Encode": [ { "platforms": [ @@ -25481,6 +22949,24 @@ ] } ], + "Skills": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SkillsEnabled" + ] + } + ] + } + ], "SkipDefaultBrowserPromoInFirstRun": [ { "platforms": [ @@ -25658,6 +23144,21 @@ ] } ], + "SmoothScrollingUseDelegate": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SmoothScrollingUseDelegate" + ] + } + ] + } + ], "SnapshotInSwift": [ { "platforms": [ @@ -25673,46 +23174,6 @@ ] } ], - "SoftNavigationDetectionAdvancedPaintAttribution": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SoftNavigationDetectionAdvancedPaintAttribution" - ] - } - ] - } - ], - "SoftNavigationDetectionPrePaintBasedAttribution": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SoftNavigationDetectionPrePaintBasedAttribution" - ] - } - ] - } - ], "SonomaAccessibilityActivationRefinements": [ { "platforms": [ @@ -25857,7 +23318,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -25896,41 +23356,6 @@ ] } ], - "StandardizedTimerClamping": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "StandardizedTimerClamping" - ] - } - ] - } - ], - "StartupImprovements": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableStartupImprovements" - ] - } - ] - } - ], "StaticStorageQuota": [ { "platforms": [ @@ -25952,7 +23377,7 @@ ] } ], - "StickyActivationTest2": [ + "StickyActivationTest3": [ { "platforms": [ "android", @@ -26014,22 +23439,6 @@ ] } ], - "StrictHighRankProcessLRU": [ - { - "platforms": [ - "android", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled_20250728", - "enable_features": [ - "StrictHighRankProcessLRU" - ] - } - ] - } - ], "StringWidthCache": [ { "platforms": [ @@ -26048,7 +23457,7 @@ ] } ], - "SubframeProcessShutdownDelay": [ + "StructuredCloningForMessaging": [ { "platforms": [ "chromeos", @@ -26056,58 +23465,11 @@ "mac", "windows" ], - "experiments": [ - { - "name": "EnabledDelay10s", - "params": { - "delay_seconds": "10" - }, - "enable_features": [ - "SubframeProcessShutdownDelay" - ] - }, - { - "name": "EnabledDelay40s", - "params": { - "delay_seconds": "40" - }, - "enable_features": [ - "SubframeProcessShutdownDelay" - ] - } - ] - } - ], - "SubresourceFilterPrewarm": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], "experiments": [ { "name": "Enabled", "enable_features": [ - "SubresourceFilterPrewarm" - ] - } - ] - } - ], - "SupervisedUserBlockInterstitialV3": [ - { - "platforms": [ - "android", - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SupervisedUserBlockInterstitialV3" + "StructuredCloningForMessaging" ] } ] @@ -26140,12 +23502,10 @@ { "name": "Enabled_Win_Cros", "params": { - "suppress_memory_listeners_mask": "0000000200000200000000000000000000000000000000000", - "suppress_memory_monitor_mask": "00000000020200" + "suppress_memory_listeners_mask": "0000000200000200000000000000000000000000000000000" }, "enable_features": [ - "SuppressMemoryListeners", - "SuppressMemoryMonitor" + "SuppressMemoryListeners" ] } ] @@ -26212,35 +23572,10 @@ ] } ], - "SyncBookmarksLimit": [ + "SymphoniaMp3Decoding": [ { "platforms": [ - "android", "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Limit250k", - "params": { - "sync-bookmarks-limit-value": "250000" - }, - "enable_features": [ - "SyncBookmarksLimit" - ] - } - ] - } - ], - "SyncDetermineAccountManagedStatus": [ - { - "platforms": [ - "android", - "chromeos", - "ios", "linux", "mac", "windows" @@ -26249,7 +23584,7 @@ { "name": "Enabled", "enable_features": [ - "SyncDetermineAccountManagedStatus" + "SymphoniaMp3Decoding" ] } ] @@ -26298,6 +23633,26 @@ ] } ], + "SyncRecordDeviceStatisticsMetrics": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncRecordDeviceStatisticsMetrics" + ] + } + ] + } + ], "SyncShowBookmarksLimitExceededError": [ { "platforms": [ @@ -26318,6 +23673,21 @@ ] } ], + "SyncThemesIos": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncThemesIos" + ] + } + ] + } + ], "SyncTrustedVaultErrorMessageDuration": [ { "platforms": [ @@ -26333,16 +23703,21 @@ ] } ], - "SysPkJPandVKMv3": [ + "SyncValidateAccessToken": [ { "platforms": [ - "chromeos" + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "ImeManifestV3" + "SyncValidateAccessToken" ] } ] @@ -26489,21 +23864,6 @@ ] } ], - "TabGridEmptyThumbnail": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabGridEmptyThumbnail" - ] - } - ] - } - ], "TabGroupInteractionsDesktop": [ { "platforms": [ @@ -26514,35 +23874,23 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_NewTabsAddToActiveGroup", + "enable_features": [ + "NewTabAddsToActiveGroup" + ] + }, + { + "name": "Enabled_TabGroupMenuChanges", "enable_features": [ "BookmarkTabGroupConversion", "CreateNewTabGroupAppMenuTopLevel", - "NewTabAddsToActiveGroup", "ShowTabGroupsMacSystemMenu", - "TabGroupMenuImprovements", "TabGroupMenuMoreEntryPoints" ] } ] } ], - "TabGroupParityAndroidV2": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabGroupEntryPointsAndroid", - "TabGroupParityBottomSheetAndroid" - ] - } - ] - } - ], "TabGroupSuggestions": [ { "platforms": [ @@ -26658,28 +24006,6 @@ ] } ], - "TabstripComboButton": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "tab_search_toolbar_button": "true" - }, - "enable_features": [ - "TabstripComboButton" - ] - } - ] - } - ], "TabstripDeclutter": [ { "platforms": [ @@ -26733,68 +24059,37 @@ ] } ], - "TaskManagerDesktopRefresh": [ + "TaiyakiAllUsers": [ { "platforms": [ - "windows", - "mac", - "linux", - "chromeos" + "ios" ], "experiments": [ { - "name": "TaskManagerDesktopRefresh", + "name": "Enabled_20260216", + "params": { + "choice_screen_surface": "all" + }, "enable_features": [ - "TaskManagerDesktopRefresh" + "Taiyaki" ] } ] } ], - "TcpSocketPoolLimitRandomization": [ + "TextInputClientNestedLoop": [ { "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" + "mac" ], "experiments": [ { - "name": "Enabled_256", + "name": "EnabledWithEventMask", "params": { - "TcpSocketPoolLimitRandomizationBase": "0.000001", - "TcpSocketPoolLimitRandomizationCapacity": "256", - "TcpSocketPoolLimitRandomizationMinimum": "0.01", - "TcpSocketPoolLimitRandomizationNoise": "0.2" + "enable_event_mask": "true" }, "enable_features": [ - "TcpSocketPoolLimitRandomization" - ] - }, - { - "name": "Enabled_128", - "params": { - "TcpSocketPoolLimitRandomizationBase": "0.000001", - "TcpSocketPoolLimitRandomizationCapacity": "128", - "TcpSocketPoolLimitRandomizationMinimum": "0.01", - "TcpSocketPoolLimitRandomizationNoise": "0.2" - }, - "enable_features": [ - "TcpSocketPoolLimitRandomization" - ] - }, - { - "name": "Enabled_64", - "params": { - "TcpSocketPoolLimitRandomizationBase": "0.000001", - "TcpSocketPoolLimitRandomizationCapacity": "64", - "TcpSocketPoolLimitRandomizationMinimum": "0.01", - "TcpSocketPoolLimitRandomizationNoise": "0.2" - }, - "enable_features": [ - "TcpSocketPoolLimitRandomization" + "TextInputClientUseNestedLoop" ] } ] @@ -26835,6 +24130,7 @@ "ThreadPoolForegroundBlockingTimeouts": [ { "platforms": [ + "android", "chromeos", "linux", "mac", @@ -26884,6 +24180,26 @@ ] } ], + "ThrottleFrameSinksOnInteractionExperiment": [ + { + "platforms": [ + "chromeos", + "android", + "android_webview", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ThrottleFrameSinksOnInteraction" + ] + } + ] + } + ], "ThrottleMainFrameTo60HzMacV3": [ { "platforms": [ @@ -26931,25 +24247,6 @@ ] } ], - "ToolbarPinning": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ToolbarPinning" - ] - } - ] - } - ], "ToolbarSnapshotRefactor": [ { "platforms": [ @@ -26965,21 +24262,6 @@ ] } ], - "ToolbarTabletResizeRefactor": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ToolbarTabletResizeRefactor" - ] - } - ] - } - ], "TouchToSearchCallout": [ { "platforms": [ @@ -27062,6 +24344,24 @@ ] } ], + "TranslateToastStudy": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_20260209", + "enable_features": [ + "TranslateToast" + ] + } + ] + } + ], "TransportSecurityFileWriterScheduleAndroid": [ { "platforms": [ @@ -27235,54 +24535,6 @@ ] } ], - "UIEnableSharedImageCacheForGpu": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UIEnableSharedImageCacheForGpu" - ] - } - ] - } - ], - "UMA-NonUniformity-Trial-1-Percent": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "ios", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "group_01", - "params": { - "delta": "0.01" - }, - "enable_features": [ - "UMANonUniformityLogNormal" - ] - } - ] - } - ], "UMA-Pseudo-Metrics-Effect-Injection-25-Percent": [ { "platforms": [ @@ -27401,9 +24653,10 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWithExplicitSigninForExtensionsAndBookmarks", "params": { - "ExplicitSigninForExtensions": "false" + "ExplicitSigninForBookmarks": "true", + "ExplicitSigninForExtensions": "true" }, "enable_features": [ "ForcedDiceMigration", @@ -27413,9 +24666,10 @@ ] }, { - "name": "EnabledWithExplicitSigninForExtensions", + "name": "Enabled", "params": { - "ExplicitSigninForExtensions": "true" + "ExplicitSigninForBookmarks": "false", + "ExplicitSigninForExtensions": "false" }, "enable_features": [ "ForcedDiceMigration", @@ -27445,16 +24699,33 @@ ] } ], - "UpdateInstanceLimitDefinition": [ + "UnthrottleAsyncTouchMoves": [ { "platforms": [ - "android" + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_UnthrottledWhenGsuUnconsumed", + "params": { + "policy": "unthrottled_when_gsu_unconsumed" + }, "enable_features": [ - "RobustWindowManagement" + "UnthrottleAsyncTouchMoves" + ] + }, + { + "name": "Enabled_UnthrottledAlways", + "params": { + "policy": "unthrottled_always" + }, + "enable_features": [ + "UnthrottleAsyncTouchMoves" ] } ] @@ -27583,7 +24854,6 @@ "platforms": [ "android", "android_webview", - "android_weblayer", "fuchsia", "ios", "linux", @@ -27614,36 +24884,6 @@ ] } ], - "UseFreedesktopSecretKeyProvider": [ - { - "platforms": [ - "linux" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UseFreedesktopSecretKeyProvider" - ] - } - ] - } - ], - "UseFreedesktopSecretKeyProviderForEncryption": [ - { - "platforms": [ - "linux" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UseFreedesktopSecretKeyProviderForEncryption" - ] - } - ] - } - ], "UseHeuristicForFindingEditor": [ { "platforms": [ @@ -27746,6 +24986,21 @@ ] } ], + "UseSceneViewController": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "UseSceneViewController" + ] + } + ] + } + ], "UseSmartRefForGPUFenceHandle": [ { "platforms": [ @@ -27823,37 +25078,6 @@ ] } ], - "UserLevelMemoryPressureSignal": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "UserLevelMemoryPressureSignalOn4GbDevices", - "UserLevelMemoryPressureSignalOn6GbDevices" - ] - } - ] - } - ], - "UserLevelMemoryPressureSignalMetricsOnly": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UserLevelMemoryPressureSignalMetricsOnly" - ] - } - ] - } - ], "UserValueDefaultBrowserStrings": [ { "platforms": [ @@ -27871,11 +25095,30 @@ ] } ], + "V8BytecodeVerification": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "V8Flag_verify_bytecode_light" + ] + } + ] + } + ], "V8CodeFlushing": [ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -27938,6 +25181,44 @@ ] } ], + "V8EnforceGlobalHeapLimit": [ + { + "platforms": [ + "android", + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "maximum_global_heap_limit_factor": "2" + }, + "enable_features": [ + "V8Flag_enforce_global_heap_limit" + ] + } + ] + }, + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "maximum_global_heap_limit_factor": "8" + }, + "enable_features": [ + "V8Flag_enforce_global_heap_limit" + ] + } + ] + } + ], "V8ExternalMemoryAccountedInGlobalLimit": [ { "platforms": [ @@ -27965,7 +25246,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -28008,7 +25288,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -28030,7 +25309,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -28088,11 +25366,33 @@ ] } ], + "V8MemoryReducerDelay": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "30", + "params": { + "V8MemoryReducerDelayInSeconds": "30" + }, + "enable_features": [ + "V8MemoryReducerDelay" + ] + } + ] + } + ], "V8NewOldGenerationHeapSize": [ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -28183,7 +25483,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview", "chromeos", "fuchsia", @@ -28213,7 +25512,6 @@ "mac", "windows", "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -28307,7 +25605,6 @@ { "platforms": [ "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -28331,6 +25628,33 @@ ] } ], + "V8Turbolev": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Disabled", + "disable_features": [ + "V8Flag_turbolev" + ] + }, + { + "name": "Enabled", + "enable_features": [ + "V8Flag_turbolev" + ], + "disable_benchmarking": true + } + ] + } + ], "VSyncDecoding": [ { "platforms": [ @@ -28352,6 +25676,27 @@ ] } ], + "VariationsStickyNoopTest": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "VariationsStickyNoopTest" + ] + } + ] + } + ], "VariationsStickyPersistence": [ { "platforms": [ @@ -28386,7 +25731,6 @@ "linux", "ios", "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -28472,6 +25816,25 @@ ] } ], + "VerticalTabs": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "VerticalTabs", + "VerticalTabsPreviewBadge" + ] + } + ] + } + ], "VideoConferenceDLCUIRollout": [ { "platforms": [ @@ -28510,24 +25873,6 @@ ] } ], - "VisibilityAwareResourceScheduler": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_20230807", - "enable_features": [ - "VisibilityAwareResourceScheduler" - ] - } - ] - } - ], "VisitedLinksOn404": [ { "platforms": [ @@ -28570,40 +25915,6 @@ ] } ], - "VizDirectCompositorThreadIpcAndroid": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledFSM", - "enable_features": [ - "VizDirectCompositorThreadIpcFrameSinkManager" - ], - "disable_features": [ - "VizDirectCompositorThreadIpcNonRoot" - ] - }, - { - "name": "EnabledNonRoot", - "enable_features": [ - "VizDirectCompositorThreadIpcNonRoot" - ], - "disable_features": [ - "VizDirectCompositorThreadIpcFrameSinkManager" - ] - }, - { - "name": "Control", - "disable_features": [ - "VizDirectCompositorThreadIpcFrameSinkManager", - "VizDirectCompositorThreadIpcNonRoot" - ] - } - ] - } - ], "VizWithIoMessagePump": [ { "platforms": [ @@ -28793,11 +26104,30 @@ ] } ], - "WebOtpBackendAuto": [ + "WebHistoryUseNewApi": [ { "platforms": [ "android", - "android_weblayer" + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebHistoryUseNewApi" + ] + } + ] + } + ], + "WebOtpBackendAuto": [ + { + "platforms": [ + "android" ], "experiments": [ { @@ -28935,7 +26265,6 @@ "linux", "ios", "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -29127,6 +26456,31 @@ ] } ], + "WebRTC-MediaTaskQueuePriorities": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "fuchsia", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AomVpxUsePresentationThreadType", + "IOThreadInteractiveThreadType", + "UseHighPriorityThreadGroup", + "WebRtcUseMediaThreadTypes" + ] + } + ] + } + ], "WebRTC-NoSdpMangleUfragRestrictedAddresses": [ { "platforms": [ @@ -29162,7 +26516,6 @@ { "platforms": [ "android", - "android_weblayer", "chromeos", "linux", "mac", @@ -29179,7 +26532,6 @@ { "platforms": [ "android", - "android_weblayer", "chromeos", "linux", "mac", @@ -29234,7 +26586,6 @@ "fuchsia", "linux", "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -29253,7 +26604,6 @@ "fuchsia", "linux", "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -29351,8 +26701,7 @@ "fuchsia", "linux", "ios", - "android", - "android_weblayer" + "android" ], "experiments": [ { @@ -29370,7 +26719,6 @@ "fuchsia", "linux", "android", - "android_weblayer", "android_webview" ], "experiments": [ @@ -29458,6 +26806,21 @@ ] } ], + "WebSerialWiredDevicesAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_20260302", + "enable_features": [ + "WebSerialWiredDevicesAndroid" + ] + } + ] + } + ], "WebUIBundledCodeCache": [ { "platforms": [ @@ -29540,25 +26903,6 @@ ] } ], - "WebUIReloadButtonStudy": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Control_20251030", - "disable_features": [ - "InitialWebUI", - "WebUIReloadButton" - ] - } - ] - } - ], "WebUITabStripDeprecation": [ { "platforms": [ @@ -29574,28 +26918,6 @@ ] } ], - "WebViewAutoGrantStorageAccessAPI": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "EnabledWithIncludes", - "enable_features": [ - "WebViewAutoSAA", - "WebViewDigitalAssetLinksLoadIncludes" - ] - }, - { - "name": "EnabledWithoutIncludes", - "enable_features": [ - "WebViewAutoSAA" - ] - } - ] - } - ], "WebViewBypassProvisionalCookieManager": [ { "platforms": [ @@ -29626,16 +26948,16 @@ ] } ], - "WebViewDisableCHIPS": [ + "WebViewDeferStartupGmsCalls": [ { "platforms": [ "android_webview" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260206", "enable_features": [ - "WebViewDisableCHIPS" + "WebViewDeferStartupGmsCalls" ] } ] @@ -29666,12 +26988,18 @@ "name": "BackgroundInit", "enable_features": [ "WebViewBackgroundTracingInit" + ], + "disable_features": [ + "WebViewEarlyTracingInit" ] }, { "name": "EarlyInit", "enable_features": [ "WebViewEarlyTracingInit" + ], + "disable_features": [ + "WebViewBackgroundTracingInit" ] } ] @@ -29692,6 +27020,21 @@ ] } ], + "WebViewFasterGetDefaultUserAgent": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebViewFasterGetDefaultUserAgent" + ] + } + ] + } + ], "WebViewFileSystemAccessDirectoryIterationBlocklistCheckReenable": [ { "platforms": [ @@ -29860,21 +27203,6 @@ ] } ], - "WebViewRecordAppDataDirectorySize": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebViewRecordAppDataDirectorySize" - ] - } - ] - } - ], "WebViewReducedFinchTime": [ { "platforms": [ @@ -29921,36 +27249,6 @@ ] } ], - "WebViewSafeAreaIncludesSystemBars": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebViewSafeAreaIncludesSystemBars" - ] - } - ] - } - ], - "WebViewSeparateResourceContext": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebViewSeparateResourceContext" - ] - } - ] - } - ], "WebViewSharedStorageAPI": [ { "platforms": [ @@ -30020,6 +27318,21 @@ ] } ], + "WebViewTestNonembeddedLowEntropySource": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled_20260209", + "enable_features": [ + "WebViewTestNonembeddedLowEntropySource" + ] + } + ] + } + ], "WebViewThreadReduction": [ { "platforms": [ @@ -30053,36 +27366,6 @@ ] } ], - "WebViewThreadSafeMedia": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebViewThreadSafeMedia" - ] - } - ] - } - ], - "WebViewTrackpadAndMouseTextSelectionImprovements": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled_20240424", - "enable_features": [ - "MouseAndTrackpadDropdownMenu" - ] - } - ] - } - ], "WebViewUseMetricsUploadServiceOnlySdkRuntime": [ { "platforms": [ @@ -30098,7 +27381,7 @@ ] } ], - "WebViewXRequestedWithHeaderControl": [ + "WebViewUseNonembeddedLowEntropySource": [ { "platforms": [ "android_webview" @@ -30107,7 +27390,7 @@ { "name": "Enabled", "enable_features": [ - "WebViewXRequestedWithHeaderControl" + "WebViewUseNonembeddedLowEntropySource" ] } ] @@ -30237,57 +27520,6 @@ ] } ], - "WhatsNewRefresh": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "en_site_id": "p5xavcMU50ugnJ3q1cK0R26c3Tsi" - }, - "enable_features": [ - "WhatsNewDesktopRefresh" - ] - } - ] - } - ], - "WhatsNewSparkEdition": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_benefits", - "params": { - "whats_new_customization": "BENEFITS", - "whats_new_survey_id": "PsSZ5E6nP0ugnJ3q1cK0WcE1Zf8H" - }, - "enable_features": [ - "Spark" - ] - }, - { - "name": "Enabled_original", - "params": { - "whats_new_customization": "ORIGINAL", - "whats_new_survey_id": "nGcgtQoLx0ugnJ3q1cK0SbfqkdQd" - }, - "enable_features": [ - "Spark" - ] - } - ] - } - ], "WidevinePersistentLicenseSupport": [ { "platforms": [ @@ -30549,20 +27781,5 @@ } ] } - ], - "iOSCPEPerformanceImprovements": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Disabled", - "enable_features": [ - "CredentialProviderPerformanceImprovements" - ] - } - ] - } ] } 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 8cbb8345..cb23d2ad 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 @@ -4066,8 +4066,8 @@ enum WebFeature { kEffectiveAlignContentForTableCell = 4774, kUserFeatureNgOptimizedImage = 4775, kCSSAtRulePageMargin = 4776, - kOBSOLETE_ThirdPartyCookieDeprecation_AllowByEnterprisePolicyCookieAllowedForUrls = - 4777, + kOBSOLETE_ThirdPartyCookieDeprecation_AllowByEnterprisePolicyCookieAllowedForUrls + = 4777, kUserFeatureNgAfterRender = 4778, kUserFeatureNgHydration = 4779, kCapturedSurfaceControl = 4780, @@ -4525,11 +4525,11 @@ enum WebFeature { kSrcSetUsedHigherDensityImageFromCache = 5219, kHTMLElementWritingSuggestions = 5220, kCSSPseudoOpen = 5221, - kAdScriptInStackOnGeoLocation = 5222, - kAdScriptInStackOnClipboardRead = 5223, - kAdScriptInStackOnBluetooth = 5224, - kAdScriptInStackOnMicrophoneRead = 5225, - kAdScriptInStackOnCameraRead = 5226, + kOBSOLETE_AdScriptInStackOnGeoLocation = 5222, + kOBSOLETE_AdScriptInStackOnClipboardRead = 5223, + kOBSOLETE_AdScriptInStackOnBluetooth = 5224, + kOBSOLETE_AdScriptInStackOnMicrophoneRead = 5225, + kOBSOLETE_AdScriptInStackOnCameraRead = 5226, kClipboardCustomFormatRead = 5227, kClipboardCustomFormatWrite = 5228, kClipboardSvgRead = 5229, @@ -4631,8 +4631,8 @@ enum WebFeature { kScrollButtonPseudoElement = 5323, kScrollMarkerPseudoElement = 5324, kOBSOLETE_V8AITranslatorFactory_Availability_Method = 5325, - kGeolocationWouldSucceedWhenAdScriptInStack = 5326, - kAdScriptInStackOnWatchGeoLocation = 5327, + kOBSOLETE_GeolocationWouldSucceedWhenAdScriptInStack = 5326, + kOBSOLETE_AdScriptInStackOnWatchGeoLocation = 5327, kDeviceBoundSessionRegistered = 5328, kOBSOLETE_V8AILanguageDetectorFactory_Availability_Method = 5329, kCrossPartitionSameOriginBlobURLFetch = 5330, @@ -4857,18 +4857,18 @@ enum WebFeature { kInputParsedParentSelect = 5546, kInputParsedAncestorSelect = 5547, kCSSSelectorPseudoHasSlotted = 5548, - kSelectMultipleShowPopup = 5549, + kOBSOLETE_SelectMultipleShowPopup = 5549, kSharedWorkerExtendedLifetimeFeatureEnabled = 5550, kSharedWorkerExtendedLifetimeIsTrue = 5551, // The items above roughly this point are available in the M137 branch. - kEditContextTextFormatUpdateAddListener = 5552, - kEditContextTextFormatUpdateFireEvent = 5553, - kEditContextTextFormatUpdateTextFormatThicknessOrStyleNotNone = 5554, + kOBSOLETE_EditContextTextFormatUpdateAddListener = 5552, + kOBSOLETE_EditContextTextFormatUpdateFireEvent = 5553, + kOBSOLETE_EditContextTextFormatUpdateTextFormatThicknessOrStyleNotNone = 5554, kC2PAManifest = 5555, kLanguageModel_Append = 5556, kIntegrityPolicyInServiceWorkerResponse = 5557, - kEditContextTextFormatUnderlineStyle = 5558, - kEditContextTextFormatUnderlineThickness = 5559, + kOBSOLETE_EditContextTextFormatUnderlineStyle = 5558, + kOBSOLETE_EditContextTextFormatUnderlineThickness = 5559, kProofreader_IncludeCorrectionTypes = 5560, kProofreader_IncludeCorrectionExplanations = 5561, kProofreader_ExpectedInputLanguages = 5562, @@ -4931,10 +4931,10 @@ enum WebFeature { kLocalNetworkAccessNonSecureContextAllowedDeprecationTrial = 5617, kCSPUrlHashes = 5618, kCSPEvalHashes = 5619, - kWebAppManifestNameLocalized = 5620, - kWebAppManifestShortNameLocalized = 5621, - kWebAppManifestDescriptionLocalized = 5622, - kWebAppManifestIconsLocalized = 5623, + kOBSOLETE_WebAppManifestNameLocalized = 5620, + kOBSOLETE_WebAppManifestShortNameLocalized = 5621, + kOBSOLETE_WebAppManifestDescriptionLocalized = 5622, + kOBSOLETE_WebAppManifestIconsLocalized = 5623, kHTMLControlledFrameElement = 5624, kSlowDeserialization = 5625, kSharedWorkerStartOnAndroid = 5626, @@ -4972,7 +4972,7 @@ enum WebFeature { kMulticastControllerJoinGroupFunction = 5656, kMulticastControllerLeaveGroupFunction = 5657, kMulticastControllerJoinedGroupsAttribute = 5658, - kContainerNameQueryFailedTreeScope = 5659, + kOBSOLETE_ContainerNameQueryFailedTreeScope = 5659, kLocalNetworkAccessWebSocketResourceNotKnownPrivate = 5660, kCSSPseudoElementUsesImplicitAnchor = 5661, kLineClampByLinesOverflows = 5662, @@ -5096,14 +5096,45 @@ enum WebFeature { kAudioContextAsyncTransitionToRunningStateRead = 5780, kAudioContextAsyncTransitionToSuspendedStateRead = 5781, kGetComputedStylePseudoElementWithoutColon = 5782, - kGeolocationRequestPositionWithPotentiallyUpToDateWatchedCachedPosition = 5783, + kGeolocationRequestPositionWithPotentiallyUpToDateWatchedCachedPosition = + 5783, kAnchorCaseSensitiveMatch = 5784, kAnchorCaseInsensitiveMatch = 5785, kPrerenderActivationByFormSubmission = 5786, kLinkRelModulePreloadStyle = 5787, kAudioContextPlaybackStats = 5788, + kParseFromStringXML = 5789, + kNonParentOriginInitiatedNavigationOfSubframe = 5790, + kModelContextRegisterTool = 5791, + kModelContextRegisterDeclarativeTool = 5792, + kLanguageModel_ContextUsage = 5793, + kLanguageModel_ContextWindow = 5794, + kLanguageModel_MeasureContextUsage = 5795, + kV8WindowClient_Navigate_Method = 5796, + kLanguageModel_OnQuotaOverflow = 5797, + kLanguageModel_OnContextOverflow = 5798, + kModelContextExecuteTool = 5799, + kModelContextExecuteDeclarativeTool = 5800, + kModelContextExecuteDeclarativeAutosubmit = 5801, + kPrerender2CrossOriginIframes = 5802, + kHTMLGeolocationElement = 5803, + kHTMLInstallElement = 5804, + kHTMLUserMediaElement = 5805, + kAutofillEvent = 5806, + kWebAppManifestMigrateFrom = 5807, + kWebAppManifestMigrateTo = 5808, + kLongAnimationFrameTimingStyleDuration = 5809, + kLongAnimationFrameTimingLayoutDuration = 5810, + kPerformanceScriptTimingForcedStyleDuration = 5811, + kPerformanceScriptTimingForcedLayoutDuration = 5812, + kPaymentRequestGetSecurePaymentConfirmationCapabilities = 5813, + kOpaqueRange = 5814, + kHTMLButtonElementTypeChangedWhileConnected = 5815, + kHTMLInputElementTypeChangedWhileConnected = 5816, + kHTMLButtonElementTypeChangedWhileDisconnected = 5817, + kHTMLInputElementTypeChangedWhileDisconnected = 5818, - // Add new features immediately above this line. Don't change assigned + // Add new features immediately above this line. Don't change the existing // numbers of any item, and don't reuse removed slots. Also don't add extra // spaces or comments in this file. Comments belong next to the usage of // these constants in code. 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 230fbc90..ec6f13d3 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 @@ -514,7 +514,9 @@ struct WebPreferences { // WebView and by `kWebPayments` feature flag everywhere. bool payment_request_enabled = false; - bool ai_prompt_api_enabled = false; + // Enables the origin trial Built-in AI APIs, for use within DevTools and + // devtools extension panels. + bool ai_ot_apis_enabled = false; [EnableIf=is_android] bool should_screenshot_on_mainframe_same_doc_navigation = true; diff --git a/tools/under-control/src/third_party/blink/renderer/core/css/css_result_rule.idl b/tools/under-control/src/third_party/blink/renderer/core/css/css_result_rule.idl new file mode 100755 index 00000000..15ecfb11 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/css/css_result_rule.idl @@ -0,0 +1,7 @@ +// 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=CSSMixins] +interface CSSResultRule : CSSGroupingRule { +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/css/css_style_sheet_init.idl b/tools/under-control/src/third_party/blink/renderer/core/css/css_style_sheet_init.idl index 07beceba..893506f0 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/css/css_style_sheet_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/css/css_style_sheet_init.idl @@ -3,6 +3,7 @@ // found in the LICENSE file. dictionary CSSStyleSheetInit { + [RuntimeEnabled=CSSStyleSheetInitBaseURL] DOMString? baseURL = null; (MediaList or DOMString) media = ""; boolean alternate = false; boolean disabled = false; 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 3f1139da..e5a6fe32 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 @@ -177,11 +177,11 @@ namespace { bool IsRestrictorOrLogicalOperator(const CSSParserToken& token) { // FIXME: it would be more efficient to use lower-case always for tokenValue. - return EqualIgnoringASCIICase(token.Value(), "not") || - EqualIgnoringASCIICase(token.Value(), "and") || - EqualIgnoringASCIICase(token.Value(), "or") || - EqualIgnoringASCIICase(token.Value(), "only") || - EqualIgnoringASCIICase(token.Value(), "layer"); + return EqualIgnoringAsciiCase(token.Value(), "not") || + EqualIgnoringAsciiCase(token.Value(), "and") || + EqualIgnoringAsciiCase(token.Value(), "or") || + EqualIgnoringAsciiCase(token.Value(), "only") || + EqualIgnoringAsciiCase(token.Value(), "layer"); } bool ConsumeUntilCommaInclusive(CSSParserTokenStream& stream) { diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/abstract_range.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/abstract_range.idl index 5877a87d..a6582bd7 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/abstract_range.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/abstract_range.idl @@ -3,13 +3,17 @@ // found in the LICENSE file. // https://dom.spec.whatwg.org/#interface-abstractrange +// Note: This interface diverges from the spec to support OpaqueRange +// (crbug.com/421421332), which when the OpaqueRange feature flag is +// enabled, returns null for startContainer/endContainer to hide internal +// DOM structure. [ Exposed=Window ] interface AbstractRange { - readonly attribute Node startContainer; + readonly attribute Node? startContainer; readonly attribute unsigned long startOffset; - readonly attribute Node endContainer; + readonly attribute Node? endContainer; readonly attribute unsigned long endOffset; readonly attribute boolean collapsed; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/attribute_part.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/attribute_part.idl deleted file mode 100755 index 92d8803b..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/attribute_part.idl +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://crbug.com/1453291 -// https://github.com/WICG/webcomponents/blob/gh-pages/proposals/DOM-Parts.md - -[RuntimeEnabled=DOMPartsAPI,Exposed=Window] -interface AttributePart : NodePart { - [RaisesException] constructor(PartRoot root, Element element, DOMString localName, optional PartInit init = {}); - // For now, HTML only, don't deal with prefix or namespaceURI. - readonly attribute DOMString localName; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/child_node.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/child_node.idl index 141c0692..e684c1f3 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/child_node.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/child_node.idl @@ -26,4 +26,12 @@ interface mixin ChildNode { [Unscopable, RaisesException, CEReactions] undefined after((Node or DOMString or TrustedScript)... nodes); [Unscopable, RaisesException, CEReactions] undefined replaceWith((Node or DOMString or TrustedScript)... nodes); [Unscopable, RaisesException, CEReactions] undefined remove(); + + // https://github.com/whatwg/html/issues/11669 + [RuntimeEnabled=DocumentPatching, RaisesException] void beforeHTML(DOMString html, optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void beforeHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void afterHTML(DOMString html, optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void afterHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void replaceWithHTML(DOMString html, optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void replaceWithHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/child_node_part.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/child_node_part.idl deleted file mode 100755 index 22d36525..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/child_node_part.idl +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://crbug.com/1453291 -// https://github.com/WICG/webcomponents/blob/gh-pages/proposals/DOM-Parts.md - -[RuntimeEnabled=DOMPartsAPI,Exposed=Window] -interface ChildNodePart : Part { - [RaisesException] constructor(PartRoot root, Node previousSibling, Node nextSibling, optional PartInit init = {}); - readonly attribute Node previousSibling; - readonly attribute Node nextSibling; - readonly attribute FrozenArray children; - [RaisesException] void replaceChildren((Node or DOMString)... nodes); -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/css_pseudo_element.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/css_pseudo_element.idl index 2fe895a3..5b0babb1 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/css_pseudo_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/css_pseudo_element.idl @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// https://www.w3.org/TR/css-pseudo-4/#CSSPseudoElement-interface + [ RuntimeEnabled=CSSPseudoElementInterface, Exposed=Window @@ -12,3 +14,6 @@ interface CSSPseudoElement { readonly attribute (Element or CSSPseudoElement) parent; CSSPseudoElement? pseudo(CSSOMString type); }; + +[RuntimeEnabled=GeometryUtilsForCSSPseudoElement] +CSSPseudoElement includes GeometryUtils; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/document.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/document.idl index 25bbd5c2..854605ce 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/document.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/document.idl @@ -97,7 +97,7 @@ typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement; [PutForwards=href, LegacyUnforgeable] readonly attribute Location? location; [RaisesException=Setter] attribute USVString domain; readonly attribute USVString referrer; - [RaisesException, RuntimeCallStatsCounter=DocumentCookie] attribute DOMString cookie; + [LogActivity=GetterOnly, RaisesException, RuntimeCallStatsCounter=DocumentCookie] attribute DOMString cookie; readonly attribute DOMString lastModified; readonly attribute DocumentReadyState readyState; @@ -219,9 +219,6 @@ typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement; // https://github.com/WICG/aom/blob/gh-pages/notification-api.md [RuntimeEnabled=AriaNotify,MeasureAs=AriaNotify] void ariaNotify(DOMString announcement, optional AriaNotificationOptions options = {}); - // The (experimental) DOM Parts API. - [RuntimeEnabled=DOMPartsAPI] DocumentPartRoot getPartRoot(); - [RuntimeEnabled=RouteMatching] readonly attribute RouteMap routeMap; // Event handler attributes diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/document_fragment.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/document_fragment.idl index 8a79f48d..1fc4b1ea 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/document_fragment.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/document_fragment.idl @@ -24,8 +24,7 @@ ] interface DocumentFragment : Node { [CallWith=Document] constructor(); - // The (experimental) DOM Parts API. - [RuntimeEnabled=DOMPartsAPI] DocumentPartRoot getPartRoot(); + // No DOM Parts API }; DocumentFragment includes ParentNode; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/document_part_root.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/document_part_root.idl deleted file mode 100755 index 51c3f7d4..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/document_part_root.idl +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://crbug.com/1453291 -// https://github.com/WICG/webcomponents/blob/gh-pages/proposals/DOM-Parts.md - -[RuntimeEnabled=DOMPartsAPI,Exposed=Window] -interface DocumentPartRoot { -}; 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 000894f8..6e22578e 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 @@ -113,14 +113,26 @@ dictionary SetHTMLUnsafeOptions { // https://github.com/whatwg/html/pull/9538 [RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe((TrustedHTML or DOMString) html); // https://wicg.github.io/sanitizer-api/#sanitizer-api - // TODO(vogelheim): Merge the two setHTMLUnsafe variants into one, once the + // TODO(vogelheim): Merge the 3 setHTMLUnsafe variants into one, once the // different RuntimeEnabled flags are both perma-enabled. [RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe((TrustedHTML or DOMString) html, SetHTMLUnsafeOptions options); + [RuntimeEnabled=TrustedTypesCreateParserOptions,RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe((TrustedHTML or DOMString) html, TrustedParserOptions options); [RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLSafe,CEReactions] void setHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=TrustedTypesCreateParserOptions,RaisesException,MeasureAs=SetHTMLSafe,CEReactions] void setHTML(DOMString html, TrustedParserOptions options); // https://github.com/whatwg/html/issues/2142 - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); + // https://github.com/whatwg/html/issues/11542 + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTML(optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTML(optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [SameObject, PutForwards=value, RuntimeEnabled=DocumentPatching] readonly attribute DOMTokenList marker; + + // https://github.com/whatwg/html/issues/11669 + [RuntimeEnabled=DocumentPatching, RaisesException] void appendHTML(DOMString html, optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void appendHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void prependHTML(DOMString html, optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void prependHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); // Declarative Shadow DOM getHTML() function. [Affects=Nothing, MeasureAs=ElementGetHTML, RaisesException] DOMString getHTML(optional GetHTMLOptions options = {}); @@ -138,13 +150,13 @@ dictionary SetHTMLUnsafeOptions { // https://drafts.csswg.org/cssom-view/#dom-element-checkvisibility [MeasureAs=ElementCheckVisibility] boolean checkVisibility(optional CheckVisibilityOptions options = {}); - [CallWith=ScriptState] Promise scrollIntoView(optional (ScrollIntoViewOptions or boolean) arg = {}); - [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(optional ScrollToOptions options = {}); - [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(unrestricted double x, unrestricted double y); - [CallWith=ScriptState] Promise scrollTo(optional ScrollToOptions options = {}); - [CallWith=ScriptState] Promise scrollTo(unrestricted double x, unrestricted double y); - [CallWith=ScriptState] Promise scrollBy(optional ScrollToOptions options = {}); - [CallWith=ScriptState] Promise scrollBy(unrestricted double x, unrestricted double y); + [CallWith=ScriptState] Promise scrollIntoView(optional (ScrollIntoViewOptions or boolean) arg = {}); + [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(optional ScrollToOptions options = {}); + [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(unrestricted double x, unrestricted double y); + [CallWith=ScriptState] Promise scrollTo(optional ScrollToOptions options = {}); + [CallWith=ScriptState] Promise scrollTo(unrestricted double x, unrestricted double y); + [CallWith=ScriptState] Promise scrollBy(optional ScrollToOptions options = {}); + [CallWith=ScriptState] Promise scrollBy(unrestricted double x, unrestricted double y); attribute unrestricted double scrollTop; attribute unrestricted double scrollLeft; readonly attribute long scrollWidth; @@ -155,9 +167,6 @@ dictionary SetHTMLUnsafeOptions { readonly attribute long clientHeight; [RuntimeEnabled=StandardizedBrowserZoom] readonly attribute double currentCSSZoom; - // Used by both Anchor Positioning and Popover - [CEReactions,RuntimeEnabled=HTMLAnchorAttribute,ImplementedAs=anchorElementForBinding] attribute Element? anchorElement; - // Non-standard API [MeasureAs=ElementScrollIntoViewIfNeeded] void scrollIntoViewIfNeeded(optional boolean centerIfNeeded); diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/form_control_range.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/form_control_range.idl deleted file mode 100755 index 27bf3e85..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/form_control_range.idl +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2025 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -[ - Exposed=Window, - RuntimeEnabled=FormControlRange -] interface FormControlRange : AbstractRange { - [CallWith=Document] constructor(); - - [RaisesException] void setFormControlRange(Node element, - unsigned long start, - unsigned long end); - - DOMRectList getClientRects(); - DOMRect getBoundingClientRect(); - stringifier; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/geometry_utils.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/geometry_utils.idl new file mode 100755 index 00000000..6de0812b --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/geometry_utils.idl @@ -0,0 +1,32 @@ +// 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. + + +// https://www.w3.org/TR/cssom-view-1/#typedefdef-geometrynode +typedef (Text or Element or CSSPseudoElement or Document) GeometryNode; + +// https://www.w3.org/TR/cssom-view-1/#enumdef-cssboxtype +enum CSSBoxType { "margin", "border", "padding", "content" }; + +// https://www.w3.org/TR/cssom-view-1/#dictdef-convertcoordinateoptions +dictionary ConvertCoordinateOptions { + CSSBoxType fromBox = "border"; + CSSBoxType toBox = "border"; +}; + +// https://www.w3.org/TR/cssom-view-1/#dictdef-boxquadoptions +dictionary BoxQuadOptions { + CSSBoxType box = "border"; + GeometryNode relativeTo; +}; + + +// https://drafts.csswg.org/cssom-view/#the-geometryutils-interface +[RuntimeEnabled=GeometryUtils] +interface mixin GeometryUtils { + sequence getBoxQuads(optional BoxQuadOptions options = {}); + DOMQuad convertQuadFromNode(DOMQuadInit quad, GeometryNode from, optional ConvertCoordinateOptions options = {}); + DOMQuad convertRectFromNode(DOMRectReadOnly rect, GeometryNode from, optional ConvertCoordinateOptions options = {}); + DOMPoint convertPointFromNode(DOMPointInit point, GeometryNode from, optional ConvertCoordinateOptions options = {}); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/global_event_handlers.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/global_event_handlers.idl index 53adf9ad..bf47ec92 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/global_event_handlers.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/global_event_handlers.idl @@ -41,6 +41,7 @@ interface mixin GlobalEventHandlers { attribute EventHandler onclick; attribute EventHandler onclose; attribute EventHandler oncommand; + [RuntimeEnabled=LoginElement] attribute EventHandler oncomplete; attribute EventHandler oncontentvisibilityautostatechange; attribute EventHandler oncontextlost; attribute EventHandler oncontextmenu; @@ -79,7 +80,7 @@ interface mixin GlobalEventHandlers { attribute EventHandler onmouseover; attribute EventHandler onmouseup; attribute EventHandler onmousewheel; - [RuntimeEnabled=OverscrollCustomization] attribute EventHandler onoverscroll; + [RuntimeEnabled=OverscrollGestures] attribute EventHandler onoverscroll; attribute EventHandler onpause; attribute EventHandler onplay; attribute EventHandler onplaying; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/node_list.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/node_list.idl index 59780eef..9770a103 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/node_list.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/node_list.idl @@ -21,6 +21,7 @@ // https://dom.spec.whatwg.org/#interface-nodelist [ + V8EnableIndexOf, Exposed=Window ] interface NodeList { [Affects=Nothing] getter Node? item(unsigned long index); diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/node_part.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/node_part.idl deleted file mode 100755 index dedb2065..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/node_part.idl +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://crbug.com/1453291 -// https://github.com/WICG/webcomponents/blob/gh-pages/proposals/DOM-Parts.md - -[RuntimeEnabled=DOMPartsAPI,Exposed=Window] -interface NodePart : Part { - [RaisesException] constructor(PartRoot root, Node node, optional PartInit init = {}); - readonly attribute Node node; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/opaque_range.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/opaque_range.idl new file mode 100755 index 00000000..a6a398b4 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/opaque_range.idl @@ -0,0 +1,17 @@ +// 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=OpaqueRange +] interface OpaqueRange : AbstractRange { + undefined disconnect(); + DOMRectList getClientRects(); + DOMRect getBoundingClientRect(); +}; + +[RuntimeEnabled=OpaqueRange] +interface mixin OpaqueRangeCreation { + [RaisesException, NewObject] OpaqueRange createValueRange(unsigned long start, unsigned long end); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/part.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/part.idl deleted file mode 100755 index 46b50885..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/part.idl +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://crbug.com/1453291 -// https://github.com/WICG/webcomponents/blob/gh-pages/proposals/DOM-Parts.md - -[RuntimeEnabled=DOMPartsAPI,Exposed=Window] -interface Part { - [ImplementedAs=rootForBindings] readonly attribute PartRoot? root; - readonly attribute FrozenArray metadata; - void disconnect(); -}; - -// While Part is not directly constructible, PartInit is used to initialize -// the subclasses of Part. -dictionary PartInit { - FrozenArray metadata; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/part_root.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/part_root.idl deleted file mode 100755 index 9078415f..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/part_root.idl +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://crbug.com/1453291 -// https://github.com/WICG/webcomponents/blob/gh-pages/proposals/DOM-Parts.md - - -[RuntimeEnabled=DOMPartsAPI,Exposed=Window] -interface mixin PartRootMixin { - // Retrieve the parts list for this PartRoot, always in tree order breaking - // ties for a Node using the order Parts were constructed. - sequence getParts(); - // Retrieve the Nodes corresponding to the NodeParts returned by getParts(), - // without building the Part objects. - [RuntimeEnabled=DOMPartsAPIMinimal] sequence getNodePartNodes(); - // Retrieve the pairs of previous/next Nodes corresponding to the - // ChildNodeParts returned by getParts(), without building the Part objects. - // Nodes are paired, so for 3 ChildNodeParts, 6 Nodes will be returned. - [RuntimeEnabled=DOMPartsAPIMinimal] sequence getChildNodePartNodes(); - // This clones the PartRoot, and also clones the Node tree itself, starting - // at the RootContainer. In the case of a DocumentPartRoot, the entire - // document tree is cloned. In the case of a ChildPartRoot, only the children - // between `previous_node` and `next_node` are included, inclusive. The - // `clone()` method returns the cloned PartRoot. - [RaisesException] PartRoot clone(); - // Return the root container for the PartRoot, which is the Document or - // DocumentFragment for a DocumentPartRoot, or the parent ContainerNode of - // a ChildNodePart. - readonly attribute Node rootContainer; -}; - -DocumentPartRoot includes PartRootMixin; -ChildNodePart includes PartRootMixin; - -typedef (DocumentPartRoot or ChildNodePart) PartRoot; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/processing_instruction.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/processing_instruction.idl index d7a40a30..45a84877 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/processing_instruction.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/processing_instruction.idl @@ -28,4 +28,12 @@ // ProcessingInstruction includes LinkStyle // https://drafts.csswg.org/cssom/#requirements-on-user-agents-implementing-the-xml-stylesheet-processing-instruction readonly attribute StyleSheet? sheet; + + [RuntimeEnabled=HTMLProcessingInstruction, Affects=Nothing] DOMString? getAttribute(DOMString name); + [RuntimeEnabled=HTMLProcessingInstruction, Affects=Nothing] boolean hasAttribute(DOMString name); + [RuntimeEnabled=HTMLProcessingInstruction, RaisesException] void setAttribute(DOMString name, DOMString value); + [RuntimeEnabled=HTMLProcessingInstruction] void removeAttribute(DOMString name); + [RuntimeEnabled=HTMLProcessingInstruction, RaisesException] void toggleAttribute(DOMString name, optional boolean force); + [RuntimeEnabled=HTMLProcessingInstruction, Affects=Nothing] boolean hasAttributes(); + [RuntimeEnabled=HTMLProcessingInstruction, Affects=Nothing] sequence getAttributeNames(); }; 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 8f5e1b0e..e877eac3 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 @@ -48,19 +48,32 @@ interface ShadowRoot : DocumentFragment { // cloned by DOM cloning operations. readonly attribute boolean clonable; + [RuntimeEnabled=DocumentPatching] readonly attribute FrozenArray marker; + // The referenceTarget attribute is the ID of an element in the shadow tree. // When the host element is the target of an IDREF attribute like // aria-activedescendant, the reference resolves to the referenceTarget. // See https://crbug.com/346835896 [RuntimeEnabled=ShadowRootReferenceTarget] attribute DOMString? referenceTarget; + // TODO(nrosenthal): remove duplicates once flags are merged. [RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe((TrustedHTML or DOMString) string); [RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe((TrustedHTML or DOMString) html, SetHTMLUnsafeOptions options); [RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLSafe,CEReactions] void setHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=TrustedTypesCreateParserOptions,RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe((TrustedHTML or DOMString) html, TrustedParserOptions options); + [RuntimeEnabled=TrustedTypesCreateParserOptions,RaisesException,MeasureAs=SetHTMLSafe,CEReactions] void setHTML(DOMString html, TrustedParserOptions options); // https://github.com/whatwg/html/issues/2142 - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); - [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(optional SetHTMLUnsafeOptions options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamAppendHTML(optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream streamHTML(optional (SetHTMLOptions or TrustedParserOptions) options = {}); + + // https://github.com/whatwg/html/issues/11669 + [RuntimeEnabled=DocumentPatching, RaisesException] void appendHTML(DOMString html, optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void appendHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void prependHTML(DOMString html, optional (SetHTMLOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=DocumentPatching, RaisesException] void prependHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); }; ShadowRoot includes DocumentOrShadowRoot; diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root_init.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root_init.idl index 2076b397..237d5582 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/shadow_root_init.idl @@ -15,6 +15,7 @@ dictionary ShadowRootInit { boolean serializable; boolean clonable; [RuntimeEnabled=ShadowRootReferenceTarget] DOMString? referenceTarget; + [RuntimeEnabled=DocumentPatching] sequence marker; // Note: if you add a parameter here, be sure to add it to the list of checks // in Element::attachShadow() for existing declarative shadow roots. }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl b/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl index 48f60982..57c29850 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl @@ -13,17 +13,11 @@ enum UnderlineThickness { "none", "thin", "thick" }; [ Exposed=Window ] interface TextFormat { - // TODO(crbug.com/354497121): Remove "RaisesException" when the `underlineStyle` - // and `underlineThickness` attributes are converted to enums as per the spec [1]. - // [1]: https://w3c.github.io/edit-context/#textformatupdateevent - [RaisesException] constructor(optional TextFormatInit options = {}); + constructor(optional TextFormatInit options = {}); readonly attribute unsigned long rangeStart; readonly attribute unsigned long rangeEnd; - // https://crbug.com/354497121 These should be UnderlineStyle and - // UnderlineThickness enumerations but the values returned by the - // implementation do not match what the IDL defines. - [MeasureAs=EditContextTextFormatUnderlineStyle] readonly attribute DOMString underlineStyle; - [MeasureAs=EditContextTextFormatUnderlineThickness] readonly attribute DOMString underlineThickness; + readonly attribute UnderlineStyle underlineStyle; + readonly attribute UnderlineThickness underlineThickness; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format_init.idl b/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format_init.idl index 260539d4..68a16c4a 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format_init.idl @@ -10,6 +10,6 @@ dictionary TextFormatInit { unsigned long rangeStart; unsigned long rangeEnd; - DOMString underlineStyle; - DOMString underlineThickness; + UnderlineStyle underlineStyle; + UnderlineThickness underlineThickness; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/event_type_names.json5 b/tools/under-control/src/third_party/blink/renderer/core/events/event_type_names.json5 index 696efa06..75b56f14 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 @@ -86,6 +86,7 @@ "contentvisibilityautostatechange", "contextlost", "contextmenu", + "contextoverflow", "contextrestored", "controllerchange", "cookiechange", @@ -223,6 +224,7 @@ "pagereveal", "pageshow", "pageswap", + "paint", "paste", "patch", "pause", @@ -316,6 +318,7 @@ "statechange", "stop", "storage", + "stream", "submit", "success", "suspend", @@ -331,6 +334,7 @@ "tonechange", "toolactivated", "toolcancel", + "toolchange", "touchcancel", "touchend", "touchmove", diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/focus_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/focus_event.idl index 6663c9d4..1f6c2337 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/focus_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/focus_event.idl @@ -30,6 +30,4 @@ ] interface FocusEvent : UIEvent { constructor(DOMString type, optional FocusEventInit eventInitDict = {}); readonly attribute EventTarget? relatedTarget; - [RuntimeEnabled=EventPseudoTargetProperty, Exposed=Window] - readonly attribute CSSPseudoElement? pseudoTarget; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/keyboard_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/keyboard_event.idl index 523ffd47..6ef9b987 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/keyboard_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/keyboard_event.idl @@ -39,8 +39,6 @@ readonly attribute boolean repeat; readonly attribute boolean isComposing; boolean getModifierState(DOMString keyArg); - [RuntimeEnabled=EventPseudoTargetProperty, Exposed=Window] - readonly attribute CSSPseudoElement? pseudoTarget; // https://w3c.github.io/uievents/#idl-interface-KeyboardEvent-initializers [CallWith=ScriptState, Measure] void initKeyboardEvent(DOMString type, diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/mouse_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/mouse_event.idl index 71ecc498..f0cbbddb 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/mouse_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/mouse_event.idl @@ -34,8 +34,6 @@ readonly attribute short button; readonly attribute unsigned short buttons; readonly attribute EventTarget? relatedTarget; - [RuntimeEnabled=EventPseudoTargetProperty, Exposed=Window] - readonly attribute CSSPseudoElement? pseudoTarget; boolean getModifierState(DOMString keyArg); // https://w3c.github.io/uievents/#idl-interface-MouseEvent-initializers diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/overscroll_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/overscroll_event.idl deleted file mode 100755 index 81cb4c74..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/events/overscroll_event.idl +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO(crbug.com/907601): Add link to w3c. - -[ - Exposed=Window, - RuntimeEnabled=OverscrollCustomization -] interface OverscrollEvent : Event { - constructor(DOMString type, boolean bubbles, optional OverscrollEventInit eventInitDict = {}); - readonly attribute double deltaX; - readonly attribute double deltaY; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/touch_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/touch_event.idl index a4a6fde4..80d28b6d 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/touch_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/touch_event.idl @@ -36,6 +36,4 @@ readonly attribute boolean metaKey; readonly attribute boolean ctrlKey; readonly attribute boolean shiftKey; - [RuntimeEnabled=EventPseudoTargetProperty, Exposed=Window] - readonly attribute CSSPseudoElement? pseudoTarget; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/ui_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/ui_event.idl index b7f2540a..30567ad1 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/ui_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/ui_event.idl @@ -35,4 +35,7 @@ optional long detail = 0); readonly attribute unsigned long which; + + [RuntimeEnabled=EventPseudoTargetProperty, Exposed=Window] + readonly attribute CSSPseudoElement? pseudoTarget; }; 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 0b91bcd4..f5bdcb81 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/functional.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" @@ -240,6 +241,11 @@ static const float minScaleChangeToTriggerZoom = 1.5f; static const float leftBoxRatio = 0.3f; static const int caretPadding = 10; +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) +static constexpr base::TimeDelta kWindowingControlsChangeTimeout = + base::Seconds(5); +#endif + namespace blink { using mojom::blink::EffectiveConnectionType; @@ -722,16 +728,6 @@ void WebViewImpl::EnableFakePageScaleAnimationForTesting(bool enable) { fake_page_scale_animation_page_scale_factor_ = 0; } -void WebViewImpl::AcceptLanguagesChanged() { - FontCache::AcceptLanguagesChanged( - String::FromUTF8(renderer_preferences_.accept_languages)); - - if (!GetPage()) - return; - - GetPage()->AcceptLanguagesChanged(); -} - gfx::Rect WebViewImpl::WidenRectWithinPageBounds(const gfx::Rect& source, int target_margin, int minimum_margin) { @@ -1052,8 +1048,6 @@ void WebViewImpl::ZoomToFindInPageRect(const gfx::Rect& rect_in_root_frame) { StartPageScaleAnimation(scroll, false, scale, kFindInPageAnimationDuration); } -#if !BUILDFLAG(IS_MAC) -// Mac has no way to open a context menu based on a keyboard event. WebInputEventResult WebViewImpl::SendContextMenuEvent() { // The contextMenuController() holds onto the last context menu that was // popped up on the page until a new one is created. We need to clear @@ -1078,11 +1072,6 @@ WebInputEventResult WebViewImpl::SendContextMenuEvent() { nullptr, kMenuSourceKeyboard); } } -#else -WebInputEventResult WebViewImpl::SendContextMenuEvent() { - return WebInputEventResult::kNotHandled; -} -#endif WebPagePopupImpl* WebViewImpl::OpenPagePopup(PagePopupClient* client) { DCHECK(client); @@ -1928,8 +1917,12 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, RuntimeEnabledFeatures::SetPaymentRequestEnabled( prefs.payment_request_enabled); - if (prefs.ai_prompt_api_enabled) { + if (prefs.ai_ot_apis_enabled) { RuntimeEnabledFeatures::SetAIPromptAPIEnabled(true); + RuntimeEnabledFeatures::SetAIPromptAPIMultimodalInputEnabled(true); + RuntimeEnabledFeatures::SetAIProofreadingAPIEnabled(true); + RuntimeEnabledFeatures::SetAIRewriterAPIEnabled(true); + RuntimeEnabledFeatures::SetAIWriterAPIEnabled(true); } #if BUILDFLAG(IS_MAC) && BUILDFLAG(USE_EXTERNAL_POPUP_MENU) @@ -2993,10 +2986,10 @@ void WebViewImpl::UpdatePageDefinedViewportConstraints( Document* document = GetPage()->DeprecatedLocalMainFrame()->GetDocument(); - Length default_min_width = + ViewportLength default_min_width = document->GetViewportData().ViewportDefaultMinWidth(); if (default_min_width.IsAuto()) - default_min_width = Length::ExtendToZoom(); + default_min_width = ViewportLength::ExtendToZoom(); float old_initial_scale = GetPageScaleConstraintsSet().PageDefinedConstraints().initial_scale; @@ -3006,11 +2999,12 @@ void WebViewImpl::UpdatePageDefinedViewportConstraints( if (SettingsImpl()->ClobberUserAgentInitialScaleQuirk() && GetPageScaleConstraintsSet().UserAgentConstraints().initial_scale != -1 && GetPageScaleConstraintsSet().UserAgentConstraints().initial_scale <= 1) { - if (description.max_width == Length::DeviceWidth() || + if (description.max_width.IsDeviceWidth() || (description.max_width.IsAuto() && GetPageScaleConstraintsSet().PageDefinedConstraints().initial_scale == - 1.0f)) + 1.0f)) { SetInitialPageScaleOverride(-1); + } } Settings& page_settings = GetPage()->GetSettings(); @@ -3173,9 +3167,11 @@ void WebViewImpl::Minimize(WindowingControlsChangeCallback callback) { if (window_show_state_change_callback_.has_value()) { std::move(callback).Run(/*succeeded=*/false); } else { + uint64_t id = base::RandUint64(); window_show_state_change_callback_.emplace( - WindowShowStateChangeType::kMinimize, std::move(callback)); + id, WindowShowStateChangeType::kMinimize, std::move(callback)); local_main_frame_host_remote_->Minimize(); + PostDelayedRejectionForAWCPromise(id); } } @@ -3184,9 +3180,11 @@ void WebViewImpl::Maximize(WindowingControlsChangeCallback callback) { if (window_show_state_change_callback_.has_value()) { std::move(callback).Run(/*succeeded=*/false); } else { + uint64_t id = base::RandUint64(); window_show_state_change_callback_.emplace( - WindowShowStateChangeType::kMaximize, std::move(callback)); + id, WindowShowStateChangeType::kMaximize, std::move(callback)); local_main_frame_host_remote_->Maximize(); + PostDelayedRejectionForAWCPromise(id); } } @@ -3195,9 +3193,11 @@ void WebViewImpl::Restore(WindowingControlsChangeCallback callback) { if (window_show_state_change_callback_.has_value()) { std::move(callback).Run(/*succeeded=*/false); } else { + uint64_t id = base::RandUint64(); window_show_state_change_callback_.emplace( - WindowShowStateChangeType::kRestore, std::move(callback)); + id, WindowShowStateChangeType::kRestore, std::move(callback)); local_main_frame_host_remote_->Restore(); + PostDelayedRejectionForAWCPromise(id); } } @@ -3216,8 +3216,11 @@ void WebViewImpl::SetResizable(bool resizable, } 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)); + uint64_t id = base::RandUint64(); + set_resizable_change_callback_.emplace(id, resizable, + std::move(callback)); local_main_frame_host_remote_->SetResizable(resizable); + PostDelayedRejectionForAWCPromise(id); } } } @@ -3261,8 +3264,8 @@ void WebViewImpl::OnResizableChanged(bool new_resizable) { } 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_->requested_resizable == new_resizable) { + std::move(set_resizable_change_callback_->callback).Run(/*succeeded=*/true); set_resizable_change_callback_.reset(); } } @@ -3299,12 +3302,36 @@ void WebViewImpl::WasRestored() { void WebViewImpl::HandleWindowShowStateChangeCallbackWith( WindowShowStateChangeType type) { if (window_show_state_change_callback_.has_value() && - window_show_state_change_callback_->first == type) { - std::move(window_show_state_change_callback_->second) + window_show_state_change_callback_->requested_action == type) { + std::move(window_show_state_change_callback_->callback) .Run(/*succeeded=*/true); window_show_state_change_callback_.reset(); } } + +void WebViewImpl::PostDelayedRejectionForAWCPromise(uint64_t id) { + GetPage() + ->GetAgentGroupScheduler() + .DefaultTaskRunner() + ->PostNonNestableDelayedTask( + FROM_HERE, + BindOnce(&WebViewImpl::RejectAWCPromise, Unretained(this), id), + kWindowingControlsChangeTimeout); +} + +void WebViewImpl::RejectAWCPromise(uint64_t id) { + if (window_show_state_change_callback_.has_value() && + window_show_state_change_callback_->id == id) { + std::move(window_show_state_change_callback_->callback) + .Run(/*succeeded=*/false); + window_show_state_change_callback_.reset(); + } else if (set_resizable_change_callback_.has_value() && + set_resizable_change_callback_->id == id) { + std::move(set_resizable_change_callback_->callback) + .Run(/*succeeded=*/false); + set_resizable_change_callback_.reset(); + } +} #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) void WebViewImpl::UpdateTargetURL(const WebURL& url, @@ -3728,8 +3755,14 @@ void WebViewImpl::UpdateRendererPreferences( SetFocusRingColor(renderer_preferences_.focus_ring_color); } - if (old_accept_languages != renderer_preferences_.accept_languages) - AcceptLanguagesChanged(); + if (old_accept_languages != renderer_preferences_.accept_languages) { + FontCache::AcceptLanguagesChanged( + String::FromUTF8(renderer_preferences_.accept_languages)); + if (GetPage()) { + GetPage()->GetSettings().SetAcceptLanguages( + String::FromUTF8(renderer_preferences_.accept_languages)); + } + } GetSettings()->SetCaretBrowsingEnabled( renderer_preferences_.caret_browsing_enabled); diff --git a/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl b/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl index c4b3c945..e5c6d554 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl @@ -70,6 +70,7 @@ enum ReferrerPolicy { [RuntimeEnabled=LocalNetworkAccessPermissionPolicy] readonly attribute IPAddressSpace targetAddressSpace; [MeasureAs=RequestIsHistoryNavigation] readonly attribute boolean isHistoryNavigation; + [RuntimeEnabled=RequestIsReloadNavigation] readonly attribute boolean isReloadNavigation; [RaisesException, CallWith=ScriptState, NewObject] Request clone(); [RuntimeEnabled=FetchRetry] RetryOptions? getRetryOptions(); diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/scroll_result.idl b/tools/under-control/src/third_party/blink/renderer/core/frame/scroll_result.idl new file mode 100755 index 00000000..0f9223f4 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/scroll_result.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. + +// TODO(crbug.com/41406914): Update this interface when spec'd. + +dictionary ScrollResult { +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 b/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 index 1dd5c9d9..d9d3a09b 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 @@ -53,6 +53,12 @@ }, data: [ + { + name: "acceptLanguages", + type: "String", + invalidate: ["AcceptLanguages"], + }, + { name: "defaultTextEncodingName", type: "String", diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/window.idl b/tools/under-control/src/third_party/blink/renderer/core/frame/window.idl index a4ef2410..ef91b559 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/frame/window.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/window.idl @@ -135,12 +135,12 @@ [MeasureAs=WindowPageXOffset, Replaceable] readonly attribute double pageXOffset; [MeasureAs=WindowScrollY, Replaceable] readonly attribute double scrollY; [MeasureAs=WindowPageYOffset, Replaceable] readonly attribute double pageYOffset; - [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(optional ScrollToOptions options = {}); - [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(unrestricted double x, unrestricted double y); - [CallWith=ScriptState] Promise scrollTo(optional ScrollToOptions options = {}); - [CallWith=ScriptState] Promise scrollTo(unrestricted double x, unrestricted double y); - [CallWith=ScriptState] Promise scrollBy(optional ScrollToOptions options = {}); - [CallWith=ScriptState] Promise scrollBy(unrestricted double x, unrestricted double y); + [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(optional ScrollToOptions options = {}); + [ImplementedAs=scrollTo, CallWith=ScriptState] Promise scroll(unrestricted double x, unrestricted double y); + [CallWith=ScriptState] Promise scrollTo(optional ScrollToOptions options = {}); + [CallWith=ScriptState] Promise scrollTo(unrestricted double x, unrestricted double y); + [CallWith=ScriptState] Promise scrollBy(optional ScrollToOptions options = {}); + [CallWith=ScriptState] Promise scrollBy(unrestricted double x, unrestricted double y); // Visual Viewport API // https://github.com/WICG/ViewportAPI diff --git a/tools/under-control/src/third_party/blink/renderer/core/geolocation/accuracy_mode.idl b/tools/under-control/src/third_party/blink/renderer/core/geolocation/accuracy_mode.idl new file mode 100755 index 00000000..f29a6669 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/geolocation/accuracy_mode.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. + +enum AccuracyMode { + "precise", + "approximate", +}; 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 1db57f11..e57208bc 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,6 @@ // https://www.w3.org/TR/geolocation-API/#position_interface -enum AccuracyMode { - "approximate", - "precise", -}; - [ Exposed=Window, ImplementedAs=Geoposition diff --git a/tools/under-control/src/third_party/blink/renderer/core/geolocation/position_options.idl b/tools/under-control/src/third_party/blink/renderer/core/geolocation/position_options.idl index 5daff907..bc067e41 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/geolocation/position_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/geolocation/position_options.idl @@ -6,4 +6,5 @@ dictionary PositionOptions { boolean enableHighAccuracy = false; [Clamp] unsigned long timeout = 0xFFFFFFFF; [Clamp] unsigned long maximumAge = 0; + [RuntimeEnabled=ApproximateGeolocationWebVisibleAPI] AccuracyMode accuracyMode="precise"; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/canvas_paint_event.idl b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/canvas_paint_event.idl new file mode 100755 index 00000000..1b25bd9e --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/canvas_paint_event.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. +interface CanvasPaintEvent : Event { + constructor(DOMString type, optional CanvasPaintEventInit eventInitDict = {}); + readonly attribute FrozenArray changedElements; +}; +dictionary CanvasPaintEventInit : EventInit { + sequence changedElements = []; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl index dcd5c334..33612db4 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl @@ -37,6 +37,8 @@ [RaisesException=Setter, CEReactions] attribute unsigned long height; [RuntimeEnabled=CanvasDrawElement] attribute boolean layoutSubtree; + [RuntimeEnabled=CanvasDrawElement] attribute EventHandler onpaint; + [RuntimeEnabled=CanvasDrawElement] void requestPaint(); [RuntimeEnabled=CanvasDrawElement, RaisesException] DOMMatrix getElementTransform(Element element, DOMMatrix draw_transform); [MeasureAs=CanvasToDataURL, RaisesException] DOMString toDataURL(optional DOMString type = "image/png", optional any quality); diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/custom/custom_element_registry.idl b/tools/under-control/src/third_party/blink/renderer/core/html/custom/custom_element_registry.idl index ac9613c4..89ac5ae7 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/custom/custom_element_registry.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/custom/custom_element_registry.idl @@ -25,3 +25,4 @@ callback CustomElementFormAssociatedCallback = void (HTMLFormElement? form); callback CustomElementFormDisabledCallback = void (boolean disabled); enum FormStateRestoreMode { "restore", "autocomplete" }; callback CustomElementFormStateRestoreCallback = void (ControlValue value, FormStateRestoreMode mode); +callback CustomElementToolFillCallback = void (DOMString value); diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/custom/element_internals.idl b/tools/under-control/src/third_party/blink/renderer/core/html/custom/element_internals.idl index 3d1a143a..7bf59760 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/custom/element_internals.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/custom/element_internals.idl @@ -31,7 +31,7 @@ interface ElementInternals { [MeasureAs=ElementInternalsStates] readonly attribute CustomStateSet states; - [RuntimeEnabled=ElementInternalsDotType] attribute DOMString type; + [RuntimeEnabled=WebMCPFormAssociatedCustomElements] void setToolParamSchema(DOMString? schema); // Access to shadowRoot from custom elements. See crbug.com/1042130 and // https://github.com/w3c/webcomponents/issues/871#issuecomment-672082936 diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_input_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_input_element.idl index 40e9141f..dd16251b 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_input_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_input_element.idl @@ -64,7 +64,7 @@ enum SelectionMode { "select", "start", "end", "preserve" }; [CEReactions, Reflect] attribute DOMString step; [CEReactions] attribute DOMString type; [CEReactions, Reflect=value] attribute DOMString defaultValue; - [CEReactions, ImplementedAs=valueForBinding, RaisesException=Setter] attribute [LegacyNullToEmptyString] DOMString value; + [LogActivity=GetterOnly, CEReactions, ImplementedAs=valueForBinding, RaisesException=Setter] attribute [LegacyNullToEmptyString] DOMString value; [CEReactions, RaisesException=Setter, CallWith=ScriptState] attribute object? valueAsDate; [RaisesException=Setter] attribute unrestricted double valueAsNumber; // Note: The spec has valueLow and valueHigh for two-valued range controls. @@ -115,3 +115,4 @@ enum SelectionMode { "select", "start", "end", "preserve" }; }; HTMLInputElement includes PopoverTargetAttributes; +HTMLInputElement includes OpaqueRangeCreation; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_text_area_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_text_area_element.idl index 47ab3c5d..31e1d6dc 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_text_area_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_text_area_element.idl @@ -42,7 +42,7 @@ readonly attribute DOMString type; [CEReactions] attribute DOMString defaultValue; - [CEReactions, ImplementedAs=valueForBinding] attribute [LegacyNullToEmptyString] DOMString value; + [LogActivity=GetterOnly, CEReactions, ImplementedAs=valueForBinding] attribute [LegacyNullToEmptyString] DOMString value; readonly attribute unsigned long textLength; readonly attribute boolean willValidate; @@ -68,3 +68,5 @@ unsigned long end, optional DOMString direction); }; + +HTMLTextAreaElement includes OpaqueRangeCreation; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_anchor_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_anchor_element.idl index 103e545d..7e2ebf0d 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_anchor_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_anchor_element.idl @@ -31,7 +31,7 @@ [CEReactions, Reflect] attribute DOMString hreflang; [RuntimeEnabled=HrefTranslate, CEReactions, Reflect] attribute DOMString hrefTranslate; [CEReactions, Reflect] attribute DOMString type; - [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; + [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url","same-origin","strict-origin","strict-origin-when-cross-origin"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; [CEReactions, ImplementedAs=textContent] attribute DOMString text; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_area_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_area_element.idl index 973e6bad..4998bf7e 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_area_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_area_element.idl @@ -31,7 +31,7 @@ [CEReactions, Reflect] attribute USVString ping; [CEReactions, Reflect] attribute DOMString rel; [SameObject, PutForwards=value] readonly attribute DOMTokenList relList; - [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; + [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url","same-origin","strict-origin","strict-origin-when-cross-origin"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; // obsolete members // https://html.spec.whatwg.org/C/#HTMLAreaElement-partial diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_credential_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_credential_element.idl new file mode 100755 index 00000000..55ee2209 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_credential_element.idl @@ -0,0 +1,17 @@ +// 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 HTMLCredentialElement : HTMLElement { + [CEReactions, Reflect] attribute DOMString type; + [CEReactions, Reflect] attribute DOMString clientId; + [CEReactions, Reflect, URL] attribute USVString configURL; + [CEReactions, Reflect] attribute DOMString loginHint; + [CEReactions, Reflect] attribute DOMString domainHint; + [CEReactions, Reflect] attribute DOMString fields; + [CEReactions, Reflect] attribute DOMString params; +}; 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 deleted file mode 100755 index 6ffb4ead..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_federation_element.idl +++ /dev/null @@ -1,10 +0,0 @@ -// 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_geolocation_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_geolocation_element.idl index 0ba65fef..a4dd644a 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_geolocation_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_geolocation_element.idl @@ -2,6 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(crbug.com/373648906): Figure out where this definition should be. +enum PermissionState { + "granted", + "denied", + "prompt" +}; + // TODO(https://crbug.com/461543463): Putting this here rather than in a // distinct file, as it's possible that we'll rename it in the near future. // diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_iframe_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_iframe_element.idl index 83722106..1bfae7bb 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_iframe_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_iframe_element.idl @@ -36,7 +36,7 @@ [CheckSecurity=ReturnValue] readonly attribute Document? contentDocument; readonly attribute Window? contentWindow; [CheckSecurity=ReturnValue] Document? getSVGDocument(); - [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; + [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url","same-origin","strict-origin","strict-origin-when-cross-origin"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; // https://w3c.github.io/webappsec-csp/embedded/#dom-htmliframeelement-csp [CEReactions, Reflect] attribute DOMString csp; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_image_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_image_element.idl index 15977fa6..0deaf4ea 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_image_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_image_element.idl @@ -41,7 +41,7 @@ readonly attribute unsigned long naturalHeight; readonly attribute boolean complete; readonly attribute DOMString currentSrc; - [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; + [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url","same-origin","strict-origin","strict-origin-when-cross-origin"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; [CEReactions, Reflect, ReflectOnly=("async", "sync", "auto"), ReflectMissing="auto", ReflectInvalid="auto"] attribute DOMString decoding; [CEReactions, MeasureAs=PriorityHints, Reflect, ReflectOnly=("low", "auto", "high"), ReflectMissing="auto", ReflectInvalid="auto"] attribute DOMString fetchPriority; [CEReactions, Reflect, ReflectOnly=("lazy", "eager", "auto"), ReflectMissing="auto", ReflectInvalid="auto"] attribute DOMString loading; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_install_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_install_element.idl index 073c2eac..6adaeefc 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_install_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_install_element.idl @@ -5,10 +5,11 @@ // https://github.com/WICG/install-element [RuntimeEnabled=InstallElement, Exposed=Window] -interface HTMLInstallElement : HTMLPermissionElement { +interface HTMLInstallElement : HTMLElement { [HTMLConstructor] constructor(); [CEReactions, Reflect, URL] attribute USVString? installURL; [CEReactions, Reflect, URL] attribute USVString? manifestId; }; -// TODO(455783637): HTMLPermissionElement should shift to `InPagePermissionMixin`. + +HTMLInstallElement includes InPagePermissionMixin; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_link_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_link_element.idl index 388e7554..db8100d3 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_link_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_link_element.idl @@ -35,7 +35,7 @@ [CEReactions, Reflect] attribute DOMString hreflang; [CEReactions, Reflect] attribute DOMString type; [Reflect, ReflectOnly=("script","style","image", "track", "font", "fetch")] attribute DOMString as; - [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; + [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url","same-origin","strict-origin","strict-origin-when-cross-origin"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy; [PutForwards=value] readonly attribute DOMTokenList sizes; [CEReactions, MeasureAs=PriorityHints, Reflect, ReflectOnly=("low", "auto", "high"), ReflectMissing="auto", ReflectInvalid="auto"] attribute DOMString fetchPriority; [CEReactions, Reflect] attribute DOMString imageSrcset; 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 index e1f9cfcc..45375424 100755 --- 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 @@ -6,4 +6,5 @@ Exposed=Window, RuntimeEnabled=LoginElement ] interface HTMLLoginElement : HTMLElement { + [CallWith=ScriptState] readonly attribute any credential; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_permission_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_permission_element.idl deleted file mode 100755 index 4edc38fb..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_permission_element.idl +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO(crbug.com/373648906): Figure out where this definition should be. -enum PermissionState { - "granted", - "denied", - "prompt" -}; - -[RuntimeEnabled=PermissionElement, Exposed=Window] -interface HTMLPermissionElement : HTMLElement { - [HTMLConstructor] constructor(); - [CEReactions, Reflect] attribute DOMString type; - - readonly attribute boolean isValid; - readonly attribute DOMString invalidReason; - - readonly attribute PermissionState initialPermissionStatus; - readonly attribute PermissionState permissionStatus; - - attribute EventHandler onpromptaction; - attribute EventHandler onpromptdismiss; - attribute EventHandler onvalidationstatuschange; - - static boolean isTypeSupported(DOMString type); -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_template_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_template_element.idl index 1858dac6..77fcf58d 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_template_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_template_element.idl @@ -46,9 +46,6 @@ [CEReactions,Reflect] attribute boolean shadowRootClonable; [Reflect] attribute boolean shadowRootSerializable; - // Used by the DOM Parts API - [Reflect, RuntimeEnabled=DOMPartsAPI] attribute boolean parseparts; - // Used by Scoped Element Registries [CEReactions, Reflect, RuntimeEnabled=ScopedCustomElementRegistry] attribute DOMString shadowRootCustomElementRegistry; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_user_media_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_user_media_element.idl index 8b455aa8..5b15c36b 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_user_media_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_user_media_element.idl @@ -7,6 +7,9 @@ interface HTMLUserMediaElement : HTMLElement { [HTMLConstructor] constructor(); [CEReactions, Reflect] attribute DOMString type; + attribute EventHandler onstream; + + static boolean isTypeSupported(DOMString type); }; HTMLUserMediaElement includes InPagePermissionMixin; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/media/html_media_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/media/html_media_element.idl index 0b0a0757..9c5f09fa 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/media/html_media_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/media/html_media_element.idl @@ -46,6 +46,7 @@ enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" }; const unsigned short NETWORK_NO_SOURCE = 3; [ImplementedAs=getNetworkState] readonly attribute unsigned short networkState; [CEReactions] attribute DOMString preload; + [RuntimeEnabled=LazyLoadVideoAndAudio, CEReactions, Reflect, ReflectOnly=("lazy","eager"), ReflectMissing="eager", ReflectInvalid="eager"] attribute DOMString loading; readonly attribute TimeRanges buffered; void load(); CanPlayTypeResult canPlayType(DOMString type); diff --git a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_intercept_options.idl b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_intercept_options.idl index f508669b..494de593 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_intercept_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_intercept_options.idl @@ -3,7 +3,10 @@ // found in the LICENSE file. // https://wicg.github.io/navigation-api/ +[SupportsTaskAttribution] callback NavigationInterceptHandler = Promise(); + +[SupportsTaskAttribution] callback NavigationInterceptPrecommitHandler = Promise(NavigationPrecommitController controller); dictionary NavigationInterceptOptions { diff --git a/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc index 66a46ce7..7c2c43c1 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc +++ b/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc @@ -537,10 +537,6 @@ bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) { return base::FeatureList::IsEnabled(features::kSoftNavigationDetection); } - if (trial_name == "PermissionElement") { - return base::FeatureList::IsEnabled(blink::features::kPermissionElement); - } - if (trial_name == "UserMediaElement") { return base::FeatureList::IsEnabled(blink::features::kUserMediaElement); } diff --git a/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event.idl b/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event.idl new file mode 100755 index 00000000..fb6821a4 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event.idl @@ -0,0 +1,12 @@ +// 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=OverscrollGestures +] interface OverscrollEvent : Event { + constructor(DOMString type, optional OverscrollEventInit eventInitDict = {}); + readonly attribute Element overscrollElement; +}; + diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/overscroll_event_init.idl b/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event_init.idl similarity index 54% rename from tools/under-control/src/third_party/blink/renderer/core/events/overscroll_event_init.idl rename to tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event_init.idl index 0503d086..78c07223 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/overscroll_event_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event_init.idl @@ -1,10 +1,7 @@ -// Copyright 2018 The Chromium Authors +// 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. -// TODO(crbug.com/907601): Add link to w3c. - dictionary OverscrollEventInit : EventInit { - double deltaX = 0.0; - double deltaY = 0.0; + Element? overscrollElement = null; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context.idl b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context.idl index 249740c4..41d53080 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context.idl @@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// https://webmachinelearning.github.io/webmcp/#model-context-container + [ Exposed=Window, + SecureContext, RuntimeEnabled=WebMCP ] interface ModelContext { - [CallWith=ScriptState, RaisesException] undefined registerTool(ToolRegistrationParams params); - [RaisesException] undefined unregisterTool(DOMString tool_name); - - [CallWith=ScriptState, RaisesException] undefined provideContext(ProvideContextParams params); - undefined clearContext(); + [CallWith=ScriptState, RaisesException, MeasureAs=ModelContextRegisterTool] undefined registerTool(ModelContextTool tool); + [RaisesException] undefined unregisterTool(DOMString name); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_supplement.idl b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_supplement.idl index e46648b6..cef492cb 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_supplement.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_supplement.idl @@ -2,10 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// https://webmachinelearning.github.io/webmcp/#navigator-extension + [ RuntimeEnabled=WebMCP, ImplementedAs=ModelContextSupplement ] partial interface Navigator { - [Replaceable] readonly attribute ModelContext modelContext; + [SecureContext, SameObject] readonly attribute ModelContext modelContext; [Replaceable, RuntimeEnabled=WebMCPTesting] readonly attribute ModelContextTesting modelContextTesting; }; 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 9f7f5a3e..cd54214b 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 @@ -16,10 +16,12 @@ callback ToolsChangedCallback = void (); [ RuntimeEnabled=WebMCPTesting -] interface ModelContextTesting { +] interface ModelContextTesting : EventTarget { sequence listTools(); // 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(); + + attribute EventHandler ontoolchange; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_tool.idl b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_tool.idl new file mode 100755 index 00000000..c51564a9 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/script_tools/model_context_tool.idl @@ -0,0 +1,23 @@ +// 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. + +// https://webmachinelearning.github.io/webmcp/#model-context-tool + +dictionary ModelContextTool { + required DOMString name; + required DOMString description; + object inputSchema; + required ToolExecuteCallback execute; + ToolAnnotations annotations; +}; + +dictionary ToolAnnotations { + boolean readOnlyHint = false; +}; + +// The structure of `input` is expected to match the structure described in +// `ModelContextTool#inputSchema` above. This is currently not enforced upon +// tool execution, but will likely be when +// https://github.com/webmachinelearning/webmcp/issues/92 is addressed. +callback ToolExecuteCallback = Promise(object input); diff --git a/tools/under-control/src/third_party/blink/renderer/core/script_tools/tool_registration_params.idl b/tools/under-control/src/third_party/blink/renderer/core/script_tools/tool_registration_params.idl deleted file mode 100755 index 692c1915..00000000 --- a/tools/under-control/src/third_party/blink/renderer/core/script_tools/tool_registration_params.idl +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2025 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO(khushalsagar): Link to the explainer for details of the WebIDL. - -callback ToolFunction = Promise(any... parameters); - -dictionary AnnotationsDict { - boolean readOnlyHint; -}; - -dictionary ToolRegistrationParams { - required ToolFunction execute; - required DOMString name; - required DOMString description; - object inputSchema; - AnnotationsDict annotations; -}; - -dictionary ProvideContextParams { - required sequence tools; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/timing/interaction_contentful_paint.idl b/tools/under-control/src/third_party/blink/renderer/core/timing/interaction_contentful_paint.idl index 2e3e7be6..0e7c8f3b 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/timing/interaction_contentful_paint.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/timing/interaction_contentful_paint.idl @@ -11,6 +11,7 @@ interface InteractionContentfulPaint : PerformanceEntry { readonly attribute DOMString id; readonly attribute DOMString url; readonly attribute Element? element; + readonly attribute unsigned long long interactionId; [CallWith=ScriptState, ImplementedAs=toJSONForBinding] object toJSON(); }; 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 603fd687..b2fbb7fd 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,10 +9,11 @@ interface PerformanceLongAnimationFrameTiming : PerformanceEntry { readonly attribute DOMHighResTimeStamp styleAndLayoutStart; readonly attribute DOMHighResTimeStamp firstUIEventTimestamp; readonly attribute DOMHighResTimeStamp blockingDuration; - [RuntimeEnabled=LongAnimationFrameStyleDuration] readonly attribute DOMHighResTimeStamp styleDuration; + [RuntimeEnabled=LongAnimationFrameStyleDuration, MeasureAs=LongAnimationFrameTimingStyleDuration] readonly attribute DOMHighResTimeStamp styleDuration; + [RuntimeEnabled=LongAnimationFrameStyleDuration, MeasureAs=LongAnimationFrameTimingLayoutDuration] readonly attribute DOMHighResTimeStamp layoutDuration; [SameObject, SaveSameObject] readonly attribute FrozenArray scripts; [CallWith=ScriptState, ImplementedAs=toJSONForBinding] object toJSON(); }; -PerformanceLongAnimationFrameTiming includes PaintTimingMixin; \ No newline at end of file +PerformanceLongAnimationFrameTiming includes PaintTimingMixin; 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 a02c932b..c85901e2 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,7 +24,8 @@ interface PerformanceScriptTiming : PerformanceEntry { readonly attribute ScriptWindowAttribution windowAttribution; readonly attribute DOMHighResTimeStamp executionStart; readonly attribute DOMHighResTimeStamp forcedStyleAndLayoutDuration; - [RuntimeEnabled=LongAnimationFrameStyleDuration] readonly attribute DOMHighResTimeStamp forcedStyleDuration; + [RuntimeEnabled=LongAnimationFrameStyleDuration, MeasureAs=PerformanceScriptTimingForcedStyleDuration] readonly attribute DOMHighResTimeStamp forcedStyleDuration; + [RuntimeEnabled=LongAnimationFrameStyleDuration, MeasureAs=PerformanceScriptTimingForcedLayoutDuration] readonly attribute DOMHighResTimeStamp forcedLayoutDuration; readonly attribute DOMHighResTimeStamp pauseDuration; readonly attribute Window? window; readonly attribute DOMString sourceURL; diff --git a/tools/under-control/src/third_party/blink/renderer/core/timing/profiler.idl b/tools/under-control/src/third_party/blink/renderer/core/timing/profiler.idl index f8024644..ec07c2d0 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/timing/profiler.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/timing/profiler.idl @@ -3,7 +3,7 @@ // found in the LICENSE file. // https://wicg.github.io/js-self-profiling/#the-profiler-interface -[Exposed=Window] +[Exposed(Window ProfilerAPI, DedicatedWorker ProfilerAPIForDedicatedWorker)] interface Profiler : EventTarget { readonly attribute DOMHighResTimeStamp sampleInterval; readonly attribute boolean stopped; diff --git a/tools/under-control/src/third_party/blink/renderer/core/timing/soft_navigation_entry.idl b/tools/under-control/src/third_party/blink/renderer/core/timing/soft_navigation_entry.idl index b3a47acf..82e5d6d5 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/timing/soft_navigation_entry.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/timing/soft_navigation_entry.idl @@ -4,6 +4,9 @@ [Exposed=Window, RuntimeEnabled=SoftNavigationHeuristics] interface SoftNavigationEntry : PerformanceEntry { + readonly attribute NavigationType navigationType; + readonly attribute unsigned long long interactionId; + readonly attribute InteractionContentfulPaint largestInteractionContentfulPaint; }; SoftNavigationEntry includes PaintTimingMixin; diff --git a/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_parser_options.idl b/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_parser_options.idl new file mode 100755 index 00000000..7f796e1a --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_parser_options.idl @@ -0,0 +1,12 @@ +// 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, Worker), + RuntimeEnabled=DocumentPatching +] +interface TrustedParserOptions { + readonly attribute (Sanitizer or SanitizerConfig or SanitizerPresets) sanitizer; + readonly attribute boolean runScripts; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.idl b/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.idl index 983832e7..533a9fe0 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.idl @@ -5,7 +5,6 @@ // https://github.com/w3c/trusted-types typedef (TrustedHTML or TrustedScript or TrustedScriptURL) TrustedType; - [ Exposed=(Window, Worker) ] interface TrustedTypePolicy { @@ -13,4 +12,5 @@ typedef (TrustedHTML or TrustedScript or TrustedScriptURL) TrustedType; [CallWith=Isolate, RaisesException] TrustedHTML createHTML(DOMString input, any... args); [CallWith=Isolate, RaisesException] TrustedScript createScript(DOMString input, any... args); [CallWith=Isolate, RaisesException] TrustedScriptURL createScriptURL(DOMString input, any... args); + [RaisesException, RuntimeEnabled=DocumentPatching] TrustedParserOptions createParserOptions(SetHTMLUnsafeOptions input); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_options.idl b/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_options.idl index ef8dbd5a..94ed2c1e 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/trustedtypes/trusted_type_policy_options.idl @@ -8,8 +8,10 @@ dictionary TrustedTypePolicyOptions { CreateHTMLCallback createHTML; CreateScriptCallback createScript; CreateURLCallback createScriptURL; + CreateParserOptionsCallback createParserOptions; }; callback CreateHTMLCallback = DOMString? (DOMString input, any... args); callback CreateScriptCallback = DOMString? (DOMString input, any... args); callback CreateURLCallback = USVString? (DOMString input, any... args); +callback CreateParserOptionsCallback = any (SetHTMLUnsafeOptions input); diff --git a/tools/under-control/src/third_party/blink/renderer/extensions/chromeos/chromeos.idl b/tools/under-control/src/third_party/blink/renderer/extensions/chromeos/chromeos.idl index 449bf998..c3363ab5 100755 --- a/tools/under-control/src/third_party/blink/renderer/extensions/chromeos/chromeos.idl +++ b/tools/under-control/src/third_party/blink/renderer/extensions/chromeos/chromeos.idl @@ -5,6 +5,9 @@ [ TargetOfExposed=ChromeOSExtensions ] interface ChromeOS { + [IsolatedContext, CallWith=ExecutionContext] + readonly attribute IsolatedWebApp isolatedWebApp; + [RuntimeEnabled=BlinkExtensionChromeOSKiosk,CallWith=ExecutionContext] readonly attribute CrosKiosk kiosk; }; diff --git a/tools/under-control/src/third_party/blink/renderer/extensions/chromeos/isolated_web_app/isolated_web_app.idl b/tools/under-control/src/third_party/blink/renderer/extensions/chromeos/isolated_web_app/isolated_web_app.idl new file mode 100755 index 00000000..2a7bfbde --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/extensions/chromeos/isolated_web_app/isolated_web_app.idl @@ -0,0 +1,13 @@ +// Copyright 2026 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Isolated Web App (IWA) interface. +// +// Contains the set of blink extensions available to allowlisted IWAs in +// ChromeOS. +[ + IsolatedContext +] interface IsolatedWebApp { + // TODO(crbug.com/480146201): Introduce the `setShape` API. +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/classifier.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/classifier.idl new file mode 100755 index 00000000..381e85ff --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/classifier.idl @@ -0,0 +1,57 @@ +// 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. + +// Taxonomy API +// https://github.com/explainers-by-googlers/taxonomy-api + +dictionary ClassifierCreateOptions { + AbortSignal signal; + CreateMonitorCallback monitor; +}; + +dictionary ClassifierClassifyOptions { + DOMString context; + AbortSignal signal; +}; + +[ + Exposed=(Window), + RuntimeEnabled=AIClassifierAPI, + SecureContext +] +// TODO(crbug.com/484080220): Create api metrics. +interface Classifier { + [ + CallWith=ScriptState, + RaisesException + ] + static Promise availability(); + + [ + CallWith=ScriptState, + RaisesException + ] + static Promise create( + optional ClassifierCreateOptions options = {} + ); + + [ + CallWith=ScriptState, + RaisesException + ] + // TODO(crbug.com/485366700): Change output to match explainer output. + // For now call json.parse() on output. + Promise classify( + DOMString input, + optional ClassifierClassifyOptions options = {} + ); + + [ + CallWith=ScriptState, + RaisesException + ] + void destroy(); + + readonly attribute unrestricted double inputQuota; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl index 73154e20..c5017407 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl @@ -40,8 +40,11 @@ interface LanguageModel : EventTarget { static Promise availability( optional LanguageModelCreateCoreOptions options = {} ); + // LanguageModel.params() is deprecated for non-extension contexts and will be + // removed in a future version. [ MeasureAs=LanguageModel_Params, + RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, CallWith=ScriptState, RaisesException ] @@ -81,7 +84,21 @@ interface LanguageModel : EventTarget { ); [ - MeasureAs=LanguageModel_MeasureInputUsage, + MeasureAs=LanguageModel_MeasureContextUsage, + CallWith=ScriptState, + RaisesException + ] + Promise measureContextUsage( + LanguageModelPrompt input, + optional LanguageModelPromptOptions options = {} + ); + + // LanguageModel.measureContextUsage has been renamed to + // LanguageModel.measureInputUsage. It is deprecated for non-extension + // contexts and will be removed in a future version. + [ + RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + DeprecateAs=LanguageModel_MeasureInputUsage, CallWith=ScriptState, RaisesException ] @@ -90,17 +107,38 @@ interface LanguageModel : EventTarget { optional LanguageModelPromptOptions options = {} ); - [MeasureAs=LanguageModel_InputUsage] + [MeasureAs=LanguageModel_ContextUsage] + readonly attribute double contextUsage; + [MeasureAs=LanguageModel_ContextWindow] + readonly attribute unrestricted double contextWindow; + + // LanguageModel.inputUsage and LanguageModel.inputQuota are renamed to + // LanguageModel.contextUsage and LanguageModel.contextWindow. They are + // deprecated for non-extension contexts and will be removed in a future + // version. + [ + RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + DeprecateAs=LanguageModel_InputUsage + ] readonly attribute double inputUsage; - [MeasureAs=LanguageModel_InputQuota] + [ + RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + DeprecateAs=LanguageModel_InputQuota + ] readonly attribute unrestricted double inputQuota; - [MeasureAs=LanguageModel_TopK] + // LanguageModel.topK and LanguageModel.temperature are deprecated for + // non-extension contexts and will be removed in a future + // version. + [MeasureAs=LanguageModel_TopK, RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] readonly attribute unsigned long topK; - [MeasureAs=LanguageModel_Temperature] + [MeasureAs=LanguageModel_Temperature, RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] readonly attribute float temperature; + [MeasureAs=LanguageModel_OnQuotaOverflow, RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] attribute EventHandler onquotaoverflow; + [MeasureAs=LanguageModel_OnContextOverflow] + attribute EventHandler oncontextoverflow; [ MeasureAs=LanguageModel_Clone, 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 cf843dba..59b646c8 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 @@ -135,8 +135,8 @@ dictionary LanguageModelToolDeclaration { dictionary LanguageModelCreateCoreOptions { // Note: these two have custom out-of-range handling behavior, not in the IDL layer. // They are unrestricted double so as to allow +Infinity without failing. - unrestricted double topK; - unrestricted double temperature; + [RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] unrestricted double topK; + [RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] unrestricted double temperature; // The expected types and languages for the session. sequence expectedInputs; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl index 2ab22dac..4d16bf54 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl @@ -6,7 +6,7 @@ [ Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), - RuntimeEnabled=AIPromptAPI, + RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, SecureContext ] interface LanguageModelParams { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl index 6ce528c4..eb4e38ed 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl @@ -7,11 +7,14 @@ enum SummarizerType { "tldr", "key-points", "teaser", "headline" }; enum SummarizerFormat { "plain-text", "markdown" }; enum SummarizerLength { "short", "medium", "long" }; +enum PerformancePreference { "auto", "speed", "capability" }; dictionary SummarizerCreateCoreOptions { SummarizerType type = "key-points"; SummarizerFormat format = "markdown"; SummarizerLength length = "short"; + [RuntimeEnabled=AISummarizationPerformancePreference] + PerformancePreference preference = "auto"; sequence expectedInputLanguages; sequence expectedContextLanguages; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_client_inputs.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_client_inputs.idl index 40bbb491..d440aa7b 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_client_inputs.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_client_inputs.idl @@ -14,7 +14,6 @@ dictionary AuthenticationExtensionsClientInputs { // https://w3c.github.io/webauthn/#sctn-appid-exclude-extension USVString appidExclude; - sequence cableAuthentication; // https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-client-to-authenticator-protocol-v2.0-rd-20180702.html#sctn-hmac-secret-extension boolean hmacCreateSecret; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/cable_authentication_data.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/cable_authentication_data.idl deleted file mode 100755 index 273fca36..00000000 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/cable_authentication_data.idl +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -dictionary CableAuthenticationData { - required octet version; - required BufferSource clientEid; - required BufferSource authenticatorEid; - required BufferSource sessionPreKey; -}; \ No newline at end of file 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 df0dde43..3c791335 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 @@ -9,9 +9,16 @@ dictionary IdentityUserInfo { USVString picture; }; +enum ResolveRedirectRequestMethod { + "GET", + "POST" +}; + dictionary IdentityResolveOptions { USVString accountId; [RuntimeEnabled=FedCmNavigationInterception] boolean redirect = false; + [RuntimeEnabled=FedCmNavigationInterception] ResolveRedirectRequestMethod method = "GET"; + [RuntimeEnabled=FedCmNavigationInterception] USVString body = ""; }; dictionary IdentityProviderToken { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl index 1c27b61e..e1c10be1 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl @@ -1,6 +1,10 @@ [ - RuntimeEnabled=MulticastInDirectSockets, - Exposed=(Window, DedicatedWorker, SharedWorker, ServiceWorker), + Exposed( + Window DirectSockets, + DedicatedWorker DirectSockets, + SharedWorker DirectSocketsInSharedWorkers, + ServiceWorker DirectSocketsInServiceWorkers + ), SecureContext, IsolatedContext ] 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 ae87822a..0348fd96 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 @@ -14,7 +14,7 @@ dictionary SocketOpenInfo { dictionary TCPSocketOpenInfo : SocketOpenInfo {}; dictionary UDPSocketOpenInfo : SocketOpenInfo { - [RuntimeEnabled=MulticastInDirectSockets] MulticastController multicastController; + MulticastController multicastController; }; dictionary TCPServerSocketOpenInfo { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_options.idl index 69851416..224cfee1 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/socket_options.idl @@ -30,10 +30,10 @@ dictionary UDPSocketOptions : SocketOptions { // TODO(crbug.com/1413161): Implement ipv6Only support. boolean ipv6Only; - [RuntimeEnabled=MulticastInDirectSockets] boolean multicastAllowAddressSharing; + boolean multicastAllowAddressSharing; - [RuntimeEnabled=MulticastInDirectSockets, EnforceRange] octet multicastTimeToLive; - [RuntimeEnabled=MulticastInDirectSockets] boolean multicastLoopback; + [EnforceRange] octet multicastTimeToLive; + boolean multicastLoopback; }; dictionary TCPServerSocketOptions { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_index.idl b/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_index.idl index 43abad80..7383d626 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_index.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_index.idl @@ -48,6 +48,6 @@ [NewObject, CallWith=ScriptState, RaisesException] IDBRequest openKeyCursor(optional any range = null, optional IDBCursorDirection direction = "next"); - [RuntimeEnabled=IndexedDbGetAllRecords, NewObject, CallWith=ScriptState, RaisesException] + [NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAllRecords(optional IDBGetAllOptions options = {}); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_object_store.idl b/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_object_store.idl index 42bd90b8..34b9afb5 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_object_store.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_object_store.idl @@ -65,7 +65,7 @@ IDBRequest getAllKeys(optional any query_or_options = null, optional [EnforceRange] unsigned long count); - [RuntimeEnabled=IndexedDbGetAllRecords, CallWith=ScriptState, MeasureAs=IndexedDBRead, NewObject, RaisesException] + [CallWith=ScriptState, MeasureAs=IndexedDBRead, NewObject, RaisesException] IDBRequest getAllRecords(optional IDBGetAllOptions options = {}); [CallWith=ScriptState, MeasureAs=IndexedDBRead, NewObject, RaisesException] diff --git a/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_record.idl b/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_record.idl index bb1ba023..958130c8 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_record.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/indexeddb/idb_record.idl @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -[Exposed=(Window,Worker), RuntimeEnabled=IndexedDbGetAllRecords] +[Exposed=(Window,Worker)] interface IDBRecord { [CachedAttribute=isKeyDirty, CallWith=ScriptState] readonly attribute any key; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/html_user_media_element_media_stream.idl b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/html_user_media_element_media_stream.idl new file mode 100755 index 00000000..a7065ef3 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/html_user_media_element_media_stream.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. + +[RuntimeEnabled=UserMediaElement, ImplementedAs=HTMLUserMediaElementMediaStream] +partial interface HTMLUserMediaElement { + readonly attribute MediaStream? stream; +}; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/modules/payments/payment_request.idl b/tools/under-control/src/third_party/blink/renderer/modules/payments/payment_request.idl index c216a559..a4dfc878 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/payments/payment_request.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/payments/payment_request.idl @@ -5,6 +5,9 @@ // https://w3c.github.io/payment-request/#paymentrequest-interface // http://crbug.com/587995 +// https://w3c.github.io/secure-payment-confirmation/#typedefdef-securepaymentconfirmationcapabilities +typedef record SecurePaymentConfirmationCapabilities; + // https://w3c.github.io/secure-payment-confirmation/#enumdef-securepaymentconfirmationavailability enum SecurePaymentConfirmationAvailability { "available", @@ -14,6 +17,11 @@ enum SecurePaymentConfirmationAvailability { "unavailable-no-user-verifying-platform-authenticator", }; +// https://w3c.github.io/secure-payment-confirmation/#enumdef-securepaymentconfirmationcapability +enum SecurePaymentConfirmationCapability { + "browserBoundKeyHardware" +}; + [ RuntimeEnabled=PaymentRequest, SecureContext, @@ -40,4 +48,7 @@ enum SecurePaymentConfirmationAvailability { // Note: This API is enabled/exposed on all Blink platforms except WebView // (which does not support Secure Payment Confirmation). [RuntimeEnabled=SecurePaymentConfirmationAvailabilityAPI, CallWith=ScriptState] static Promise securePaymentConfirmationAvailability(); + + // https://w3c.github.io/secure-payment-confirmation/#sctn-secure-payment-confirmation-capabilities + [RuntimeEnabled=SecurePaymentConfirmationCapabilities, CallWith=ScriptState] static Promise getSecurePaymentConfirmationCapabilities(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl b/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl index 86c93d07..34cbd053 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl @@ -27,7 +27,7 @@ enum RTCRtcpMuxPolicy { // https://w3c.github.io/webrtc-pc/#rtcconfiguration-dictionary dictionary RTCConfiguration { - sequence iceServers; + sequence iceServers = []; // TODO(foolip): |iceTransportPolicy| default should be "all", but it is // omitted to allow fallback to |iceTransports| if not specified. RTCIceTransportPolicy iceTransportPolicy; @@ -37,7 +37,7 @@ dictionary RTCConfiguration { RTCBundlePolicy bundlePolicy = "balanced"; RTCRtcpMuxPolicy rtcpMuxPolicy = "require"; // TODO(foolip): DOMString peerIdentity; - sequence certificates; + sequence certificates = []; [EnforceRange] octet iceCandidatePoolSize = 0; [RuntimeEnabled=RtcAudioJitterBufferMaxPackets] long rtcAudioJitterBufferMaxPackets; [RuntimeEnabled=RtcAudioJitterBufferMaxPackets] boolean rtcAudioJitterBufferFastAccelerate; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/service_worker/window_client.idl b/tools/under-control/src/third_party/blink/renderer/modules/service_worker/window_client.idl index 9b7a224a..1fb62e8e 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/service_worker/window_client.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/service_worker/window_client.idl @@ -18,5 +18,5 @@ enum ContextFrameType { readonly attribute VisibilityState visibilityState; readonly attribute boolean focused; [CallWith=ScriptState] Promise focus(); - [CallWith=ScriptState] Promise navigate(USVString url); + [CallWith=ScriptState, Measure] Promise navigate(USVString url); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_shader_pixel_local_storage.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_shader_pixel_local_storage.idl index 1616c204..4350f11b 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_shader_pixel_local_storage.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_shader_pixel_local_storage.idl @@ -14,18 +14,21 @@ const unsigned long LOAD_OP_CLEAR_WEBGL = 0x96E4; const unsigned long LOAD_OP_LOAD_WEBGL = 0x96E5; const unsigned long STORE_OP_STORE_WEBGL = 0x96E6; - const unsigned long PIXEL_LOCAL_FORMAT_WEBGL = 0x96E7; + const unsigned long PIXEL_LOCAL_INTERNAL_FORMAT_WEBGL = 0x96E7; const unsigned long PIXEL_LOCAL_TEXTURE_NAME_WEBGL = 0x96E8; const unsigned long PIXEL_LOCAL_TEXTURE_LEVEL_WEBGL = 0x96E9; const unsigned long PIXEL_LOCAL_TEXTURE_LAYER_WEBGL = 0x96EA; - const unsigned long PIXEL_LOCAL_CLEAR_VALUE_FLOAT_WEBGL = 0x96EB; - const unsigned long PIXEL_LOCAL_CLEAR_VALUE_INT_WEBGL = 0x96EC; - const unsigned long PIXEL_LOCAL_CLEAR_VALUE_UNSIGNED_INT_WEBGL = 0x96ED; + const unsigned long PIXEL_LOCAL_USAGE_WEBGL = 0x96EB; + const unsigned long PIXEL_LOCAL_CLEAR_VALUE_FLOAT_WEBGL = 0x96EC; + const unsigned long PIXEL_LOCAL_CLEAR_VALUE_INT_WEBGL = 0x96ED; + const unsigned long PIXEL_LOCAL_CLEAR_VALUE_UNSIGNED_INT_WEBGL = 0x96EE; + const unsigned long PIXEL_LOCAL_USAGE_ALWAYS_NONCOHERENT_BIT_WEBGL = 0x1; boolean isCoherent(); undefined framebufferTexturePixelLocalStorageWEBGL(GLint plane, WebGLTexture? texture, GLint level, - GLint layer); + GLint layer, + GLbitfield usage); undefined framebufferPixelLocalClearValuefvWEBGL( GLint plane, [AllowShared, PassAsSpan] Float32Array value, diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webrtc/navigator_rtc.idl b/tools/under-control/src/third_party/blink/renderer/modules/webrtc/navigator_rtc.idl new file mode 100755 index 00000000..2590f6f1 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webrtc/navigator_rtc.idl @@ -0,0 +1,12 @@ +// 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. + +// TODO(https://crbug.com/481412281): Add spec link when available. + +[ + ImplementedAs=RTC +] partial interface Navigator { + [SameObject, SecureContext, RuntimeEnabled=RTCDiagnosticLogging] readonly attribute RTC rtc; + +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webrtc/rtc.idl b/tools/under-control/src/third_party/blink/renderer/modules/webrtc/rtc.idl new file mode 100755 index 00000000..98421fdc --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webrtc/rtc.idl @@ -0,0 +1,14 @@ +// 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. + +// TODO(https://crbug.com/481412281): Add spec link when available. + +[ + Exposed=Window, SecureContext, RuntimeEnabled=RTCDiagnosticLogging +] interface RTC : EventTarget { + [CallWith=ScriptState] Promise startDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {}); + [CallWith=ScriptState] Promise finishDiagnosticLogging(); + [CallWith=ScriptState] Promise cancelDiagnosticLogging(); + +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webrtc/rtc_diagnostic_logging_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/webrtc/rtc_diagnostic_logging_options.idl new file mode 100755 index 00000000..5c040748 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webrtc/rtc_diagnostic_logging_options.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. + +// TODO(https://crbug.com/481412281): Add spec link when available. + +dictionary RTCDiagnosticLoggingOptions { + boolean allowUpload = false; + record metadata = {}; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_composition_layer.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_composition_layer.idl index f50268d7..31611be2 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_composition_layer.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_composition_layer.idl @@ -20,7 +20,6 @@ enum XRLayerLayout { readonly attribute XRLayerLayout layout; attribute boolean blendTextureSourceAlpha; - attribute boolean? chromaticAberrationCorrection; attribute boolean forceMonoPresentation; attribute float opacity; readonly attribute unsigned long mipLevels; 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 d6016c8f..3034b7fc 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 @@ -319,6 +319,16 @@ public: true, status: "test", base_feature: "none", + }, + { + name: "AIClassifierAPI", + status: { + "Win": "experimental", + "Mac": "experimental", + "Linux": "experimental", + "ChromeOS": "experimental", + "default": "", + }, }, // Whether to automatically build an APC content_extraction tree on load. { @@ -330,6 +340,12 @@ name: "AIPageContentCheckGeometry", status: "test" }, + // Ensures that text content extracted from DOM nodes are valid UTF-8 Before + // providing them to consumers of AIPageContent. + { + name: "AIPageContentConvertNodeTextToUtf8", + status: "stable" + }, { name: "AIPageContentIncludeSVGSubtree", status: "stable" @@ -343,13 +359,12 @@ name: "AIPageContentPaidContentAnnotation", status: "stable" }, - // In AIPageContentAgent::ComputeHitTestableNodesInViewport, the hit test - // may hit the same node multiple times, which causes issues with computing - // the final z-order of page elements. This flag will filter those - // duplicate results first before doing any further processing. + // Clamp AIPageContent visible bounding boxes to the local-root viewport + // after visual-viewport mapping to normalize viewport-relative geometry. { - name: "AIPageContentZOrderEarlyFiltering", - status: "stable" + name: "AIPageContentVisualViewportClamp", + status: "stable", + implied_by: ["AIPageContentBuildOnLoadForTesting"], }, { name: "AIPromptAPI", @@ -464,6 +479,10 @@ name: "AISummarizationAPIForWorkers", public: true, }, + { + name: "AISummarizationPerformancePreference", + status: "experimental", + }, { name: "AIWriterAPI", status: { @@ -537,6 +556,12 @@ name: "AncestorRevealingNewSpec", status: "stable", }, + { + // This is a bug fix for rendering a missing focus ring on elements. + // Shipping in M147, safe to remove in M150. + name: "AnchorFocusRingFix", + status: "stable", + }, { // Kill switch for https://crbug.com/415834974 which changes anchor // positioning adjustments to occur even in cases where there is no @@ -695,6 +720,8 @@ }, { name: "AutofillEvent", + origin_trial_feature_name: "AutofillEvent", + origin_trial_allows_third_party: true, status: "experimental", public: true, }, @@ -710,7 +737,7 @@ }, { name: "AvoidForcedLayoutOnInvisibleDocumentClose", - status: "test", + status: "stable", }, { // Fix for https://crbug.com/471876082 @@ -825,6 +852,21 @@ name: "BlockingFocusWithoutUserActivation", status: "experimental", }, + { + // Prevents the popup document for the select element from being opened + // if the corresponding OS window is not focused. Enabled in M147, can be + // removed in M150. + name: "BlockSelectPopupUnfocusedWindow", + status: "stable", + }, + // Makes marginwidth/marginheight take precedence over + // left/right/top/bottom presentational margin attributes, and prevents + // iframe marginwidth/marginheight injection when body margin attrs exist. + // Added in M147, remove in M149. See crbug.com/41310601. + { + name: "BodyMarginAttributePrecedence", + status: "stable", + }, // https://crbug.com/415304289: Mouse and Pointer boundary event dispatch // (i.e. dispatch of enter, leave, over, out events) tracks DOM node removal // to fix event pairing on ancestor nodes. @@ -893,11 +935,6 @@ name: "Canvas2dGPUTransfer", status: "experimental", }, - { - name: "Canvas2dImageChromium", - base_feature: "none", - public: true, - }, { name: "Canvas2dLayers", }, @@ -1012,6 +1049,13 @@ name: "CheckVisibilityExtraProperties", status: "stable", }, + { + // Clamps word boundary detection to the contenteditable scope when + // adjacent contenteditable spans have no whitespace between them. + // See https://crbug.com/40848794. + name: "ClampWordBoundaryToContentEditableScope", + status: "stable", + }, { // Set currentTarget to null after dispatch for EventTarget. // This was added in M142 and can be removed after M144. @@ -1019,6 +1063,16 @@ name: "ClearCurrentTargetAfterDispatch", status: "stable", }, + { + // Fixes a bug where ancestor elements retain a stale :focus-within + // state if the focused element's subtree is removed during blur + // or focusout events. + // This was added in M147 and can be removed after M149. + // https://issues.chromium.org/issues/454668198 + // https://issues.chromium.org/issues/457465869 + name: "ClearFocusWithinOnSubtreeRemoval", + status: "stable", + }, { // Determine clearing of target and relatedTarget by checking // if the top node is in shadow tree. @@ -1238,6 +1292,7 @@ }, { name: "ContainerTiming", + origin_trial_feature_name: "ContainerTiming", status: "experimental", }, { @@ -1292,7 +1347,11 @@ // https://chromestatus.com/feature/5189864286978048 // https://github.com/explainers-by-googlers/cpu-performance name: "CpuPerformance", - status: "experimental" + status: "experimental", + origin_trial_feature_name: "CpuPerformance", + origin_trial_allows_third_party: true, + base_feature_status: "enabled", + copied_from_base_feature_if: "overridden", }, { name: "CrashReportingStorageAPI", @@ -1327,6 +1386,13 @@ name: "CSSAccentColorKeyword", status: "experimental", }, + { + // Maps deprecated ActiveCaption to Canvas instead of CanvasText. + // https://drafts.csswg.org/css-color-4/#deprecated-system-colors + // https://crbug.com/41493724 + name: "CSSActiveCaptionMapsToCanvas", + status: "stable", + }, { // Allows using counter() and counters() in alt text (after / in content property). name: "CSSAltCounter", @@ -1355,7 +1421,7 @@ { // https://chromestatus.com/feature/5125388091260928 name: "CSSBorderShape", - status: "experimental", + status: "stable", }, { // Support CSS Values Level 4 calc simplification and serialization @@ -1395,11 +1461,6 @@ name: "CSSColorTypedOM", status: "experimental", }, - { - // https://github.com/w3c/csswg-drafts/issues/12090#issuecomment-3204775586 - name: "CSSContainerNameNotTreeScoped", - status: "stable", - }, // https://drafts.csswg.org/css-values-5/#progress // container-progress() { @@ -1414,7 +1475,7 @@ { // https://drafts.csswg.org/css-color-5/#contrast-color name: "CSSContrastColor", - status: "experimental", + status: "stable", }, { // https://drafts.csswg.org/css-borders-4/#corner-shaping @@ -1452,11 +1513,6 @@ name: "CSSEnumeratedCustomProperties", status: "stable", }, - { - // https://drafts.csswg.org/css-anchor-position-2/#anchored - name: "CSSFallbackContainerQueries", - status: "stable", - }, { // crbug.com/417306102 name: "CssFitWidthText", @@ -1479,12 +1535,12 @@ // https://chromestatus.com/feature/5157805733183488 name: "CSSGapDecoration", status: "experimental", + depends_on: ["CSSGridGapSuppression"], }, { // https://chromestatus.com/feature/5157805733183488 name: "CSSGridGapSuppression", - status: "experimental", - depends_on: ["CSSGapDecoration"], + status: "stable", }, { name: "CSSGridLanesLayout", @@ -1544,6 +1600,17 @@ name: "CSSLineClampLineBreakingEllipsis", depends_on: ["CSSLineClamp"], }, + { + // This flag makes `(-webkit-)line-clamp: ` clamp by both lines + // and height if there's also `(max-)height` set on the element. + // + // In https://github.com/w3c/csswg-drafts/issues/12041 the CSSWG resolved + // that the `line-clamp: ` syntax couldn't have that behavior due + // to web compat, but we haven't decided on a new syntax for it yet. + // Therefore we keep the behavior under this flag for now. + name: "CSSLineClampLinesAndHeight", + depends_on: ["CSSLineClamp"], + }, { // Implements `counter-increment` and `counter-set` for the non-
  • // elements and the reversed ordered lists. @@ -1577,6 +1644,11 @@ name: "CSSNestedPseudoElements", status: "stable", }, + { + // https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle + name: "CSSOMGetComputedStylePseudoElementRequiresColon", + status: "experimental", + }, { name: "CSSPaintAPIArguments", status: "experimental", @@ -1732,6 +1804,11 @@ status: "experimental", base_feature: "CssSelectorFragmentAnchor", }, + { + // https://drafts.csswg.org/cssom-1/#dom-cssstylesheetinit-baseurl + name: "CSSStyleSheetInitBaseURL", + status: "experimental", + }, { name: "CSSSupportsAtRuleFunction", status: "experimental", @@ -1764,6 +1841,11 @@ name: "CSSTextAlignMatchParent", status: "experimental", }, + { + // https://issues.chromium.org/40675832: CSS `text-decoration-skip-ink: all` value + name: "CSSTextDecorationSkipInkAll", + status: "experimental", + }, { // crbug.com/434361099 name: "CssTextIndent", @@ -1784,11 +1866,22 @@ name: "CSSTextSpacing", status: "test", }, + { + // https://crbug.com/40928177: Support of `text-transform: full-size-kana` + name: "CSSTextTransformFullSizeKana", + status: "experimental", + }, { // https://issues.chromium.org/41297237: CSS `text-transform: full-width` value name: "CSSTextTransformFullWidth", status: "experimental", }, + { + // crbug.com/41297237: Support multi-keyword values in CSS `text-transform`. + name: "CSSTextTransformMultiKeyword", + depends_on: ["CSSTextTransformFullWidth", "CSSTextTransformFullSizeKana"], + status: "experimental", + }, { // Support for the 'all' keyword of the 'timeline-scope' property. // @@ -1811,6 +1904,14 @@ name: "CSSUserSelectContain", status: "test", }, + { + // https://crbug.com/488305665: Support :user-valid/:user-invalid for radio buttons. + // This lands in M147, and the flag can be removed in M149. + // + // https://drafts.csswg.org/selectors-4/#user-valid-pseudo + name: "CSSUserValidAndUserInvalidForRadio", + status: "stable", + }, { name: "CSSVideoDynamicRangeMediaQueries", status: "experimental", @@ -1834,7 +1935,6 @@ // https://issues.chromium.org/issues/357649033 name: "CustomizableSelectListbox", status: "stable", - depends_on: ["SelectMobileDesktopParity"], }, { // appearance:base-select for