From dc0c6746acae982051cbb4810b474aeccec749d3 Mon Sep 17 00:00:00 2001 From: uazo <29201891+uazo@users.noreply.github.com> Date: Wed, 20 May 2026 05:52:38 +0000 Subject: [PATCH] [AUTO][FILECONTROL] - version 148.0.7778.179 --- tools/under-control/src/RELEASE | 2 +- .../browser/aw_content_browser_client.cc | 13 +- .../browser/aw_field_trials.cc | 8 +- .../global-interface-listing-expected.txt | 138 +- .../chrome/android/java/AndroidManifest.xml | 26 - .../CustomTabIntentDataProvider.java | 51 +- .../src/chrome/browser/about_flags.cc | 1578 +++-- .../chrome_browsing_data_remover_delegate.cc | 38 +- .../chrome_browser_interface_binders.cc | 3 + .../browser/chrome_content_browser_client.cc | 448 +- ...ent_browser_client_navigation_throttles.cc | 15 +- .../browser/flags/ChromeFeatureList.java | 243 +- .../src/chrome/browser/prefs/browser_prefs.cc | 378 +- .../src/chrome/browser/ui/tab_helpers.cc | 33 +- ...hrome_content_browser_client_webui_part.cc | 6 +- .../api/accessibility_service_private.idl | 30 - .../common/extensions/api/appview_tag.idl | 46 - .../extensions/api/autofill_private.idl | 10 +- .../extensions/api/autotest_private.idl | 1635 ----- .../api/braille_display_private.idl | 93 - .../extensions/api/certificate_provider.idl | 306 - .../api/certificate_provider_internal.idl | 34 - .../extensions/api/crash_report_private.idl | 54 - .../extensions/api/developer_private.idl | 834 --- .../common/extensions/api/document_scan.idl | 655 -- .../common/extensions/api/downloads.idl | 648 -- .../extensions/api/downloads_internal.idl | 14 - .../api/enterprise_device_attributes.idl | 65 - .../api/enterprise_hardware_platform.idl | 25 - .../extensions/api/enterprise_kiosk_input.idl | 36 - .../extensions/api/enterprise_login.idl | 17 - .../api/enterprise_networking_attributes.idl | 34 - .../api/enterprise_platform_keys.idl | 237 - .../api/enterprise_platform_keys_internal.idl | 60 - .../extensions/api/passwords_private.idl | 62 +- .../extensions/api/platform_keys_internal.idl | 3 +- .../chrome_content_renderer_client.cc | 28 +- .../policy/resources/templates/messages.yaml | 4 + .../policy/resources/templates/policies.yaml | 21 +- .../.group.details.yaml | 4 - .../ChromeFrameContentTypes.yaml | 22 - .../.group.details.yaml | 5 - .../AdditionalLaunchParameters.yaml | 19 - .../ChromeFrameRendererSettings.yaml | 28 - .../RenderInChromeFrameList.yaml | 25 - .../RenderInHostList.yaml | 24 - .../SkipMetadataCheck.yaml | 23 - .../AutoSelectCertificateForUrls.yaml | 5 +- .../AutofillPredictionSettings.yaml | 2 + .../GenerativeAI/FindsSettings.yaml | 42 + .../ChromeDataRegionSetting.yaml | 1 + .../Miscellaneous/GCFUserDataDir.yaml | 23 - .../KrispNoiseCancellationEnabled.yaml | 27 + .../Miscellaneous/MaxConnectionsPerProxy.yaml | 27 +- .../MaxConnectionsPerProxyForWebSocket.yaml | 36 + .../OnFileDownloadedEnterpriseConnector.yaml | 1 + ...ionManagedClientCertificateForBrowser.yaml | 3 +- ...visionManagedClientCertificateForUser.yaml | 3 +- .../SharedWorkerExtendedLifetimeEnabled.yaml | 31 + .../SuppressChromeFrameTurndownPrompt.yaml | 17 - .../Network/ZstdContentEncodingEnabled.yaml | 1 + .../Signin/AndroidEntraSsoEnabled.yaml | 34 + .../browser/web_contents/web_contents_impl.cc | 299 +- .../src/content/child/runtime_features.cc | 29 +- .../public/browser/content_browser_client.cc | 64 +- .../src/extensions/common/api/app_window.idl | 492 -- .../src/extensions/common/api/automation.idl | 1587 ----- tools/under-control/src/gin/v8_initializer.cc | 4 - .../src/services/network/network_context.cc | 307 +- .../variations/fieldtrial_testing_config.json | 5818 ++++++----------- .../use_counter/metrics/web_feature.mojom | 57 +- .../webpreferences/web_preferences.mojom | 11 +- .../core/css/cssom/css_color_value.idl | 2 +- .../core/css/parser/media_query_parser.cc | 6 +- .../blink/renderer/core/dom/child_node.idl | 18 +- .../blink/renderer/core/dom/element.idl | 23 +- .../core/dom/global_event_handlers.idl | 5 +- .../blink/renderer/core/dom/shadow_root.idl | 23 +- .../renderer/core/dom/shadow_root_init.idl | 1 - .../core/events/event_type_names.json5 | 5 +- .../security_policy_violation_event.idl | 3 + .../security_policy_violation_event_init.idl | 1 + .../renderer/core/exported/web_view_impl.cc | 130 +- .../frame/csp/csp_violation_report_body.idl | 2 + .../blink/renderer/core/frame/location.idl | 1 - .../blink/renderer/core/frame/settings.json5 | 7 +- .../renderer/core/highlight/highlight.idl | 4 - .../highlight/highlight_pointer_event.idl | 14 - .../core/html/canvas/element_image.idl | 12 + .../core/html/canvas/html_canvas_element.idl | 3 +- .../html/custom/attach_internals_options.idl | 9 + .../core/html/custom/element_internals.idl | 4 + .../core/html/forms/element_behavior.idl | 14 + .../forms/html_form_controls_collection.idl | 2 +- .../core/html/forms/html_form_element.idl | 2 +- .../forms/html_submit_button_behavior.idl | 25 + .../blink/renderer/core/html/html_element.idl | 4 +- .../core/html/html_script_element.idl | 2 +- .../core/html/html_template_element.idl | 3 + .../core/html/html_user_media_element.idl | 6 + .../renderer/core/html/track/track_event.idl | 2 +- .../renderer/core/html/track/vtt/vtt_cue.idl | 4 +- .../core/navigation_api/navigate_event.idl | 3 +- .../navigation_intercept_options.idl | 2 +- .../navigation_precommit_controller.idl | 5 +- .../navigation_api/navigation_transition.idl | 4 +- .../core/offscreencanvas/offscreen_canvas.idl | 2 + .../origin_trials/origin_trial_context.cc | 13 +- .../core/overscroll/overscroll_event.idl | 3 +- .../core/overscroll/overscroll_event_init.idl | 3 +- .../resize_observer_options.idl | 1 - .../core/script_tools/model_context.idl | 7 +- .../script_tools/model_context_testing.idl | 3 - .../renderer/core/timing/profiler_sample.idl | 2 +- .../trustedtypes/trusted_parser_options.idl | 2 +- .../core/trustedtypes/trusted_type_policy.idl | 2 +- .../renderer/core/workers/shared_worker.idl | 3 +- .../isolated_web_app/isolated_web_app.idl | 16 +- .../renderer/modules/ai/language_model.idl | 49 +- .../ai/language_model_create_options.idl | 12 +- .../modules/ai/language_model_params.idl | 3 +- .../blink/renderer/modules/ai/proofreader.idl | 2 +- .../canvas2d/canvas_draw_element_image.idl | 37 + .../canvas2d/canvas_rendering_context_2d.idl | 45 +- .../image_bitmap_rendering_context.idl | 2 +- .../offscreen_canvas_rendering_context_2d.idl | 1 + .../credentialmanagement/credential.idl | 1 + .../payment_credential_instrument.idl | 2 +- .../renderer/modules/crypto/encapsulation.idl | 15 + .../renderer/modules/crypto/json_web_key.idl | 2 + .../renderer/modules/crypto/subtle_crypto.idl | 6 + .../direct_sockets/multicast_controller.idl | 3 +- .../direct_sockets/tcp_server_socket.idl | 3 +- .../modules/direct_sockets/tcp_socket.idl | 3 +- .../modules/direct_sockets/udp_socket.idl | 3 +- .../encryptedmedia/media_key_status_map.idl | 2 +- .../launch/dom_window_launch_queue.idl | 2 +- .../key_system_track_configuration.idl | 5 +- .../html_user_media_element_media_stream.idl | 1 + .../user_media_element_constraints.idl | 8 + .../secure_payment_confirmation_request.idl | 2 +- .../peerconnection/rtc_configuration.idl | 2 + .../permissions/navigator_permissions.idl | 3 +- .../modules/permissions/permission_status.idl | 3 +- .../modules/permissions/permissions.idl | 3 +- .../worker_navigator_permissions.idl | 3 +- .../extendable_message_event.idl | 2 +- .../modules/shared_storage/shared_storage.idl | 1 + .../modules/speech/speech_recognition.idl | 8 + .../spell_check_custom_dictionary.idl | 14 + .../window_spell_check_custom_dictionary.idl | 13 + .../webgl/webgl_rendering_context_base.idl | 26 +- .../modules/webgpu/gpu_canvas_context.idl | 2 +- .../renderer/modules/webgpu/gpu_queue.idl | 6 +- .../renderer/modules/webgpu/gpu_texture.idl | 2 +- .../modules/webtransport/web_transport.idl | 3 + .../webtransport/web_transport_send_group.idl | 13 + .../web_transport_send_stream_stats.idl | 10 + .../blink/renderer/modules/xr/xr_frame.idl | 3 + .../blink/renderer/modules/xr/xr_mesh.idl | 20 + .../blink/renderer/modules/xr/xr_mesh_set.idl | 14 + .../platform/runtime_enabled_features.json5 | 602 +- .../global-interface-listing-expected.txt | 22 +- 163 files changed, 5226 insertions(+), 13168 deletions(-) delete mode 100755 tools/under-control/src/chrome/common/extensions/api/accessibility_service_private.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/appview_tag.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/autotest_private.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/braille_display_private.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/certificate_provider.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/certificate_provider_internal.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/crash_report_private.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/developer_private.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/document_scan.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/downloads.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/downloads_internal.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/enterprise_login.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl delete mode 100755 tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys_internal.idl delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/.group.details.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/ChromeFrameContentTypes.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/.group.details.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/AdditionalLaunchParameters.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/ChromeFrameRendererSettings.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInChromeFrameList.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInHostList.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/SkipMetadataCheck.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/FindsSettings.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/GCFUserDataDir.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/KrispNoiseCancellationEnabled.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxyForWebSocket.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SharedWorkerExtendedLifetimeEnabled.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SuppressChromeFrameTurndownPrompt.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/AndroidEntraSsoEnabled.yaml delete mode 100755 tools/under-control/src/extensions/common/api/app_window.idl delete mode 100755 tools/under-control/src/extensions/common/api/automation.idl delete mode 100755 tools/under-control/src/third_party/blink/renderer/core/highlight/highlight_pointer_event.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/html/canvas/element_image.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/html/custom/attach_internals_options.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/html/forms/element_behavior.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/html/forms/html_submit_button_behavior.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_draw_element_image.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/crypto/encapsulation.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/mediastream/user_media_element_constraints.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/spell_check_custom_dictionary.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/window_spell_check_custom_dictionary.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_group.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_stream_stats.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh_set.idl diff --git a/tools/under-control/src/RELEASE b/tools/under-control/src/RELEASE index 31dcd65c5..4fd374030 100644 --- a/tools/under-control/src/RELEASE +++ b/tools/under-control/src/RELEASE @@ -1 +1 @@ -147.0.7727.102 +148.0.7778.179 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 df85e830c..ce6c76a74 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 @@ -31,6 +31,7 @@ #include "android_webview/browser/aw_speech_recognition_manager_delegate.h" #include "android_webview/browser/aw_web_contents_delegate.h" #include "android_webview/browser/aw_web_contents_view_delegate.h" +#include "android_webview/browser/content_restriction/aw_content_restriction_url_loader_throttle.h" #include "android_webview/browser/cookie_manager.h" #include "android_webview/browser/network_service/aw_browser_context_io_thread_handle.h" #include "android_webview/browser/network_service/aw_proxy_config_monitor.h" @@ -794,6 +795,14 @@ AwContentBrowserClient::CreateURLLoaderThrottles( /* async_check_tracker */ async_check_tracker, /*referring_app_info=*/std::nullopt)); + if (browser_context && + base::FeatureList::IsEnabled( + android_webview::features::kWebViewContentRestrictionSupport)) { + result.push_back(std::make_unique( + static_cast(browser_context) + ->GetContentRestrictionManagerClient())); + } + if (request.destination == network::mojom::RequestDestination::kDocument) { const bool is_load_url = request.transition_type & ui::PAGE_TRANSITION_FROM_API; @@ -1488,7 +1497,9 @@ bool AwContentBrowserClient::IsFullCookieAccessAllowed( const GURL& url, const blink::StorageKey& storage_key, net::CookieSettingOverrides overrides) { - return AreThirdPartyCookiesGenerallyAllowed(browser_context, web_contents); + // Third-party cookie access is never allowed from opaque contexts. + return !storage_key.ForbidsUnpartitionedStorageAccess() && + AreThirdPartyCookiesGenerallyAllowed(browser_context, web_contents); } bool AwContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed( 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 cd77dcfb3..36c9dbc50 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 @@ -101,9 +101,7 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // enable these optimizations in WebView though they are not fundamentally // impossible. aw_feature_overrides.DisableFeature( - blink::features::kLowLatencyCanvas2dImageChromium); - aw_feature_overrides.DisableFeature( - blink::features::kLowLatencyWebGLImageChromium); + blink::features::kLowLatencyUsageSupportedForCanvas); // Disable Shared Storage on WebView. aw_feature_overrides.DisableFeature(network::features::kSharedStorageAPI); @@ -326,10 +324,6 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // 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( 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 dac572447..35dc64fe9 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 @@ -528,12 +528,14 @@ interface CSPViolationReportBody : ReportBody getter disposition getter documentURL getter effectiveDirective + getter evalHash getter lineNumber getter originalPolicy getter referrer getter sample getter sourceFile getter statusCode + getter urlHash method constructor method toJSON interface CSSAnimation : Animation @@ -1262,7 +1264,6 @@ interface CanvasRenderingContext2D method createMesh2DVertexBuffer method createPattern method createRadialGradient - method drawElement method drawElementImage method drawFocusIfNeeded method drawImage @@ -1377,6 +1378,12 @@ interface CharacterData : Node method replaceWith method replaceWithHTML method replaceWithHTMLUnsafe + method streamAfterHTML + method streamAfterHTMLUnsafe + method streamBeforeHTML + method streamBeforeHTMLUnsafe + method streamReplaceWithHTML + method streamReplaceWithHTMLUnsafe method substringData setter data interface Clipboard : EventTarget @@ -1503,6 +1510,7 @@ interface CreateMonitor : EventTarget method constructor setter ondownloadprogress interface Credential + static method isConditionalMediationAvailable attribute @@toStringTag getter id getter type @@ -2006,7 +2014,10 @@ interface Document : Node getter onmouseover getter onmouseup getter onmousewheel - getter onoverscroll + getter onoverscrollcancel + getter onoverscrollchanging + getter onoverscrollend + getter onoverscrollstart getter onpaste getter onpause getter onplay @@ -2232,7 +2243,10 @@ interface Document : Node setter onmouseover setter onmouseup setter onmousewheel - setter onoverscroll + setter onoverscrollcancel + setter onoverscrollchanging + setter onoverscrollend + setter onoverscrollstart setter onpaste setter onpause setter onplay @@ -2329,6 +2343,12 @@ interface DocumentType : Node method replaceWith method replaceWithHTML method replaceWithHTMLUnsafe + method streamAfterHTML + method streamAfterHTMLUnsafe + method streamBeforeHTML + method streamBeforeHTMLUnsafe + method streamReplaceWithHTML + method streamReplaceWithHTMLUnsafe interface DragEvent : MouseEvent attribute @@toStringTag getter dataTransfer @@ -2446,7 +2466,6 @@ interface Element : Node getter innerHTML getter lastElementChild getter localName - getter marker getter namespaceURI getter nextElementSibling getter onbeforecopy @@ -2536,10 +2555,18 @@ interface Element : Node method setHTMLUnsafe method setPointerCapture method startViewTransition + method streamAfterHTML + method streamAfterHTMLUnsafe method streamAppendHTML method streamAppendHTMLUnsafe + method streamBeforeHTML + method streamBeforeHTMLUnsafe method streamHTML method streamHTMLUnsafe + method streamPrependHTML + method streamPrependHTMLUnsafe + method streamReplaceWithHTML + method streamReplaceWithHTMLUnsafe method toggleAttribute method webkitMatchesSelector method webkitRequestFullScreen @@ -2605,7 +2632,6 @@ interface Element : Node setter headingReset setter id setter innerHTML - setter marker setter onbeforecopy setter onbeforecut setter onbeforepaste @@ -2620,6 +2646,15 @@ interface Element : Node setter scrollLeft setter scrollTop setter slot +interface ElementBehavior + attribute @@toStringTag + method constructor +interface ElementImage + attribute @@toStringTag + getter height + getter width + method close + method constructor interface ElementInternals attribute @@toStringTag getter ariaActiveDescendantElement @@ -2674,6 +2709,7 @@ interface ElementInternals getter ariaValueNow getter ariaValueText getter ariaVirtualContent + getter behaviors getter form getter labels getter role @@ -3681,6 +3717,7 @@ interface HTMLCanvasElement : HTMLElement getter layoutSubtree getter onpaint getter width + method captureElementImage method captureStream method configureHighDynamicRange method constructor @@ -3832,7 +3869,10 @@ interface HTMLElement : Element getter onmouseover getter onmouseup getter onmousewheel - getter onoverscroll + getter onoverscrollcancel + getter onoverscrollchanging + getter onoverscrollend + getter onoverscrollstart getter onpaste getter onpause getter onplay @@ -3972,7 +4012,10 @@ interface HTMLElement : Element setter onmouseover setter onmouseup setter onmousewheel - setter onoverscroll + setter onoverscrollcancel + setter onoverscrollchanging + setter onoverscrollend + setter onoverscrollstart setter onpaste setter onpause setter onplay @@ -4949,6 +4992,27 @@ interface HTMLStyleElement : HTMLElement setter disabled setter media setter type +interface HTMLSubmitButtonBehavior : ElementBehavior + attribute @@toStringTag + getter disabled + getter form + getter formAction + getter formEnctype + getter formMethod + getter formNoValidate + getter formTarget + getter labels + getter name + getter value + method constructor + setter disabled + setter formAction + setter formEnctype + setter formMethod + setter formNoValidate + setter formTarget + setter name + setter value interface HTMLTableCaptionElement : HTMLElement attribute @@toStringTag getter align @@ -5074,12 +5138,14 @@ interface HTMLTableSectionElement : HTMLElement interface HTMLTemplateElement : HTMLElement attribute @@toStringTag getter content + getter htmlFor getter shadowRootClonable getter shadowRootCustomElementRegistry getter shadowRootDelegatesFocus getter shadowRootMode getter shadowRootSerializable method constructor + setter htmlFor setter shadowRootClonable setter shadowRootCustomElementRegistry setter shadowRootDelegatesFocus @@ -5843,7 +5909,10 @@ interface MathMLElement : Element getter onmouseover getter onmouseup getter onmousewheel - getter onoverscroll + getter onoverscrollcancel + getter onoverscrollchanging + getter onoverscrollend + getter onoverscrollstart getter onpaste getter onpause getter onplay @@ -5958,7 +6027,10 @@ interface MathMLElement : Element setter onmouseover setter onmouseup setter onmousewheel - setter onoverscroll + setter onoverscrollcancel + setter onoverscrollchanging + setter onoverscrollend + setter onoverscrollstart setter onpaste setter onpause setter onplay @@ -6315,7 +6387,6 @@ interface ModelContext attribute @@toStringTag method constructor method registerTool - method unregisterTool interface Mojo static method bindInterface static method createDataPipe @@ -6786,6 +6857,7 @@ interface OffscreenCanvas : EventTarget method constructor method convertToBlob method getContext + method getElementTransform method transferToImageBitmap setter height setter oncontextlost @@ -6839,6 +6911,7 @@ interface OffscreenCanvasRenderingContext2D method createMesh2DVertexBuffer method createPattern method createRadialGradient + method drawElementImage method drawImage method drawMesh method ellipse @@ -6955,7 +7028,8 @@ interface OverconstrainedError : DOMException method constructor interface OverscrollEvent : Event attribute @@toStringTag - getter overscrollElement + getter overscrollTarget + getter overscrolling method constructor interface PageRevealEvent : Event attribute @@toStringTag @@ -8174,7 +8248,10 @@ interface SVGElement : Element getter onmouseover getter onmouseup getter onmousewheel - getter onoverscroll + getter onoverscrollcancel + getter onoverscrollchanging + getter onoverscrollend + getter onoverscrollstart getter onpaste getter onpause getter onplay @@ -8291,7 +8368,10 @@ interface SVGElement : Element setter onmouseover setter onmouseup setter onmousewheel - setter onoverscroll + setter onoverscrollcancel + setter onoverscrollchanging + setter onoverscrollend + setter onoverscrollstart setter onpaste setter onpause setter onplay @@ -9230,6 +9310,7 @@ interface SecurityPolicyViolationEvent : Event getter sample getter sourceFile getter statusCode + getter urlHash getter violatedDirective method constructor interface Selection @@ -9337,7 +9418,6 @@ interface ShadowRoot : DocumentFragment getter fullscreenElement getter host getter innerHTML - getter marker getter mode getter onslotchange getter pictureInPictureElement @@ -9362,6 +9442,8 @@ interface ShadowRoot : DocumentFragment method streamAppendHTMLUnsafe method streamHTML method streamHTMLUnsafe + method streamPrependHTML + method streamPrependHTMLUnsafe setter adoptedStyleSheets setter fullscreenElement setter innerHTML @@ -9376,7 +9458,6 @@ interface SharedStorage method constructor method createWorklet method delete - method get method run method selectURL method set @@ -9491,6 +9572,7 @@ interface SpeechRecognition : EventTarget getter onspeechstart getter onstart getter processLocally + getter quality method abort method constructor method start @@ -9512,6 +9594,7 @@ interface SpeechRecognition : EventTarget setter onspeechstart setter onstart setter processLocally + setter quality interface SpeechRecognitionErrorEvent : Event attribute @@toStringTag getter error @@ -9522,6 +9605,11 @@ interface SpeechRecognitionEvent : Event getter resultIndex getter results method constructor +interface SpellCheckCustomDictionary + attribute @@toStringTag + method addWords + method constructor + method removeWords interface StaticRange : AbstractRange attribute @@toStringTag method constructor @@ -11029,7 +11117,6 @@ interface WebGL2RenderingContext method stencilMaskSeparate method stencilOp method stencilOpSeparate - method texElement2D method texElementImage2D method texImage2D method texImage3D @@ -11532,7 +11619,6 @@ interface WebGLRenderingContext method stencilMaskSeparate method stencilOp method stencilOpSeparate - method texElement2D method texElementImage2D method texImage2D method texParameterf @@ -11714,6 +11800,7 @@ interface WebTransport method close method constructor method createBidirectionalStream + method createSendGroup method createUnidirectionalStream method getStats interface WebTransportBidirectionalStream @@ -11740,6 +11827,10 @@ interface WebTransportError : DOMException getter source getter streamErrorCode method constructor +interface WebTransportSendGroup + attribute @@toStringTag + method constructor + method getStats interface WheelEvent : MouseEvent attribute @@toStringTag attribute DOM_DELTA_LINE @@ -12047,6 +12138,7 @@ interface webkitSpeechRecognition : EventTarget getter onspeechstart getter onstart getter processLocally + getter quality method abort method constructor method start @@ -12068,6 +12160,7 @@ interface webkitSpeechRecognition : EventTarget setter onspeechstart setter onstart setter processLocally + setter quality interface webkitSpeechRecognitionError : Event attribute @@toStringTag getter error @@ -12368,7 +12461,10 @@ namespace console getter onoffline getter ononline getter onorientationchange - getter onoverscroll + getter onoverscrollcancel + getter onoverscrollchanging + getter onoverscrollend + getter onoverscrollstart getter onpagehide getter onpagereveal getter onpageshow @@ -12450,6 +12546,7 @@ namespace console getter self getter sessionStorage getter sharedStorage + getter spellCheckCustomDictionary getter status getter statusbar getter styleMedia @@ -12594,7 +12691,10 @@ namespace console setter onoffline setter ononline setter onorientationchange - setter onoverscroll + setter onoverscrollcancel + setter onoverscrollchanging + setter onoverscrollend + setter onoverscrollstart setter onpagehide setter onpagereveal setter onpageshow diff --git a/tools/under-control/src/chrome/android/java/AndroidManifest.xml b/tools/under-control/src/chrome/android/java/AndroidManifest.xml index 5270a95ee..774ed0dde 100755 --- a/tools/under-control/src/chrome/android/java/AndroidManifest.xml +++ b/tools/under-control/src/chrome/android/java/AndroidManifest.xml @@ -94,14 +94,6 @@ by a child template that "extends" this file. - - - - - @@ -738,24 +730,6 @@ by a child template that "extends" this file. android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode"> - - - - - - - - - - 0 || initialActivityWidth > 0; + if (isPcct) { + intent.putExtra(CustomTabsIntent.EXTRA_ENABLE_URLBAR_HIDING, false); + } + if (isPcct || hasTranslucentBackgroundColor(intent)) { + intent.setClassName(context, TranslucentCustomTabActivity.class.getName()); } - intent.setClassName(context, TranslucentCustomTabActivity.class.getName()); - // When scrolling up the web content, we don't want to hide the URL bar. - intent.putExtra(CustomTabsIntent.EXTRA_ENABLE_URLBAR_HIDING, false); } private static @Px int getInitialActivityHeight( @@ -498,6 +509,26 @@ private static int getActivitySideSheetRoundedCornersPositionFromIntent(Intent i : roundedCornersPosition; } + private static boolean hasTranslucentBackgroundColor(Intent intent) { + try { + return intent.hasExtra(EXTRA_TRANSLUCENT_BACKGROUND); + } catch (Throwable t) { + // Catches un-parceling exceptions. + return false; + } + } + + @Override + public @ColorInt int getTranslucentBackgroundColor(Context context) { + int defValue = SemanticColorUtils.getDefaultBgColor(context); + int bg = IntentUtils.safeGetIntExtra(mIntent, EXTRA_TRANSLUCENT_BACKGROUND, defValue); + if (bg == defValue) return defValue; + + // We limit the transparency to 30%-50% == 50%-70% (128-180) alpha + int alpha = MathUtils.clamp(Color.alpha(bg), 128, 180); + return Color.argb(alpha, Color.red(bg), Color.green(bg), Color.blue(bg)); + } + private static boolean getIsCloseButtonEnabled(Intent intent, int uiType) { return IntentUtils.safeGetBooleanExtra(intent, EXTRA_CLOSE_BUTTON_ENABLED, true) && uiType != CustomTabsUiType.POPUP; @@ -1956,4 +1987,12 @@ private boolean isCpaOnlyOpenInBrowserDefault() { } return new WindowFeatures(bundle); } + + @Override + public void maybeAddAdditionalContentExtrasToOutboundIntent( + Supplier<@Nullable Tab> tabProvider, Intent outboundIntent, int viewId) { + CustomTabsConnection.getInstance() + .maybeAddAdditionalContentExtrasToOutboundIntent( + tabProvider, this, outboundIntent, viewId); + } } diff --git a/tools/under-control/src/chrome/browser/about_flags.cc b/tools/under-control/src/chrome/browser/about_flags.cc index 016ba0e25..98d6f6717 100755 --- a/tools/under-control/src/chrome/browser/about_flags.cc +++ b/tools/under-control/src/chrome/browser/about_flags.cc @@ -33,12 +33,15 @@ #include "build/build_config.h" #include "cc/base/features.h" #include "cc/base/switches.h" +#include "chrome/browser/actor/actor_features.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/enterprise/platform_auth/platform_auth_features.h" +#include "chrome/browser/finds/core/finds_features.h" #include "chrome/browser/flag_descriptions.h" #include "chrome/browser/glic/public/features.h" #include "chrome/browser/login_detection/login_detection_util.h" @@ -65,6 +68,7 @@ #include "chrome/browser/ui/tabs/tab_group_home/constants.h" #include "chrome/browser/ui/toasts/toast_features.h" #include "chrome/browser/ui/ui_features.h" +#include "chrome/browser/ui/webui/flags/flags_ui.h" #include "chrome/browser/ui/webui/new_tab_page/composebox/variations/composebox_fieldtrial.h" #include "chrome/browser/unexpire_flags.h" #include "chrome/browser/unexpire_flags_gen.h" @@ -104,6 +108,7 @@ #include "components/dom_distiller/core/dom_distiller_features.h" #include "components/dom_distiller/core/dom_distiller_switches.h" #include "components/download/public/common/download_features.h" +#include "components/enterprise/browser/reporting/reporting_features.h" #include "components/enterprise/client_certificates/core/features.h" #include "components/enterprise/data_controls/core/browser/features.h" #include "components/error_page/common/error_page_switches.h" @@ -196,6 +201,7 @@ #include "components/visited_url_ranking/public/features.h" #include "components/viz/common/features.h" #include "components/viz/common/switches.h" +#include "components/wallet/core/common/wallet_features.h" #include "components/webapps/browser/features.h" #include "components/webui/flags/feature_entry.h" #include "components/webui/flags/feature_entry_macros.h" @@ -263,7 +269,6 @@ #include "ui/gl/gl_features.h" #include "ui/gl/gl_switches.h" #include "ui/native_theme/features/native_theme_features.h" -#include "ui/ui_features.h" #include "url/url_features.h" #if BUILDFLAG(IS_ANDROID) @@ -271,7 +276,6 @@ #include "chrome/browser/contextmenu/context_menu_features.h" #include "chrome/browser/flags/android/chrome_feature_list.h" #include "chrome/browser/notifications/chime/android/features.h" -#include "components/browser_ui/photo_picker/android/features.h" #include "components/credential_management/android/features.h" #include "components/enterprise/connectors/core/features.h" #include "components/external_intents/android/external_intents_features.h" @@ -352,7 +356,7 @@ #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 +#include "chrome/browser/glic/suggestions/contextual_cueing_features.h" // nogncheck #endif // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) @@ -373,7 +377,7 @@ #endif #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) -#include "chrome/browser/extensions/cws_info_service.h" +#include "extensions/browser/cws_info_service.h" #include "extensions/common/extension_features.h" #include "extensions/common/switches.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) @@ -516,18 +520,6 @@ const FeatureEntry::Choice kUseAngleChoicesAndroid[] = { gl::kANGLEImplementationVulkanName}}; #endif -#if BUILDFLAG(ENABLE_EXTENSIONS) -const FeatureEntry::Choice kExtensionsToolbarZeroStateChoices[] = { - {flag_descriptions::kExtensionsToolbarZeroStateChoicesDisabled, "", ""}, - {flag_descriptions::kExtensionsToolbarZeroStateVistWebStore, - switches::kExtensionsToolbarZeroStateVariation, - switches::kExtensionsToolbarZeroStateSingleWebStoreLink}, - {flag_descriptions::kExtensionsToolbarZeroStateExploreExtensionsByCategory, - switches::kExtensionsToolbarZeroStateVariation, - switches::kExtensionsToolbarZeroStateExploreExtensionsByCategory}, -}; -#endif // ENABLE_EXTENSIONS - #if BUILDFLAG(IS_WIN) const FeatureEntry::FeatureParam kDXGIWaitableSwapChain1Frame[] = { {"DXGIWaitableSwapChainMaxQueuedFrames", "1"}}; @@ -544,6 +536,62 @@ const FeatureEntry::FeatureVariation kDXGIWaitableSwapChainVariations[] = { {"Max 3 Frames", kDXGIWaitableSwapChain3Frames, nullptr}}; #endif +#if !BUILDFLAG(IS_ANDROID) +const FeatureEntry::FeatureParam kHorizontalTabStripComboButtonShowStartOnly[] = + {{"show_start_only", "true"}}; + +const FeatureEntry::FeatureVariation + kHorizontalTabStripComboButtonVariations[] = { + {"show start button only", kHorizontalTabStripComboButtonShowStartOnly, + nullptr}}; + +const FeatureEntry::FeatureParam kVerticalTabsExpandOnHover_NoClickDelay[] = { + {"expand_on_hover_delay", "350ms"}, + {"expand_on_hover_click_delay", "0ms"}, + {"expand_on_hover_default_enabled", "true"}}; +const FeatureEntry::FeatureParam kVerticalTabsExpandOnHover_AllowClickDelay[] = + {{"expand_on_hover_delay", "400ms"}, + {"expand_on_hover_click_delay", "1500ms"}, + {"expand_on_hover_default_enabled", "true"}}; +const FeatureEntry::FeatureParam + kVerticalTabsExpandOnHover_VelocityHeuristic_100VelocityThreshold[] = { + {"expand_on_hover_use_velocity_heuristic", "true"}, + {"expand_on_hover_default_enabled", "true"}, + {"expand_on_hover_velocity_heuristic_min_samples", "2"}, + {"expand_on_hover_velocity_heuristic_threshold", "0.1"}}; +const FeatureEntry::FeatureParam + kVerticalTabsExpandOnHover_VelocityHeuristic_250VelocityThreshold[] = { + {"expand_on_hover_use_velocity_heuristic", "true"}, + {"expand_on_hover_default_enabled", "true"}, + {"expand_on_hover_velocity_heuristic_min_samples", "3"}, + {"expand_on_hover_velocity_heuristic_threshold", "0.25"}}; + +const FeatureEntry::FeatureParam + kVerticalTabsExpandOnHover_VelocityHeuristic_WithDelay[] = { + {"expand_on_hover_use_velocity_heuristic", "true"}, + {"expand_on_hover_default_enabled", "true"}, + {"expand_on_hover_velocity_heuristic_delay", "100ms"}, + {"expand_on_hover_velocity_heuristic_min_samples", "3"}, + {"expand_on_hover_velocity_heuristic_threshold", "0.25"}, + {"expand_on_hover_velocity_heuristic_distance_from_edge", "12"}, + {"expand_on_hover_velocity_heuristic_edge_delay", "200ms"}, +}; + +const FeatureEntry::FeatureVariation kVerticalTabsExpandOnHoverVariations[] = { + {"with 350ms hover delay / 0 click delay", + kVerticalTabsExpandOnHover_NoClickDelay, nullptr}, + {"with 400ms hover delay / 1500ms click delay", + kVerticalTabsExpandOnHover_AllowClickDelay, nullptr}, + {"with 100dp/s velocity heuristic", + kVerticalTabsExpandOnHover_VelocityHeuristic_100VelocityThreshold, + nullptr}, + {"with 250dp/s velocity heuristic", + kVerticalTabsExpandOnHover_VelocityHeuristic_250VelocityThreshold, + nullptr}, + {"with 250dp/s velocity heuristic and small delay", + kVerticalTabsExpandOnHover_VelocityHeuristic_WithDelay, nullptr}}; +#endif + #if BUILDFLAG(ENABLE_VR) const FeatureEntry::Choice kWebXrForceRuntimeChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, @@ -784,17 +832,6 @@ const FeatureEntry::FeatureVariation kOmahaMinSdkVersionAndroidVariations[] = { kOmahaMinSdkVersionAndroidMinSdk1000, nullptr}, }; -const FeatureEntry::FeatureParam kFeedHeaderRemovalParam1[] = { - {feed::kFeedHeaderRemovalTreatmentParam, - feed::kFeedHeaderRemovalTreatmentValue1}}; -const FeatureEntry::FeatureParam kFeedHeaderRemovalParam2[] = { - {feed::kFeedHeaderRemovalTreatmentParam, - feed::kFeedHeaderRemovalTreatmentValue2}}; -const FeatureEntry::FeatureVariation kFeedHeaderRemovalVariations[] = { - {"1", kFeedHeaderRemovalParam1, nullptr}, - {"2", kFeedHeaderRemovalParam2, nullptr}, -}; - const FeatureEntry::Choice kSafetyHubUnifiedPasswordsModuleChoices[] = { {"Default", "", ""}, {"Enabled", switches::kEnableFeatures, @@ -803,6 +840,32 @@ const FeatureEntry::Choice kSafetyHubUnifiedPasswordsModuleChoices[] = { "SafetyHubLocalPasswordsModule, SafetyHubUnifiedPasswordsModule"}, }; +const FeatureEntry::FeatureParam kChromeFindsTestConfiguration[] = { + {"always_show_opt_in_promo", "true"}, + {"theme_cooldown_duration_in_days", "0"}, + {"finds_notification_schedule_start_time_minutes", "0"}, + {"finds_notification_schedule_window_time_minutes", "1"}, + {"model_execution_cooldown_duration_in_days", "0"}, + {"finds_opt_in_promo_cooldown_in_days", "0"}}; + +const FeatureEntry::FeatureVariation kChromeFindsVariations[] = { + {" - Test Configuration", kChromeFindsTestConfiguration, nullptr}}; + +const FeatureEntry::FeatureParam kPopularSitesRefreshUsParamArm1[] = { + {"arm", "1"}}; // ntp_tiles::kPopularSitesRefreshUsArm.name +const FeatureEntry::FeatureParam kPopularSitesRefreshUsParamArm2[] = { + {"arm", "2"}}; // ntp_tiles::kPopularSitesRefreshUsArm.name +const FeatureEntry::FeatureParam kPopularSitesRefreshUsParamArm3[] = { + {"arm", "3"}}; // ntp_tiles::kPopularSitesRefreshUsArm.name + +const FeatureEntry::FeatureVariation kPopularSitesRefreshUsChoices[] = { + {flag_descriptions::kPopularSitesRefreshUsChoiceArm1, + kPopularSitesRefreshUsParamArm1, nullptr}, + {flag_descriptions::kPopularSitesRefreshUsChoiceArm2, + kPopularSitesRefreshUsParamArm2, nullptr}, + {flag_descriptions::kPopularSitesRefreshUsChoiceArm3, + kPopularSitesRefreshUsParamArm3, nullptr}, +}; #endif // BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam @@ -898,21 +961,6 @@ const FeatureEntry::FeatureVariation kWebUIOmniboxPopupDebugVariations[] = { {"Side by Side", kWebUIOmniboxPopupDebugSxS, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_CHROMEOS) -const FeatureEntry::FeatureParam kArcVmMemorySizeShift_200[] = { - {"shift_mib", "-200"}}; -const FeatureEntry::FeatureParam kArcVmMemorySizeShift_500[] = { - {"shift_mib", "-500"}}; -const FeatureEntry::FeatureParam kArcVmMemorySizeShift_800[] = { - {"shift_mib", "-800"}}; - -const FeatureEntry::FeatureVariation kArcVmMemorySizeVariations[] = { - {"shift -200MiB", kArcVmMemorySizeShift_200, nullptr}, - {"shift -500MiB", kArcVmMemorySizeShift_500, nullptr}, - {"shift -800MiB", kArcVmMemorySizeShift_800, nullptr}, -}; -#endif // BUILDFLAG(IS_CHROMEOS) - const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, {flags_ui::kGenericExperimentChoiceEnabled, @@ -1106,14 +1154,10 @@ const FeatureEntry::FeatureVariation kStartupLaunchVariations[] = { const FeatureEntry::FeatureParam kPageActionsMigrationParams[] = { {"ai_mode", "true"}, - {"autofill_address", "true"}, {"bookmark_star", "true"}, {"cookie_controls", "true"}, - {"click_to_call", "true"}, - {"collaboration_messaging", "true"}, {"file_system_access", "true"}, {"filled_card_information", "true"}, - {"find", "true"}, {"intent_picker", "true"}, {"lens_overlay_homework", "true"}, {"manage_passwords", "true"}, @@ -1596,134 +1640,47 @@ const FeatureEntry::FeatureVariation kNtpComposeboxVariations[] = { kComposeboxNextSingleContextForRealboxNext, nullptr}, }; -const FeatureEntry::FeatureParam kShowNextRealboxCompact[] = { - {"RealboxLayoutMode", ntp_realbox::kRealboxLayoutModeCompact}, -}; -const FeatureEntry::FeatureParam kShowNextRealboxCompactCyclingPlaceholders[] = - { - {"RealboxLayoutMode", ntp_realbox::kRealboxLayoutModeCompact}, - {"CyclingPlaceholders", "true"}, +const FeatureEntry::FeatureParam kShowNextRealboxCyclingPlaceholders[] = { + {"CyclingPlaceholders", "true"}, }; const FeatureEntry::FeatureVariation kNtpRealboxNextVariations[] = { - {"- Show Next Realbox (Compact)", kShowNextRealboxCompact, nullptr}, - {"- Show Next Realbox: Compact, Cycling placeholders", - kShowNextRealboxCompactCyclingPlaceholders, nullptr}, -}; - -const FeatureEntry::FeatureParam kNtpNextShowDeepDiveSuggestions[] = { - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "false"}, -}; -const FeatureEntry::FeatureParam kNtpNextShowSimplificationUIWithDeepDive[] = { - {"NtpNextShowSimplificationUIParam", "true"}, - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "false"}, -}; - -const FeatureEntry::FeatureParam - kNtpNextShowChipsUIWithChromeNtpActionClient[] = { - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, + {"- Show Next Realbox: Cycling placeholders", + kShowNextRealboxCyclingPlaceholders, nullptr}, }; const FeatureEntry::FeatureParam kNtpNextShowChipsUIWithChromeNtpActionClientAndCanvas[] = { - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, - {"NtpNextEnableCanvasChipParam", "true"}, -}; - -const FeatureEntry::FeatureParam - kNtpNextShowSimplificationUIWithChromeNtpActionClient[] = { - {"NtpNextShowSimplificationUIParam", "true"}, - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, -}; - -const FeatureEntry::FeatureParam - kNtpNextShowSimplificationUIWithChromeNtpActionClientAndCanvas[] = { - {"NtpNextShowSimplificationUIParam", "true"}, - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, {"NtpNextEnableCanvasChipParam", "true"}, }; const FeatureEntry::FeatureParam kNtpNextShowChipsUIWithNtpActionClientWithNoRecentTabInSteadyState[] = { - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, {"kNtpNextShowStaticRecentTabChipParam", "false"}, }; const FeatureEntry::FeatureParam kNtpNextShowChipsUIWithNtpActionClientWithCanvasAndNoRecentTabInSteadyState [] = { - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, - {"kNtpNextShowStaticRecentTabChipParam", "false"}, - {"NtpNextEnableCanvasChipParam", "true"}, -}; - -const FeatureEntry::FeatureParam - kNtpNextShowSimplificationUIWithNtpActionClientWithNoRecentTabInSteadyState - [] = { - {"NtpNextShowSimplificationUIParam", "true"}, - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, - {"kNtpNextShowStaticRecentTabChipParam", "false"}, -}; - -const FeatureEntry::FeatureParam - kNtpNextShowSimplificationUIWithNtpActionClientWithCanvasAndNoRecentTabInSteadyState - [] = { - {"NtpNextShowSimplificationUIParam", "true"}, - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, {"kNtpNextShowStaticRecentTabChipParam", "false"}, {"NtpNextEnableCanvasChipParam", "true"}, }; -const FeatureEntry::FeatureParam kNtpNextShowSimplificationUIWithDismissal[] = { - {"NtpNextShowSimplificationUIParam", "true"}, - {"NtpNextShowDeepDiveSuggestionsParam", "true"}, - {"NtpNextSuggestionsFromNewSearchSuggestionsEndpointParam", "true"}, - {"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, - nullptr}, - {"- Show Chips UI with a New Suggestions Client", - kNtpNextShowChipsUIWithChromeNtpActionClient, nullptr}, - {"- Show Row UI with a New Suggestions Client", - kNtpNextShowSimplificationUIWithChromeNtpActionClient, nullptr}, {"- Show Chips UI with a New Client and No Recent Tab Chip in the Steady " "State", kNtpNextShowChipsUIWithNtpActionClientWithNoRecentTabInSteadyState, nullptr}, - {"- 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}, }; @@ -2005,38 +1962,27 @@ const FeatureEntry::FeatureVariation const FeatureEntry::FeatureParam kOmniboxAimDedicatedModeButton[] = { {"show_dedicated_mode_button", "true"}}; -const FeatureEntry::FeatureParam kOmniboxAimDedicatedModeButtonWithHint[] = { - {"show_dedicated_mode_button", "true"}, - {"show_try_aimode_hint_in_mode_button", "true"}}; const FeatureEntry::FeatureParam kOmniboxAimCompactFusebox[] = { {"compact_fusebox", "true"}}; -const FeatureEntry::FeatureParam kOmniboxAimMultiContext[] = { - {"multi_context", "true"}}; -const FeatureEntry::FeatureParam kOmniboxAimMultiContextDedicatedModeButton[] = - {{"multi_context", "true"}, {"show_dedicated_mode_button", "true"}}; -const FeatureEntry::FeatureParam - kOmniboxAimMultiContextDedicatedModeButtonWithHint[] = { - {"multi_context", "true"}, - {"show_dedicated_mode_button", "true"}, - {"show_try_aimode_hint_in_mode_button", "true"}}; -const FeatureEntry::FeatureParam kOmniboxAimMultiContextCompactFusebox[] = { - {"multi_context", "true"}, - {"compact_fusebox", "true"}}; +const FeatureEntry::FeatureParam kOmniboxAimOriginalComposeplate[] = { + {"redirect_composeplate_button", "false"}}; const FeatureEntry::FeatureParam kOmniboxAimModelPickerAndCanvas[] = { - {"multi_context", "true"}, {"show_model_picker", "true"}}; +const FeatureEntry::FeatureParam kOmniboxAimModelPickerCompact[] = { + {"show_model_picker", "true"}, + {"compact_fusebox", "true"}}; +const FeatureEntry::FeatureParam kOmniboxAimModelPickerCompactBottomSheet[] = { + {"show_model_picker", "true"}, + {"compact_fusebox", "true"}, + {"show_bottom_sheet_popup", "true"}}; const FeatureEntry::FeatureVariation kOmniboxMultimodalInputVariants[] = { - {"Dedicated Button", kOmniboxAimDedicatedModeButton, "3395755"}, - {"Button with Hint", kOmniboxAimDedicatedModeButtonWithHint, "3395755"}, - {"Compact", kOmniboxAimCompactFusebox, "3395755"}, - {"MC (Multi context)", kOmniboxAimMultiContext, "3395755"}, - {"MC Dedicated Button", kOmniboxAimMultiContextDedicatedModeButton, - "3395755"}, - {"MC Button with Hint", kOmniboxAimMultiContextDedicatedModeButtonWithHint, - "3395755"}, - {"MC Compact", kOmniboxAimMultiContextCompactFusebox, "3395755"}, - {"Model Picker & Canvas", kOmniboxAimModelPickerAndCanvas, "3395755"}, + {"Dedicated Button", kOmniboxAimDedicatedModeButton, nullptr}, + {"Compact", kOmniboxAimCompactFusebox, nullptr}, + {"Original Composeplate", kOmniboxAimOriginalComposeplate, nullptr}, + {"Model Picker & Tools", kOmniboxAimModelPickerAndCanvas, nullptr}, + {"Model Picker Compact", kOmniboxAimModelPickerCompact, nullptr}, + {"^ + Bottom Sheet", kOmniboxAimModelPickerCompactBottomSheet, nullptr}, }; const FeatureEntry::FeatureParam kOmniboxMultilineEditFieldForAutocomplete[] = { @@ -2311,16 +2257,34 @@ const FeatureEntry::FeatureVariation kNumSrpZpsRelatedSearches[] = { #if !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kTabGroupsFocusingPinnedTabs[] = { {"tab_groups_focusing_pinned_tabs", "true"}}; -const FeatureEntry::FeatureParam kTabGroupsFocusingDefaultToFocusedOnly[] = { +const FeatureEntry::FeatureParam kTabGroupsFocusingAutoClose[] = { + {"tab_groups_focusing_auto_close", "true"}}; +const FeatureEntry::FeatureParam kTabGroupsFocusingDefaultToFocused[] = { + {"tab_groups_focusing_default_to_focused", "true"}}; +const FeatureEntry::FeatureParam kTabGroupsFocusingPinnedAndAutoClose[] = { + {"tab_groups_focusing_pinned_tabs", "true"}, + {"tab_groups_focusing_auto_close", "true"}}; +const FeatureEntry::FeatureParam kTabGroupsFocusingPinnedAndDefault[] = { + {"tab_groups_focusing_pinned_tabs", "true"}, + {"tab_groups_focusing_default_to_focused", "true"}}; +const FeatureEntry::FeatureParam kTabGroupsFocusingAutoCloseAndDefault[] = { + {"tab_groups_focusing_auto_close", "true"}, {"tab_groups_focusing_default_to_focused", "true"}}; const FeatureEntry::FeatureParam kTabGroupsFocusingAll[] = { {"tab_groups_focusing_pinned_tabs", "true"}, + {"tab_groups_focusing_auto_close", "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}, + {" - close on unfocus", kTabGroupsFocusingAutoClose}, + {" - autofocus opened groups", kTabGroupsFocusingDefaultToFocused}, + {" - show pinned tabs and close on unfocus", + kTabGroupsFocusingPinnedAndAutoClose}, + {" - show pinned tabs and autofocus", kTabGroupsFocusingPinnedAndDefault}, + {" - close on unfocus and autofocus", + kTabGroupsFocusingAutoCloseAndDefault}, + {" - all features", kTabGroupsFocusingAll}, }; #endif @@ -2382,13 +2346,6 @@ const FeatureEntry::FeatureVariation kNtpRealboxCr23ThemingVariations[] = { kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState, nullptr}, }; -const FeatureEntry::FeatureParam kNtpSafeBrowsingModuleFastCooldown[] = { - {ntp_features::kNtpSafeBrowsingModuleCooldownPeriodDaysParam, "0.001"}, - {ntp_features::kNtpSafeBrowsingModuleCountMaxParam, "1"}}; -const FeatureEntry::FeatureVariation kNtpSafeBrowsingModuleVariations[] = { - {"(Fast Cooldown)", kNtpSafeBrowsingModuleFastCooldown, nullptr}, -}; - const FeatureEntry::FeatureParam kNtpSharepointModuleTrendingInsights[] = { {"NtpSharepointModuleDataParam", "trending-insights"}}; const FeatureEntry::FeatureParam kNtpSharepointModuleNonInsights[] = { @@ -2548,13 +2505,6 @@ const FeatureEntry::FeatureVariation kStartSurfaceReturnTimeVariations[] = { {"60 minute", kStartSurfaceReturnTime_60Minute, nullptr}, }; -const FeatureEntry::FeatureParam kMagicStackAndroid_show_all_modules[] = { - {"show_all_modules", "true"}}; - -const FeatureEntry::FeatureVariation kMagicStackAndroidVariations[] = { - {"Show all modules", kMagicStackAndroid_show_all_modules, nullptr}, -}; - const FeatureEntry::FeatureParam kDefaultBrowserPromoShowArm[] = { {segmentation_platform::features::kEphemeralCardRankerForceShowCardParam, segmentation_platform::kDefaultBrowserPromo}, @@ -2617,13 +2567,6 @@ const FeatureEntry::FeatureVariation kEphemeralCardRankerCardOverrideOptions[] = }; #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kSearchResumption_use_new_service[] = { - {"use_new_service", "true"}}; -const FeatureEntry::FeatureVariation - kSearchResumptionModuleAndroidVariations[] = { - {"Use New Service", kSearchResumption_use_new_service, nullptr}, -}; - const FeatureEntry::FeatureParam kMostVitedTilesReselect_enable_partial_match_arm1[] = { {"lax_scheme_host", "true"}, @@ -2693,28 +2636,6 @@ const FeatureEntry::Choice kNotificationSchedulerChoices[] = { #if BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kPhotoPickerAdoptionStudyActionGetContent[] = { - {"use_action_get_content", "true"}}; -const FeatureEntry::FeatureParam kPhotoPickerAdoptionStudyActionPickImages[] = { - {"use_action_pick_images", "true"}}; -const FeatureEntry::FeatureParam - kPhotoPickerAdoptionStudyActionPickImagesPlus[] = { - {"use_action_pick_images_plus", "true"}}; -const FeatureEntry::FeatureParam - kPhotoPickerAdoptionStudyChromePickerWithoutBrowse[] = { - {"chrome_picker_suppress_browse", "true"}}; - -const FeatureEntry::FeatureVariation - kPhotoPickerAdoptionStudyFeatureVariations[] = { - {"(Android Picker w/ACTION_GET_CONTENT)", - kPhotoPickerAdoptionStudyActionGetContent, nullptr}, - {"(Android Picker w/ACTION_PICK_IMAGES)", - kPhotoPickerAdoptionStudyActionPickImages, nullptr}, - {"(Android Picker w/ACTION_PICK_IMAGES Plus)", - kPhotoPickerAdoptionStudyActionPickImagesPlus, nullptr}, - {"(Chrome Picker without Browse)", - kPhotoPickerAdoptionStudyChromePickerWithoutBrowse, nullptr}}; - const FeatureEntry::FeatureParam kAndroidAppIntegrationModule_ForceCardShown_Pixel[] = { {"force_card_shown", "true"}}; @@ -2724,6 +2645,12 @@ const FeatureEntry::FeatureParam {"force_card_shown", "true"}, {"show_third_party_card", "true"}}; +const FeatureEntry::FeatureParam kAndroidAppRatingPromptBypassChecks[] = { + {"bypass_checks", "true"}}; + +const FeatureEntry::FeatureVariation kAndroidAppRatingPromptVariations[] = { + {"(Bypass checks)", kAndroidAppRatingPromptBypassChecks, nullptr}}; + const FeatureEntry::FeatureVariation kAndroidAppIntegrationModuleVariations[] = {{"Force to show Pixel's notice card", kAndroidAppIntegrationModule_ForceCardShown_Pixel, nullptr}, @@ -2752,12 +2679,6 @@ const FeatureEntry::FeatureVariation kNewTabPageCustomizationV2Variations[] = { kNewTabPageCustomizationV2_ShowLogoAndSearchBox, nullptr}, {"Enable logs", kNewTabPageCustomizationV2_EnableLogs, nullptr}}; -const FeatureEntry::FeatureParam kAndroidComposeplate_SkipLocaleCheck[] = { - {"skip_locale_check", "true"}}; - -const FeatureEntry::FeatureVariation kAndroidComposeplateVariations[] = { - {"Skip locale check", kAndroidComposeplate_SkipLocaleCheck, nullptr}}; - const FeatureEntry::FeatureParam kAndroidAppIntegrationMultiDataSource_SkipDeviceCheck[] = { {"multi_data_source_skip_device_check", "true"}}; @@ -2802,14 +2723,19 @@ const FeatureEntry::FeatureVariation kAuxiliarySearchDonationVariations[] = { #if BUILDFLAG(IS_ANDROID) +const FeatureEntry::FeatureParam kTabStorageSqlitePrototypeOnlyShadow[] = { + {"phase", "only_shadow"}}; const FeatureEntry::FeatureParam kTabStorageSqlitePrototypeAuthoritativeReads[] = { - {"authoritative_read_source", "true"}}; + {"phase", "authoritative_read_source"}}; const FeatureEntry::FeatureParam kTabStorageSqlitePrototypeFullMigration[] = { - {"authoritative_read_source", "true"}, - {"allow_full_migration", "true"}}; + {"phase", "full_migration"}}; +const FeatureEntry::FeatureParam kTabStorageSqlitePrototypeFullRollback[] = { + {"phase", "full_rollback"}}; const FeatureEntry::FeatureVariation kTabStorageSqlitePrototypeVariations[] = { + {"- Full Rollback", kTabStorageSqlitePrototypeFullRollback, nullptr}, + {"- Only Shadow", kTabStorageSqlitePrototypeOnlyShadow, nullptr}, {"- Authoritative Read Source", kTabStorageSqlitePrototypeAuthoritativeReads, nullptr}, {"- Full Migration", kTabStorageSqlitePrototypeFullMigration, nullptr}}; @@ -2847,10 +2773,14 @@ const FeatureEntry::Choice kSendTabToSelfEnhancedHandoffChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, {flags_ui::kGenericExperimentChoiceEnabled, switches::kEnableFeatures, "SendTabToSelfPropagateFormFields," - "SendTabToSelfPropagateScrollPosition"}, + "SendTabToSelfPropagateScrollPosition," + "SendTabToSelfPropagateNavigationHistory," + "SendTabToSelfImprovedLastActiveLabels"}, {flags_ui::kGenericExperimentChoiceDisabled, switches::kDisableFeatures, "SendTabToSelfPropagateFormFields," - "SendTabToSelfPropagateScrollPosition"}, + "SendTabToSelfPropagateScrollPosition," + "SendTabToSelfPropagateNavigationHistory," + "SendTabToSelfImprovedLastActiveLabels"}, }; // The choices for --enable-experimental-cookie-features. This really should @@ -2893,22 +2823,6 @@ const FeatureEntry::Choice kCrostiniContainerChoices[] = { }; #endif // BUILDFLAG(IS_CHROMEOS) -#if !BUILDFLAG(IS_ANDROID) -// SCT Auditing feature variations. -const FeatureEntry::FeatureParam kSCTAuditingSamplingRateNone[] = { - {"sampling_rate", "0.0"}}; -const FeatureEntry::FeatureParam kSCTAuditingSamplingRateAlternativeOne[] = { - {"sampling_rate", "0.0001"}}; -const FeatureEntry::FeatureParam kSCTAuditingSamplingRateAlternativeTwo[] = { - {"sampling_rate", "0.001"}}; - -const FeatureEntry::FeatureVariation kSCTAuditingVariations[] = { - {"Sampling rate 0%", kSCTAuditingSamplingRateNone, nullptr}, - {"Sampling rate 0.01%", kSCTAuditingSamplingRateAlternativeOne, nullptr}, - {"Sampling rate 0.1%", kSCTAuditingSamplingRateAlternativeTwo, nullptr}, -}; -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_CHROMEOS) const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay10Mins[] = { {"long_delay_minutes", "10"}}; @@ -3058,8 +2972,6 @@ const FeatureEntry::FeatureVariation kSystemShortcutBehaviorVariations[] = { #if BUILDFLAG(IS_CHROMEOS) constexpr char kWallpaperFastRefreshInternalName[] = "wallpaper-fast-refresh"; -constexpr char kWallpaperGooglePhotosSharedAlbumsInternalName[] = - "wallpaper-google-photos-shared-albums"; constexpr char kGlanceablesTimeManagementClassroomStudentViewInternalName[] = "glanceables-time-management-classroom-student-view"; constexpr char kGlanceablesTimeManagementTasksViewInternalName[] = @@ -3242,87 +3154,6 @@ const FeatureEntry::FeatureVariation kSafetyCheckUnusedSitePermissionsWithDelayParam, nullptr}, }; -const FeatureEntry::FeatureParam - kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_MainFrameInitiator - [] = { - {content_settings::features::kTpcdReadHeuristicsGrantsName, "true"}, - {content_settings::features:: - kTpcdWritePopupCurrentInteractionHeuristicsGrantsName, - "30d"}, - {content_settings::features:: - kTpcdPopupHeuristicEnableForIframeInitiatorName, - "none"}, - {content_settings::features::kTpcdWriteRedirectHeuristicGrantsName, - "15m"}, - {content_settings::features:: - kTpcdRedirectHeuristicRequireABAFlowName, - "true"}, - {content_settings::features:: - kTpcdRedirectHeuristicRequireCurrentInteractionName, - "true"}}; -const FeatureEntry::FeatureParam - kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_MainFrameInitiator[] = - {{content_settings::features::kTpcdReadHeuristicsGrantsName, "true"}, - {content_settings::features:: - kTpcdWritePopupCurrentInteractionHeuristicsGrantsName, - "30d"}, - {content_settings::features:: - kTpcdPopupHeuristicEnableForIframeInitiatorName, - "none"}, - {content_settings::features::kTpcdWriteRedirectHeuristicGrantsName, - "30d"}, - {content_settings::features::kTpcdRedirectHeuristicRequireABAFlowName, - "true"}, - {content_settings::features:: - kTpcdRedirectHeuristicRequireCurrentInteractionName, - "true"}}; -const FeatureEntry::FeatureParam - kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_AllFrameInitiator[] = - {{content_settings::features::kTpcdReadHeuristicsGrantsName, "true"}, - {content_settings::features:: - kTpcdWritePopupCurrentInteractionHeuristicsGrantsName, - "30d"}, - {content_settings::features:: - kTpcdPopupHeuristicEnableForIframeInitiatorName, - "all"}, - {content_settings::features::kTpcdWriteRedirectHeuristicGrantsName, - "15m"}, - {content_settings::features::kTpcdRedirectHeuristicRequireABAFlowName, - "true"}, - {content_settings::features:: - kTpcdRedirectHeuristicRequireCurrentInteractionName, - "true"}}; -const FeatureEntry::FeatureParam - kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_AllFrameInitiator[] = - {{content_settings::features::kTpcdReadHeuristicsGrantsName, "true"}, - {content_settings::features:: - kTpcdWritePopupCurrentInteractionHeuristicsGrantsName, - "30d"}, - {content_settings::features:: - kTpcdPopupHeuristicEnableForIframeInitiatorName, - "all"}, - {content_settings::features::kTpcdWriteRedirectHeuristicGrantsName, - "30d"}, - {content_settings::features::kTpcdRedirectHeuristicRequireABAFlowName, - "true"}, - {content_settings::features:: - kTpcdRedirectHeuristicRequireCurrentInteractionName, - "true"}}; - -const FeatureEntry::FeatureVariation kTpcdHeuristicsGrantsVariations[] = { - {"CurrentInteraction_ShortRedirect_MainFrameInitiator", - kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_MainFrameInitiator, - nullptr}, - {"CurrentInteraction_LongRedirect_MainFrameInitiator", - kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_MainFrameInitiator, - nullptr}, - {"CurrentInteraction_ShortRedirect_AllFrameInitiator", - kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_AllFrameInitiator, - nullptr}, - {"CurrentInteraction_LongRedirect_AllFrameInitiator", - kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_AllFrameInitiator, - nullptr}}; - #if BUILDFLAG(IS_CHROMEOS) const FeatureEntry::FeatureParam kVcInferenceBackendAuto[] = { {"inference_backend", "AUTO"}, @@ -3469,25 +3300,29 @@ const flags_ui::FeatureEntry::FeatureVariation // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) -const FeatureEntry::Choice kReplaceSyncPromosWithSignInPromosChoices[] = { - {"Default", "", ""}, - {"Disabled", switches::kDisableFeatures, - "ReplaceSyncPromosWithSignInPromos"}, - {"Enabled", switches::kEnableFeatures, - "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/" - "false/explicit_signin_for_bookmarks/false"}, - {"Enabled with follow-ups", switches::kEnableFeatures, - "ReplaceSyncPromosWithSignInPromos:explicit_signin_for_extensions/" - "false/explicit_signin_for_bookmarks/false,UnoPhase2FollowUp"}, - {"Enabled with explicit signin for extensions and bookmarks", - switches::kEnableFeatures, - "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"}, -}; +const char kReplaceSyncPromosWithSignInPromosDesktopFeatures[] = + "ReplaceSyncPromosWithSignInPromos," + "IPH_SignInBenefits," + "SyncEnableContactInfoDataTypeForCustomPassphraseUsers"; + +const FeatureEntry::Choice kReplaceSyncPromosWithSignInPromosDesktopChoices[] = + {{"Default", "", ""}, + {"Disabled", switches::kDisableFeatures, + kReplaceSyncPromosWithSignInPromosDesktopFeatures}, + {"Enabled", switches::kEnableFeatures, + kReplaceSyncPromosWithSignInPromosDesktopFeatures}}; + +const char kReplaceSyncPromosWithSigninPromosNewSigninFeatures[] = + "ReplaceSyncPromosWithSigninPromosNewSignin," + "IPH_SignInBenefitsNewSignin"; + +const FeatureEntry::Choice + kReplaceSyncPromosWithSigninPromosNewSigninChoices[] = { + {"Default", "", ""}, + {"Disabled", switches::kDisableFeatures, + kReplaceSyncPromosWithSigninPromosNewSigninFeatures}, + {"Enabled", switches::kEnableFeatures, + kReplaceSyncPromosWithSigninPromosNewSigninFeatures}}; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) #if !BUILDFLAG(IS_ANDROID) @@ -3773,25 +3608,6 @@ const FeatureEntry::FeatureVariation kAudioDuckingAttenuationVariations[] = { {"attenuation 100", kAudioDuckingAttenuation_100, nullptr}}; #endif // !BUILDFLAG(IS_ANDROID) -#if !BUILDFLAG(IS_ANDROID) -const char kAccountStoragePrefsThemesAndSearchEnginesFeatures[] = - // Flags for account storage of prefs. - "EnablePreferencesAccountStorage," - // Flags for account storage of search engines. - "DisableSyncAutogeneratedSearchEngines," - "SeparateLocalAndAccountSearchEngines," - // Flags for account storage of themes. - "SeparateLocalAndAccountThemes," - "ThemesBatchUpload"; - -const FeatureEntry::Choice kAccountStoragePrefsThemesAndSearchEnginesChoices[] = - {{"Default", "", ""}, - {"Disabled", "disable-features", - kAccountStoragePrefsThemesAndSearchEnginesFeatures}, - {"Enabled", "enable-features", - kAccountStoragePrefsThemesAndSearchEnginesFeatures}}; -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kMaliciousApkDownloadCheckTelemetryOnlyParams[] = { @@ -3997,11 +3813,19 @@ const FeatureEntry::FeatureVariation kGlicTrustFirstOnboardingVariations[] = { {"- Arm 3: In-Flow opt-in", kGlicTrustFirstOnboardingArm3Params, nullptr}, }; -const FeatureEntry::Choice kGlicSetG1ForMultiInstance[] = { - {flags_ui::kGenericExperimentChoiceDefault, "", ""}, - {"Force G1 status", switches::kGlicForceG1StatusForMultiInstance, "true"}, - {"Force non-G1 status", switches::kGlicForceG1StatusForMultiInstance, - "false"}, +const FeatureEntry::FeatureParam kGlicToolbarButtonLocation_LeftOfProfile[] = { + {"glic-toolbar-button-location", "LeftOfProfileChip"}}; +const FeatureEntry::FeatureParam kGlicToolbarButtonLocation_RightOfOmnibox[] = { + {"glic-toolbar-button-location", "RightOfOmnibox"}}; +const FeatureEntry::FeatureParam + kGlicToolbarButtonLocation_LeftOfProfileChipWithBackground[] = { + {"glic-toolbar-button-location", "LeftOfProfileChipWithBackground"}}; + +const FeatureEntry::FeatureVariation kGlicToolbarButtonLocationVariations[] = { + {"Left of Profile", kGlicToolbarButtonLocation_LeftOfProfile, nullptr}, + {"Right of Omnibox", kGlicToolbarButtonLocation_RightOfOmnibox, nullptr}, + {"Left of Profile with Background", + kGlicToolbarButtonLocation_LeftOfProfileChipWithBackground, nullptr}, }; const FeatureEntry::FeatureParam kGlicGuestUrlPresetTypeAutopush[] = { @@ -4019,6 +3843,18 @@ const FeatureEntry::FeatureVariation kGlicGuestUrlPresetTypes[] = { {"Pre-prod", kGlicGuestUrlPresetTypePreprod, nullptr}, {"Prod", kGlicGuestUrlPresetTypeProd, nullptr}}; +const FeatureEntry::FeatureParam kGlicSelectionPromptUseWidgetTrue[] = { + {"use_widget", "true"}}; +const FeatureEntry::FeatureParam kGlicSelectionPromptUseWidgetFalse[] = { + {"use_widget", "false"}}; +const FeatureEntry::FeatureParam kGlicSelectionPromptUpdatesOnlyTrue[] = { + {"updates_only", "true"}}; + +const FeatureEntry::FeatureVariation kGlicSelectionPromptVariations[] = { + {"with InlineCue", kGlicSelectionPromptUseWidgetTrue, nullptr}, + {"with TopCue", kGlicSelectionPromptUseWidgetFalse, nullptr}, + {"with UpdatesOnly", kGlicSelectionPromptUpdatesOnlyTrue, nullptr}}; + const FeatureEntry::FeatureParam kAutofillShowTypePredictionsAsTitle[] = { {"as-title", "true"}}; const FeatureEntry::FeatureVariation kAutofillShowTypePredictionsVariations[] = @@ -4239,28 +4075,35 @@ const FeatureEntry::FeatureVariation kAndroidHubSearchTabGroupsVariations[] = { #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) +const FeatureEntry::FeatureParam kAndroidBottomBarShowBottomBarOnGtsParam[] = { + {"show_bottom_bar_on_gts", "true"}}; +const FeatureEntry::FeatureParam kAndroidBottomBarKeepAppMenuInToolbarParam[] = + {{"keep_app_menu_in_toolbar", "true"}}; +const FeatureEntry::FeatureParam + kAndroidBottomBarKeepAppMenuInToolbarWithGtsParam[] = { + {"keep_app_menu_in_toolbar", "true"}, + {"show_bottom_bar_on_gts", "true"}}; +const FeatureEntry::FeatureParam kAndroidBottomBarKeepBothInToolbarParam[] = { + {"keep_app_menu_in_toolbar", "true"}, + {"keep_home_button_in_toolbar", "true"}}; +const FeatureEntry::FeatureParam + kAndroidBottomBarKeepBothInToolbarWithGtsParam[] = { + {"keep_app_menu_in_toolbar", "true"}, + {"keep_home_button_in_toolbar", "true"}, + {"show_bottom_bar_on_gts", "true"}}; +const FeatureEntry::FeatureVariation kAndroidBottomBarVariations[] = { + {"- 1A with GTS", kAndroidBottomBarShowBottomBarOnGtsParam, nullptr}, + {"- 1B", kAndroidBottomBarKeepAppMenuInToolbarParam, nullptr}, + {"- 1B with GTS", kAndroidBottomBarKeepAppMenuInToolbarWithGtsParam, + nullptr}, + {"- 1C", kAndroidBottomBarKeepBothInToolbarParam, nullptr}, + {"- 1C with GTS", kAndroidBottomBarKeepBothInToolbarWithGtsParam, nullptr}}; + const FeatureEntry::FeatureParam kTabBottomSheetDontShowFusebox[] = { {"dont_show_fusebox", "true"}}; const FeatureEntry::FeatureVariation kTabBottomSheetVariations[] = { {"Dont Show Fusebox", kTabBottomSheetDontShowFusebox, nullptr}}; -const FeatureEntry::FeatureParam kAndroidPinnedTabsSearchBoxMovement[] = { - {"search_box_movement", "true"}}; -const FeatureEntry::FeatureParam kAndroidPinnedTabsSearchBoxSquishAnimation[] = - {{"search_box_squish_animation", "true"}}; -const FeatureEntry::FeatureParam - kAndroidPinnedTabsSearchBoxMovementWithSquishAnimation[] = { - {"search_box_movement", "true"}, - {"search_box_squish_animation", "true"}}; -const FeatureEntry::FeatureVariation kAndroidPinnedTabsVariations[] = { - {"Enable search box movement", kAndroidPinnedTabsSearchBoxMovement, - nullptr}, - {"Enable search box squish animation", - kAndroidPinnedTabsSearchBoxSquishAnimation, nullptr}, - {"Enable search box movement with squish animation", - kAndroidPinnedTabsSearchBoxMovementWithSquishAnimation, nullptr}, -}; - const FeatureEntry::FeatureParam kAndroidTipsNotificationsTrustAndSafety[] = { {"trust_and_safety", "true"}}; const FeatureEntry::FeatureParam kAndroidTipsNotificationsEssential[] = { @@ -4311,11 +4154,6 @@ const FeatureEntry::FeatureVariation kAndroidTipsNotificationsV2Variations[] = { kAndroidTipsNotificationsV2UtilityAndOrganization, nullptr}, }; -const FeatureEntry::FeatureParam kRobustWindowManagementBulkCloseEnabled[] = { - {"bulk_close", "true"}}; -const FeatureEntry::FeatureVariation kRobustWindowManagementVariations[] = { - {"Bulk Close", kRobustWindowManagementBulkCloseEnabled, nullptr}}; - const FeatureEntry::FeatureParam kRobustWindowManagementExperimentalOpenAdjacently[] = { {"open_adjacently", "false"}}; @@ -4563,11 +4401,6 @@ const FeatureEntry::FeatureVariation kProfilePickerTextVariations[] = { {"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) @@ -4614,10 +4447,6 @@ const FeatureEntry::FeatureVariation kAndroidDesktopZoomScalingVariations[] = { // 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"}, @@ -4636,12 +4465,14 @@ const FeatureEntry::FeatureParam kArm7FullBundleNoAutoAddedContextInSidePanelWithCloseToExpandButton[] = { {"ContextualTasksExpandButtonOptions", "toolbar-close-button"}, {"ContextualTasksTabAutoSuggestionChipEnabled", "false"}}; +const FeatureEntry::FeatureParam + kArm8FullBundleEphemeralLogoEntrypointCloseToExpandButton[] = { + {"ContextualTasksEntryPoint", "toolbar-ephemeral-branded"}, + {"ContextualTasksExpandButtonOptions", "toolbar-close-button"}}; const FeatureEntry::FeatureVariation kContextualTasksVariations[] = { {"Arm 1: Full bundle with expando button", kArm1FullBundleWithExpandoButton, 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", @@ -4653,17 +4484,16 @@ const FeatureEntry::FeatureVariation kContextualTasksVariations[] = { {"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) + nullptr}, + {"Arm 8: Full bundle, Ephemeral logo entrypoint, close to expand", + kArm8FullBundleEphemeralLogoEntrypointCloseToExpandButton, nullptr}}; +// LINT.ThenChange(//chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc) -const FeatureEntry::FeatureParam kTaskScopedSidePanel[] = { - {"ContextualTasksTaskScopedSidePanel", "true"}}; -const FeatureEntry::FeatureParam kTabScopedSidePanel[] = { - {"ContextualTasksTaskScopedSidePanel", "false"}}; +const FeatureEntry::FeatureParam kSmartTabSharingEnabled[] = { + {"ContextualTasksContextSmartTabSharing", "true"}}; const FeatureEntry::FeatureVariation kContextualTaskContextVariations[] = { - {" - Task scoped side panel", kTaskScopedSidePanel, nullptr}, - {" - Tab scoped side panel", kTabScopedSidePanel, nullptr}}; + {" - With Smart Tab Sharing", kSmartTabSharingEnabled, nullptr}}; #if BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kAnimatedProgressBar30FpsCap[] = { @@ -4800,6 +4630,34 @@ const FeatureEntry::FeatureVariation kSigninPromoOnAvatarPillVariation[] = { }; #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) +// The choices for the connection allowlists feature. +const FeatureEntry::Choice kConnectionAllowlistsChoices[] = { + {flags_ui::kGenericExperimentChoiceDefault, "", ""}, + {flags_ui::kGenericExperimentChoiceEnabled, switches::kEnableFeatures, + "ConnectionAllowlists,OverrideConnectionAllowlistOriginTrial"}, + {flags_ui::kGenericExperimentChoiceDisabled, switches::kDisableFeatures, + "ConnectionAllowlists,OverrideConnectionAllowlistOriginTrial"}, +}; + +#if BUILDFLAG(ENABLE_SYMPHONIA) +// The choices for the Symphonia audio decoding feature. +const FeatureEntry::Choice kSymphoniaAudioDecodingChoices[] = { + {flags_ui::kGenericExperimentChoiceDefault, "", ""}, + {"Enabled (All Codecs)", switches::kEnableFeatures, + "SymphoniaAudioDecoding,SymphoniaMp3Decoding,SymphoniaPcmDecoding," + "SymphoniaVorbisDecoding"}, + {"Disabled (Overrides Finch)", switches::kDisableFeatures, + "SymphoniaAudioDecoding,SymphoniaMp3Decoding,SymphoniaPcmDecoding," + "SymphoniaVorbisDecoding"}}; +#endif + +const FeatureEntry::FeatureParam kWalletApiPrivatePassesUrl[] = { + {"wallet_pass_save_url", "https://wallet1ppasses.pa.googleapis.com"}}; + +const FeatureEntry::FeatureVariation + kWalletApiPrivatePassesEnabledVariations[] = { + {"Debug", kWalletApiPrivatePassesUrl, nullptr}}; + // RECORDING USER METRICS FOR FLAGS: // ----------------------------------------------------------------------------- // The first line of the entry is the internal name. @@ -4902,6 +4760,17 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kExtensionsOnExtensionUrlsName, flag_descriptions::kExtensionsOnExtensionUrlsDescription, kOsAll, SINGLE_VALUE_TYPE(extensions::switches::kExtensionsOnExtensionURLs)}, + {"extension-telemetry-enterprise-short-reporting-interval", + flag_descriptions::kExtensionTelemetryEnterpriseShortReportingIntervalName, + flag_descriptions:: + kExtensionTelemetryEnterpriseShortReportingIntervalDescription, + kOsDesktop, + FEATURE_VALUE_TYPE( + safe_browsing::kExtensionTelemetryEnterpriseShortReportingInterval)}, + {"optimize-web-request-proxy", + flag_descriptions::kOptimizeWebRequestProxyName, + flag_descriptions::kOptimizeWebRequestProxyDescription, kOsDesktop, + FEATURE_VALUE_TYPE(extensions_features::kOptimizeWebRequestProxy)}, {"web-request-security-info", flag_descriptions::kWebRequestSecurityInfoName, flag_descriptions::kWebRequestSecurityInfoDescription, kOsDesktop, @@ -4948,12 +4817,6 @@ 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, @@ -4968,10 +4831,6 @@ const FeatureEntry kFeatureEntries[] = { kOsAll, FEATURE_VALUE_TYPE( autofill::features::kAutofillShowBubblesBasedOnPriorities)}, - {"backdrop-filter-mirror-edge", - flag_descriptions::kBackdropFilterMirrorEdgeName, - flag_descriptions::kBackdropFilterMirrorEdgeDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kBackdropFilterMirrorEdgeMode)}, {"smooth-scrolling", flag_descriptions::kSmoothScrollingName, flag_descriptions::kSmoothScrollingDescription, // Mac has a separate implementation with its own setting to disable. @@ -5008,6 +4867,9 @@ const FeatureEntry kFeatureEntries[] = { {"enable-rusty-bmp", flag_descriptions::kRustyBmpName, flag_descriptions::kRustyBmpDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kRustyBmpFeature)}, + {"split-view-link-open", flag_descriptions::kSplitViewLinkOpenShortcutName, + flag_descriptions::kSplitViewLinkOpenShortcutDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kSplitViewLinkOpen)}, {"soft-navigation-heuristics", flag_descriptions::kSoftNavigationHeuristicsName, flag_descriptions::kSoftNavigationHeuristicsDescription, kOsAll, @@ -5056,11 +4918,6 @@ const FeatureEntry kFeatureEntries[] = { {"enable-future-v8-vm-features", flag_descriptions::kV8VmFutureName, flag_descriptions::kV8VmFutureDescription, kOsAll, FEATURE_VALUE_TYPE(features::kV8VmFuture)}, -#if BUILDFLAG(IS_ANDROID) - {"taiyaki", flag_descriptions::kTaiyakiName, - flag_descriptions::kTaiyakiDescription, kOsAndroid, - FEATURE_VALUE_TYPE(switches::kTaiyaki)}, -#endif {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName, flag_descriptions::kGpuRasterizationDescription, kOsAll, MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)}, @@ -5244,9 +5101,6 @@ const FeatureEntry kFeatureEntries[] = { {"disable-dns-proxy", flag_descriptions::kDisableDnsProxyName, flag_descriptions::kDisableDnsProxyDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kDisableDnsProxy)}, - {"firmware-update-ui-v2", flag_descriptions::kFirmwareUpdateUIV2Name, - flag_descriptions::kFirmwareUpdateUIV2Description, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kFirmwareUpdateUIV2)}, {"enable-rfc-8925", flag_descriptions::kEnableRFC8925Name, flag_descriptions::kEnableRFC8925Description, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kEnableRFC8925)}, @@ -5366,6 +5220,14 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kShowAutofillSignaturesName, flag_descriptions::kShowAutofillSignaturesDescription, kOsAll, SINGLE_VALUE_TYPE(autofill::switches::kShowAutofillSignatures)}, + {"wallet-api-private-passes-enabled", + flag_descriptions::kWalletApiPrivatePassesEnabledName, + flag_descriptions::kWalletApiPrivatePassesEnabledDescription, kOsAll, + FEATURE_WITH_PARAMS_VALUE_TYPE( + wallet::features::kWalletApiPrivatePassesEnabled, + kWalletApiPrivatePassesEnabledVariations, + "WalletApiPrivatePassesEnabled")}, + {"wallet-service-use-sandbox", flag_descriptions::kWalletServiceUseSandboxName, flag_descriptions::kWalletServiceUseSandboxDescription, @@ -5428,7 +5290,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kEnableVulkanDescription, kOsLinux | kOsAndroid, FEATURE_VALUE_TYPE(features::kVulkan)}, {"force-enable-webgpu-interop", flag_descriptions::kWebGpuInteropName, - flag_descriptions::kkWebGpuInteropDescription, kOsLinux, + flag_descriptions::kWebGpuInteropDescription, kOsLinux, FEATURE_VALUE_TYPE(features::kForceEnableWebGpuInterop)}, {"default-angle-vulkan", flag_descriptions::kDefaultAngleVulkanName, flag_descriptions::kDefaultAngleVulkanDescription, kOsLinux | kOsAndroid, @@ -5503,11 +5365,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kLockScreenNotificationName, flag_descriptions::kLockScreenNotificationDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kLockScreenNotifications)}, - {"enable-service-workers-for-chrome-untrusted", - flag_descriptions::kEnableServiceWorkersForChromeUntrustedName, - flag_descriptions::kEnableServiceWorkersForChromeUntrustedDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(features::kEnableServiceWorkersForChromeUntrusted)}, {"enterprise-reporting-ui", flag_descriptions::kEnterpriseReportingUIName, flag_descriptions::kEnterpriseReportingUIDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kEnterpriseReportingUI)}, @@ -5546,16 +5403,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kNotificationsIgnoreRequireInteractionDescription, kOsCrOS, FEATURE_VALUE_TYPE(features::kNotificationsIgnoreRequireInteraction)}, - {"sys-ui-holdback-drive-integration", - flag_descriptions::kSysUiShouldHoldbackDriveIntegrationName, - flag_descriptions::kSysUiShouldHoldbackDriveIntegrationDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kSysUiShouldHoldbackDriveIntegration)}, - {"sys-ui-holdback-task-management", - flag_descriptions::kSysUiShouldHoldbackTaskManagementName, - flag_descriptions::kSysUiShouldHoldbackTaskManagementDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kSysUiShouldHoldbackTaskManagement)}, - #endif // BUILDFLAG(IS_CHROMEOS) #if (BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)) {"mojo-use-eventfd", flag_descriptions::kMojoUseEventFdName, @@ -5589,6 +5436,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDirectSocketsInSharedWorkersDescription, kOsDesktop, FEATURE_VALUE_TYPE(blink::features::kDirectSocketsInSharedWorkers)}, #if BUILDFLAG(IS_CHROMEOS) + {"enable-chromeos-isolated-web-app-set-shape", + flag_descriptions::kEnableChromeOSIsolatedWebAppSetShapeName, + flag_descriptions::kEnableChromeOSIsolatedWebAppSetShapeDescription, + kOsCrOS, + FEATURE_VALUE_TYPE(chromeos::features::kCrosIsolatedWebAppSetShape)}, {"enable-isolated-web-app-managed-guest-session-install", flag_descriptions::kEnableIsolatedWebAppManagedGuestSessionInstallName, flag_descriptions:: @@ -5608,6 +5460,12 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kEnableIsolatedWebAppDevModeName, flag_descriptions::kEnableIsolatedWebAppDevModeDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kIsolatedWebAppDevMode)}, +#if BUILDFLAG(IS_WIN) + {"enable-process-isolation-ui", + flag_descriptions::kEnableProcessIsolationUiName, + flag_descriptions::kEnableProcessIsolationUiDescription, kOsWin, + FEATURE_VALUE_TYPE(features::kProcessIsolationSettings)}, +#endif // BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) {"enable-iwa-key-distribution-component", flag_descriptions::kEnableIwaKeyDistributionComponentName, @@ -5653,9 +5511,6 @@ const FeatureEntry kFeatureEntries[] = { {"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, @@ -5858,6 +5713,9 @@ const FeatureEntry kFeatureEntries[] = { {"webxr-plane-detection", flag_descriptions::kWebXrPlaneDetectionName, flag_descriptions::kWebXrPlaneDetectionDescription, kOsWin | kOsAndroid, FEATURE_VALUE_TYPE(device::features::kWebXRPlaneDetection)}, + {"webxr-mesh-detection", flag_descriptions::kWebXrMeshDetectionName, + flag_descriptions::kWebXrMeshDetectionDescription, kOsWin | kOsAndroid, + FEATURE_VALUE_TYPE(blink::features::kWebXRMeshDetection)}, {"webxr-runtime", flag_descriptions::kWebXrForceRuntimeName, flag_descriptions::kWebXrForceRuntimeDescription, kOsDesktop | kOsAndroid, MULTI_VALUE_TYPE(kWebXrForceRuntimeChoices)}, @@ -5873,9 +5731,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOpenXRAndroidSmoothDepthName, flag_descriptions::kOpenXRAndroidSmoothDepthDescription, kOsAndroid, FEATURE_VALUE_TYPE(device::features::kOpenXR)}, - {"enable-openxr-extended", flag_descriptions::kOpenXRExtendedFeaturesName, - flag_descriptions::kOpenXRExtendedFeaturesDescription, kOsAndroid, - FEATURE_VALUE_TYPE(device::features::kOpenXrExtendedFeatureSupport)}, #endif // BUILDFLAG(IS_ANDROID) && BUILDFLAG(ENABLE_OPENXR) #endif // ENABLE_VR #if BUILDFLAG(IS_CHROMEOS) @@ -5938,19 +5793,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kTabClosureMethodRefactorDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kTabClosureMethodRefactor)}, - // Pinned tabs. - {"android-pinned-tabs", flag_descriptions::kAndroidPinnedTabsName, - flag_descriptions::kAndroidPinnedTabsDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kAndroidPinnedTabs, - kAndroidPinnedTabsVariations, - "AndroidPinnedTabsVariations")}, - - // Pinned tabs on tablet tab strip. - {"android-pinned-tabs-tablet-tab-strip", - flag_descriptions::kAndroidPinnedTabsTabletTabStripName, - flag_descriptions::kAndroidPinnedTabsTabletTabStripDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kAndroidPinnedTabsTabletTabStrip)}, - // Home module pref refactor {"home-module-pref-refactor", flag_descriptions::kHomeModulePrefRefactorName, @@ -6048,6 +5890,11 @@ const FeatureEntry kFeatureEntries[] = { {"enable-tls13-early-data", flag_descriptions::kEnableTLS13EarlyDataName, flag_descriptions::kEnableTLS13EarlyDataDescription, kOsAll, FEATURE_VALUE_TYPE(net::features::kEnableTLS13EarlyData)}, + {"ct-ignore-scts-from-ocsp", + flag_descriptions::kCertificateTransparencyIgnoreOcspSctsName, + flag_descriptions::kCertificateTransparencyIgnoreOcspSctsDescription, + kOsAll, + FEATURE_VALUE_TYPE(net::features::kCertificateTransparencyIgnoreOcspScts)}, {"tls-trust-anchor-ids", flag_descriptions::kTLSTrustAnchorIDsName, flag_descriptions::kTLSTrustAnchorIDsDescription, kOsAll, FEATURE_VALUE_TYPE(net::features::kTLSTrustAnchorIDs)}, @@ -6086,11 +5933,6 @@ const FeatureEntry kFeatureEntries[] = { {"refresh-feed-on-start", flag_descriptions::kRefreshFeedOnRestartName, flag_descriptions::kRefreshFeedOnRestartDescription, kOsAndroid, FEATURE_VALUE_TYPE(feed::kRefreshFeedOnRestart)}, - {"feed-header-removal", flag_descriptions::kFeedHeaderRemovalName, - flag_descriptions::kFeedHeaderRemovalDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(feed::kFeedHeaderRemoval, - kFeedHeaderRemovalVariations, - "FeedHeaderRemoval")}, {"feed-audio-overviews", flag_descriptions::kFeedAudioOverviewsName, flag_descriptions::kFeedAudioOverviewsDescription, kOsAndroid, FEATURE_VALUE_TYPE(feed::kFeedAudioOverviews)}, @@ -6282,12 +6124,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kTouchTextEditingRedesignName, flag_descriptions::kTouchTextEditingRedesignDescription, kOsAll, FEATURE_VALUE_TYPE(features::kTouchTextEditingRedesign)}, -#if BUILDFLAG(IS_MAC) - {"enable-retry-capture-device-enumeration-on-crash", - flag_descriptions::kRetryGetVideoCaptureDeviceInfosName, - flag_descriptions::kRetryGetVideoCaptureDeviceInfosDescription, kOsMac, - FEATURE_VALUE_TYPE(features::kRetryGetVideoCaptureDeviceInfos)}, -#endif // BUILDFLAG(IS_MAC) {"enable-web-payments-experimental-features", flag_descriptions::kWebPaymentsExperimentalFeaturesName, flag_descriptions::kWebPaymentsExperimentalFeaturesDescription, kOsAll, @@ -6362,9 +6198,6 @@ const FeatureEntry kFeatureEntries[] = { {"arc-resize-compat", flag_descriptions::kArcResizeCompatName, flag_descriptions::kArcResizeCompatDescription, kOsCrOS, FEATURE_VALUE_TYPE(arc::kResizeCompat)}, - {"arc-rt-vcpu-quad-core", flag_descriptions::kArcRtVcpuQuadCoreName, - flag_descriptions::kArcRtVcpuQuadCoreDesc, kOsCrOS, - FEATURE_VALUE_TYPE(arc::kRtVcpuQuadCore)}, {"arc-unthrottle-on-active-audio-v2", flag_descriptions::kArcUnthrottleOnActiveAudioV2Name, flag_descriptions::kArcUnthrottleOnActiveAudioV2Description, kOsCrOS, @@ -6402,9 +6235,6 @@ const FeatureEntry kFeatureEntries[] = { {"crostini-gpu-support", flag_descriptions::kCrostiniGpuSupportName, flag_descriptions::kCrostiniGpuSupportDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kCrostiniGpuSupport)}, - {"files-conflict-dialog", flag_descriptions::kFilesConflictDialogName, - flag_descriptions::kFilesConflictDialogDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kFilesConflictDialog)}, {"files-local-image-search", flag_descriptions::kFilesLocalImageSearchName, flag_descriptions::kFilesLocalImageSearchDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kFilesLocalImageSearch)}, @@ -6495,10 +6325,22 @@ const FeatureEntry kFeatureEntries[] = { kAndroidAppIntegrationModuleVariations, "AndroidAppIntegrationModule")}, + {"android-app-rating-prompt", + flag_descriptions::kAndroidAppRatingPromptName, + flag_descriptions::kAndroidAppRatingPromptDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kAndroidAppRatingPrompt, + kAndroidAppRatingPromptVariations, + "AndroidAppRatingPrompt")}, + {"android-media-picker", flag_descriptions::kAndroidMediaPickerName, flag_descriptions::kAndroidMediaPickerDescription, kOsAndroid, FEATURE_VALUE_TYPE(kAndroidMediaPicker)}, + {"android-page-info-as-app-menu-item", + flag_descriptions::kAndroidPageInfoAsAppMenuItemName, + flag_descriptions::kAndroidPageInfoAsAppMenuItemDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kAndroidPageInfoAsAppMenuItem)}, + {"user-media-screen-capturing", flag_descriptions::kUserMediaScreenCapturingName, flag_descriptions::kUserMediaScreenCapturingDescription, kOsAndroid, @@ -6525,16 +6367,6 @@ const FeatureEntry kFeatureEntries[] = { kNewTabPageCustomizationV2Variations, "NewTabPageCustomizationV2")}, - {"android-composeplate", flag_descriptions::kAndroidComposeplateName, - flag_descriptions::kAndroidComposeplateDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kAndroidComposeplate, - kAndroidComposeplateVariations, - "AndroidComposeplate")}, - - {"android-composeplate-lff", flag_descriptions::kAndroidComposeplateLFFName, - flag_descriptions::kAndroidComposeplateLFFDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kAndroidComposeplateLFF)}, - {"new-tab-page-customization-for-mvt", flag_descriptions::kNewTabPageCustomizationForMvtName, flag_descriptions::kNewTabPageCustomizationForMvtDescription, kOsAndroid, @@ -6684,6 +6516,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(omnibox_feature_configs::ContextualSearch:: kOmniboxContextualSuggestions)}, + {"searchbox-embedded-permission", + flag_descriptions::kEmbeddedPermissionEnabledName, + flag_descriptions::kEmbeddedPermissionEnabledDescription, kOsDesktop, + FEATURE_VALUE_TYPE(omnibox_feature_configs::kEmbeddedPermissionEnabled)}, + {"lens-overlay-omnibox-entry-point", flag_descriptions::kLensOverlayOmniboxEntryPointName, flag_descriptions::kLensOverlayOmniboxEntryPointDescription, kOsDesktop, @@ -6713,11 +6550,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOmniboxAllowAiModeMatchesDescription, kOsDesktop, FEATURE_VALUE_TYPE(omnibox_feature_configs::AiMode::kAllowAiModeMatches)}, - {"omnibox-drive-suggestions-no-sync-requirement", - flag_descriptions::kOmniboxDriveSuggestionsNoSyncRequirementName, - flag_descriptions::kOmniboxDriveSuggestionsNoSyncRequirementDescription, - kOsDesktop, - FEATURE_VALUE_TYPE(omnibox::kDocumentProviderNoSyncRequirement)}, {"omnibox-force-allowed-to-be-default", flag_descriptions::kOmniboxForceAllowedToBeDefaultName, flag_descriptions::kOmniboxForceAllowedToBeDefaultDescription, kOsDesktop, @@ -6800,6 +6632,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOmniboxAimServerEligibilityDescription, kOsAll, FEATURE_VALUE_TYPE(omnibox::kAimServerEligibilityEnabled)}, + {"omnibox-zero-suggest-prefetching-for-composebox", + flag_descriptions::kZeroSuggestPrefetchingForComposeboxName, + flag_descriptions::kZeroSuggestPrefetchingForComposeboxDescription, kOsAll, + FEATURE_VALUE_TYPE(omnibox::kZeroSuggestPrefetchingForComposebox)}, + {"aim-server-eligibility-include-client-locale", flag_descriptions::kAimServerEligibilityIncludeClientLocaleName, flag_descriptions::kAimServerEligibilityIncludeClientLocaleDescription, @@ -7120,6 +6957,13 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kVerticalTabsDescription, kOsDesktop, FEATURE_VALUE_TYPE(tabs::kVerticalTabs)}, + {"vertical-tabs-expand-on-hover", + flag_descriptions::kVerticalTabsExpandOnHoverName, + flag_descriptions::kVerticalTabsExpandOnHoverDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(tabs::kVerticalTabsExpandOnHover, + kVerticalTabsExpandOnHoverVariations, + "VerticalTabsExpandOnHover")}, + {"side-panel-flyover-animation", flag_descriptions::kSidePanelFlyoverAnimationName, flag_descriptions::kSidePanelFlyoverAnimationDescription, @@ -7176,14 +7020,11 @@ const FeatureEntry kFeatureEntries[] = { kOsAndroid | kOsDesktop, FEATURE_VALUE_TYPE(commerce::kPriceTrackingSubscriptionServiceLocaleKey)}, - {"price-tracking-subscription-service-product-version", - commerce::flag_descriptions:: - kPriceTrackingSubscriptionServiceProductVersionName, - commerce::flag_descriptions:: - kPriceTrackingSubscriptionServiceProductVersionDescription, - kOsAndroid | kOsDesktop, - FEATURE_VALUE_TYPE( - commerce::kPriceTrackingSubscriptionServiceProductVersion)}, + {"composebox-drive-context-menu-option", + flag_descriptions::kComposeboxDriveContextMenuOptionName, + flag_descriptions::kComposeboxDriveContextMenuOptionDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(omnibox::kComposeboxDriveContextMenuOption)}, {"composebox-uses-chrome-compose-client", flag_descriptions::kNtpComposeboxUsesChromeComposeClientName, @@ -7266,6 +7107,11 @@ const FeatureEntry kFeatureEntries[] = { kNtpFeatureOptimizationShortcutsRemovalVariations, "NtpFeatureOptimizationShortcutsRemoval")}, + {"ntp-simplification-bookmark-bar", + flag_descriptions::kNtpSimplificationBookmarkBarName, + flag_descriptions::kNtpSimplificationBookmarkBarDescription, kOsDesktop, + FEATURE_VALUE_TYPE(ntp_features::kNtpSimplificationBookmarkBar)}, + {"ntp-feature-optimization-dismiss-modules-removal", flag_descriptions::kNtpFeatureOptimizationDismissModulesRemovalName, flag_descriptions::kNtpFeatureOptimizationDismissModulesRemovalDescription, @@ -7283,6 +7129,13 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(ntp_features::kNtpMiddleSlotPromoDismissal, kNtpMiddleSlotPromoDismissalVariations, "DesktopNtpModules")}, + {"ntp-animated-doodles", flag_descriptions::kNtpAnimatedDoodlesName, + flag_descriptions::kNtpAnimatedDoodlesDescription, kOsDesktop, + FEATURE_VALUE_TYPE(ntp_features::kNtpAnimatedDoodles)}, + + {"ntp-doodle-murals", flag_descriptions::kNtpDoodleMuralsName, + flag_descriptions::kNtpDoodleMuralsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(ntp_features::kNtpDoodleMurals)}, {"ntp-module-sign-in-requirement", flag_descriptions::kNtpModuleSignInRequirementName, @@ -7317,12 +7170,6 @@ const FeatureEntry kFeatureEntries[] = { kNtpRealboxCr23ThemingVariations, "NtpRealboxCr23Theming")}, - {"ntp-safe-browsing-module", flag_descriptions::kNtpSafeBrowsingModuleName, - flag_descriptions::kNtpSafeBrowsingModuleDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(ntp_features::kNtpSafeBrowsingModule, - kNtpSafeBrowsingModuleVariations, - "DesktopNtpModules")}, - {"ntp-sharepoint-module", flag_descriptions::kNtpSharepointModuleName, flag_descriptions::kNtpSharepointModuleDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(ntp_features::kNtpSharepointModule, @@ -7357,6 +7204,10 @@ const FeatureEntry kFeatureEntries[] = { kOsDesktop, FEATURE_VALUE_TYPE(ntp_features::kNtpMicrosoftAuthenticationModule)}, + {"ntp-shortcuts-redesign", flag_descriptions::kNtpShortcutsRedesignName, + flag_descriptions::kNtpShortcutsRedesignDescription, kOsDesktop, + FEATURE_VALUE_TYPE(ntp_features::kNtpShortcutsRedesign)}, + #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(CHROME_WIDE_ECHO_CANCELLATION) @@ -7490,11 +7341,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(ENABLE_PRINTING) #if BUILDFLAG(IS_WIN) - {"enable-windows-gaming-input-data-fetcher", - flag_descriptions::kEnableWindowsGamingInputDataFetcherName, - flag_descriptions::kEnableWindowsGamingInputDataFetcherDescription, kOsWin, - FEATURE_VALUE_TYPE(features::kEnableWindowsGamingInputDataFetcher)}, - {"gamepad-raw-input-change-event", flag_descriptions::kGamepadRawInputChangeEventName, flag_descriptions::kGamepadRawInputChangeEventDescription, kOsWin, @@ -7512,12 +7358,6 @@ const FeatureEntry kFeatureEntries[] = { kOsAndroid, FEATURE_VALUE_TYPE(external_intents::kNavigationCaptureRefactorAndroid)}, - {"enable-magic-stack-android", flag_descriptions::kMagicStackAndroidName, - flag_descriptions::kMagicStackAndroidDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kMagicStackAndroid, - kMagicStackAndroidVariations, - "MagicStackAndroid")}, - {"enable-educational-tip-default-browser-promo-card", flag_descriptions::kEducationalTipDefaultBrowserPromoCardName, flag_descriptions::kEducationalTipDefaultBrowserPromoCardDescription, @@ -7569,14 +7409,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidSetupListDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kAndroidSetupList)}, - {"enable-search-resumption-module", - flag_descriptions::kSearchResumptionModuleAndroidName, - flag_descriptions::kSearchResumptionModuleAndroidDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE( - chrome::android::kSearchResumptionModuleAndroid, - kSearchResumptionModuleAndroidVariations, - "kSearchResumptionModuleAndroid")}, - {"price-insights", commerce::flag_descriptions::kPriceInsightsName, commerce::flag_descriptions::kPriceInsightsDescription, kOsAndroid, FEATURE_VALUE_TYPE(commerce::kPriceInsights)}, @@ -7690,17 +7522,20 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(media::kHeadlessCaptionEarlyStart)}, #if BUILDFLAG(IS_CHROMEOS) - {"enable-chromeos-live-translate", - flag_descriptions::kEnableCrOSLiveTranslateName, - flag_descriptions::kEnableCrOSLiveTranslateDescription, kOsCrOS, - FEATURE_VALUE_TYPE(media::kLiveTranslate)}, - {"enable-chromeos-soda-conch", flag_descriptions::kEnableCrOSSodaConchLanguagesName, flag_descriptions::kEnableCrOSSodaConchLanguagesDescription, kOsCrOS, FEATURE_VALUE_TYPE(speech::kCrosSodaConchLanguages)}, #endif +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || \ + BUILDFLAG(IS_CHROMEOS) + {"enable-input-protection", flag_descriptions::kEnableInputProtectionName, + flag_descriptions::kEnableInputProtectionDescription, kOsDesktop, + FEATURE_VALUE_TYPE(views::features::kEnableInputProtection)}, +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || + // BUILDFLAG(IS_CHROMEOS) + {"read-anything-read-aloud-phrase-highlighting", flag_descriptions::kReadAnythingReadAloudPhraseHighlightingName, flag_descriptions::kReadAnythingReadAloudPhraseHighlightingDescription, @@ -7814,6 +7649,14 @@ const FeatureEntry kFeatureEntries[] = { kOsAndroid, FEATURE_VALUE_TYPE( chrome::android::kCCTOpenInBrowserButtonIfEnabledByEmbedder)}, + {"cct-page-content-request-allowed", + flag_descriptions::kCCTPageContentRequestAllowedName, + flag_descriptions::kCCTPageContentRequestAllowedDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kCCTPageContentRequestAllowed)}, + {"cct-page-content-request-enabled", + flag_descriptions::kCCTPageContentRequestEnabledName, + flag_descriptions::kCCTPageContentRequestEnabledDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kCCTPageContentRequestEnabled)}, {"cct-navigation-metrics", flag_descriptions::kCCTNavigationMetricsName, flag_descriptions::kCCTNavigationMetricsDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kCCTNavigationMetrics)}, @@ -7949,10 +7792,6 @@ const FeatureEntry kFeatureEntries[] = { #endif #if BUILDFLAG(IS_CHROMEOS) - {"disable-quick-answers-v2-translation", - flag_descriptions::kDisableQuickAnswersV2TranslationName, - flag_descriptions::kDisableQuickAnswersV2TranslationDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kDisableQuickAnswersV2Translation)}, {"quick-answers-rich-card", flag_descriptions::kQuickAnswersRichCardName, flag_descriptions::kQuickAnswersRichCardDescription, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswersRichCard)}, @@ -8093,11 +7932,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kBlockTelephonyDevicePhoneMuteDescription, kOsCrOS, FEATURE_VALUE_TYPE(ui::kBlockTelephonyDevicePhoneMute)}, - {"enable-doze-mode-power-scheduler", - flag_descriptions::kEnableDozeModePowerSchedulerName, - flag_descriptions::kEnableDozeModePowerSchedulerDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kEnableDozeModePowerScheduler)}, - {"enable-fast-ink-for-software-cursor", flag_descriptions::kEnableFastInkForSoftwareCursorName, flag_descriptions::kEnableFastInkForSoftwareCursorDescription, kOsCrOS, @@ -8145,12 +7979,6 @@ const FeatureEntry kFeatureEntries[] = { kOsCrOS, FEATURE_VALUE_TYPE(features::kEnableNearbyBleV2ExtendedAdvertising)}, - {"nearby-bluetooth-classic-adv", - flag_descriptions::kEnableNearbyBluetoothClassicAdvertisingName, - flag_descriptions::kEnableNearbyBluetoothClassicAdvertisingDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(features::kEnableNearbyBluetoothClassicAdvertising)}, - {"nearby-presence", flag_descriptions::kNearbyPresenceName, flag_descriptions::kNearbyPresenceDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kNearbyPresence)}, @@ -8279,11 +8107,6 @@ const FeatureEntry kFeatureEntries[] = { SINGLE_VALUE_TYPE(switches::kEnableWebGPUDeveloperFeatures)}, #if BUILDFLAG(IS_CHROMEOS) - {"game-dashboard-gamepad-support", - flag_descriptions::kGameDashboardGamepadSupport, - flag_descriptions::kGameDashboardGamepadSupport, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kGameDashboardGamepadSupport)}, - {"game-dashboard-utilities", flag_descriptions::kGameDashboardUtilities, flag_descriptions::kGameDashboardUtilitiesDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kGameDashboardUtilities)}, @@ -8566,6 +8389,9 @@ const FeatureEntry kFeatureEntries[] = { kOsAll, FEATURE_VALUE_TYPE( webnn::mojom::features::kExperimentalWebMachineLearningNeuralNetwork)}, + {"webnn-litert", flag_descriptions::kWebNNLiteRTName, + flag_descriptions::kWebNNLiteRTDescription, kOsAll, + FEATURE_VALUE_TYPE(webnn::mojom::features::kWebNNLiteRT)}, #if BUILDFLAG(IS_MAC) {"webnn-coreml", flag_descriptions::kWebNNCoreMLName, @@ -8609,15 +8435,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(page_info::kPrivacyPolicyInsights)}, #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_CHROMEOS) - {"cros-block-warnings", - flag_descriptions::kCrosSystemLevelPermissionBlockedWarningsName, - flag_descriptions::kCrosSystemLevelPermissionBlockedWarningsDescription, - kOsDesktop, - FEATURE_VALUE_TYPE(content_settings::features:: - kCrosSystemLevelPermissionBlockedWarnings)}, -#endif - #if BUILDFLAG(IS_CHROMEOS) {"launcher-continue-section-with-recents", flag_descriptions::kLauncherContinueSectionWithRecentsName, @@ -8628,11 +8445,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(ash::kLauncherItemSuggest, kLauncherItemSuggestVariations, "LauncherItemSuggest")}, - - {"launcher-keyword-extraction-scoring", - flag_descriptions::kLauncherKeywordExtractionScoring, - flag_descriptions::kLauncherKeywordExtractionScoringDescription, kOsCrOS, - FEATURE_VALUE_TYPE(search_features::kLauncherKeywordExtractionScoring)}, {"launcher-local-image-search", flag_descriptions::kLauncherLocalImageSearchName, flag_descriptions::kLauncherLocalImageSearchDescription, kOsCrOS, @@ -8701,28 +8513,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(printing::features::kEnableOopPrintDrivers)}, #endif -#if BUILDFLAG(IS_ANDROID) - {"media-picker-adoption", flag_descriptions::kMediaPickerAdoptionStudyName, - flag_descriptions::kMediaPickerAdoptionStudyDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE( - photo_picker::features::kAndroidMediaPickerAdoption, - kPhotoPickerAdoptionStudyFeatureVariations, - "MediaPickerAdoption")}, -#endif // BUILDFLAG(IS_ANDROID) - {"privacy-sandbox-internals", flag_descriptions::kPrivacySandboxInternalsName, flag_descriptions::kPrivacySandboxInternalsDescription, kOsAll, FEATURE_VALUE_TYPE(privacy_sandbox::kPrivacySandboxInternalsDevUI)}, -#if !BUILDFLAG(IS_ANDROID) - {"sct-auditing", flag_descriptions::kSCTAuditingName, - flag_descriptions::kSCTAuditingDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(features::kSCTAuditing, - kSCTAuditingVariations, - "SCTAuditingVariations")}, -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) {"incognito-screenshot", flag_descriptions::kIncognitoScreenshotName, flag_descriptions::kIncognitoScreenshotDescription, kOsAndroid, @@ -8787,10 +8582,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWallpaperFastRefreshName, flag_descriptions::kWallpaperFastRefreshDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kWallpaperFastRefresh)}, - {kWallpaperGooglePhotosSharedAlbumsInternalName, - flag_descriptions::kWallpaperGooglePhotosSharedAlbumsName, - flag_descriptions::kWallpaperGooglePhotosSharedAlbumsDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kWallpaperGooglePhotosSharedAlbums)}, #endif // BUILDFLAG(IS_CHROMEOS) {"enable-global-vaapi-lock", flag_descriptions::kGlobalVaapiLockName, @@ -8812,6 +8603,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kFedCmAutofillDescription, kOsAll, FEATURE_VALUE_TYPE(features::kFedCmAutofill)}, + {"fedcm-ambient-ui", flag_descriptions::kFedCmAmbientUIName, + flag_descriptions::kFedCmAmbientUIDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kFedCmAmbientUI)}, + {"fedcm-delegation", flag_descriptions::kFedCmDelegationName, flag_descriptions::kFedCmDelegationDescription, kOsAll, FEATURE_VALUE_TYPE(features::kFedCmDelegation)}, @@ -8897,8 +8692,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kLensEnableSendUrlsInComposeboxesDescription, kOsAll, FEATURE_VALUE_TYPE(lens::features::kLensSendUrlsInComposeboxes)}, - {flag_descriptions::kEnableLensStandaloneFlagId, - flag_descriptions::kEnableLensStandaloneName, + {"enable-lens-standalone", flag_descriptions::kEnableLensStandaloneName, flag_descriptions::kEnableLensStandaloneDescription, kOsDesktop, FEATURE_VALUE_TYPE(lens::features::kLensStandalone)}, @@ -8987,14 +8781,18 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kPrerender2ReuseHostDescription, kOsAll, FEATURE_VALUE_TYPE(features::kPrerender2ReuseHost)}, + {"prerender2-cross-origin-iframes", + flag_descriptions::kPrerender2CrossOriginIframesName, + flag_descriptions::kPrerender2CrossOriginIframesDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kPrerender2CrossOriginIframes)}, + {"prerender-until-script", flag_descriptions::kPrerenderUntilScriptName, flag_descriptions::kPrerenderUntilScriptDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kPrerenderUntilScript)}, {"prerender-activation-by-form-submission", flag_descriptions::kPrerenderActivationByFormSubmissionName, - flag_descriptions::kPrerenderActivationByFormSubmissiontDescription, - kOsAll, + flag_descriptions::kPrerenderActivationByFormSubmissionDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kPrerenderActivationByFormSubmission)}, #if BUILDFLAG(IS_CHROMEOS) @@ -9009,17 +8807,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kTestThirdPartyCookiePhaseoutDescription, kOsAll, SINGLE_VALUE_TYPE(network::switches::kTestThirdPartyCookiePhaseout)}, - {"tpcd-heuristics-grants", flag_descriptions::kTpcdHeuristicsGrantsName, - flag_descriptions::kTpcdHeuristicsGrantsDescription, kOsAll, - FEATURE_WITH_PARAMS_VALUE_TYPE( - content_settings::features::kTpcdHeuristicsGrants, - kTpcdHeuristicsGrantsVariations, - "TpcdHeuristicsGrants")}, - - {"tpcd-metadata-grants", flag_descriptions::kTpcdMetadataGrantsName, - flag_descriptions::kTpcdMetadataGrantsDescription, kOsAll, - FEATURE_VALUE_TYPE(net::features::kTpcdMetadataGrants)}, - #if BUILDFLAG(IS_CHROMEOS) {kBackgroundListeningName, flag_descriptions::kBackgroundListeningName, flag_descriptions::kBackgroundListeningDescription, kOsCrOS, @@ -9089,12 +8876,6 @@ const FeatureEntry kFeatureEntries[] = { kOsDesktop | kOsAndroid, FEATURE_VALUE_TYPE(features::kHttpsFirstModeIncognito)}, - {"https-first-mode-incognito-new-settings", - flag_descriptions::kHttpsFirstModeIncognitoNewSettingsName, - flag_descriptions::kHttpsFirstModeIncognitoNewSettingsDescription, - kOsDesktop | kOsAndroid, - FEATURE_VALUE_TYPE(features::kHttpsFirstModeIncognitoNewSettings)}, - {"https-first-mode-for-typically-secure-users", flag_descriptions::kHttpsFirstModeForTypicallySecureUsersName, flag_descriptions::kHttpsFirstModeForTypicallySecureUsersDescription, @@ -9137,11 +8918,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kExtensionsMenuAccessControlDescription, kOsDesktop, FEATURE_VALUE_TYPE(extensions_features::kExtensionsMenuAccessControl)}, - {"extensions-toolbar-zero-state-variation", - flag_descriptions::kExtensionsToolbarZeroStateName, - flag_descriptions::kExtensionsToolbarZeroStateDescription, kOsDesktop, - MULTI_VALUE_TYPE(kExtensionsToolbarZeroStateChoices)}, - {"iph-extensions-menu-feature", flag_descriptions::kIPHExtensionsMenuFeatureName, flag_descriptions::kIPHExtensionsMenuFeatureDescription, kOsDesktop, @@ -9272,6 +9048,17 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( blink::features::kBrowserInitiatedAutomaticPictureInPicture)}, + {"browser-launch-metadata-reporting", + flag_descriptions::kBrowserLaunchMetadataReportingName, + flag_descriptions::kBrowserLaunchMetadataReportingDescription, + kOsLinux | kOsMac | kOsWin, + FEATURE_VALUE_TYPE(enterprise_reporting::kBrowserLaunchMetadataReporting)}, + + {"picture-in-picture-mute-control", + flag_descriptions::kPictureInPictureMuteControlName, + flag_descriptions::kPictureInPictureMuteControlDescription, kOsDesktop, + FEATURE_VALUE_TYPE(media::kPictureInPictureMuteControl)}, + {"picture-in-picture-show-window-animation", flag_descriptions::kPictureInPictureShowWindowAnimationName, flag_descriptions::kPictureInPictureShowWindowAnimationDescription, @@ -9448,11 +9235,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kProjectorAppDebugDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kProjectorAppDebug)}, - {"enable-projector-server-side-usm", - flag_descriptions::kProjectorServerSideUsmName, - flag_descriptions::kProjectorServerSideUsmDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kProjectorUseUSMForS3)}, - {"enable-annotator-mode", flag_descriptions::kAnnotatorModeName, flag_descriptions::kAnnotatorModeDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kAnnotatorMode)}, @@ -9517,7 +9299,7 @@ const FeatureEntry kFeatureEntries[] = { #if BUILDFLAG(ENABLE_SYMPHONIA) {"symphonia-audio-decoding", flag_descriptions::kSymphoniaAudioDecodingName, flag_descriptions::kSymphoniaAudioDecodingDescription, kOsAll, - FEATURE_VALUE_TYPE(media::kSymphoniaAudioDecoding)}, + MULTI_VALUE_TYPE(kSymphoniaAudioDecodingChoices)}, #endif {"safety-check-unused-site-permissions", @@ -9543,6 +9325,12 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSafetyHubUnifiedPasswordsModuleName, flag_descriptions::kSafetyHubUnifiedPasswordsModuleDescription, kOsAndroid, MULTI_VALUE_TYPE(kSafetyHubUnifiedPasswordsModuleChoices)}, + + {"popular-sites-us-refresh", flag_descriptions::kPopularSitesRefreshUsName, + flag_descriptions::kPopularSitesRefreshUsDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(ntp_tiles::kPopularSitesRefreshUs, + kPopularSitesRefreshUsChoices, + "PopularSitesRefreshUs")}, #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) @@ -9555,7 +9343,8 @@ const FeatureEntry kFeatureEntries[] = { {"enable-perfetto-system-tracing", flag_descriptions::kEnablePerfettoSystemTracingName, - flag_descriptions::kEnablePerfettoSystemTracingDescription, kOsAndroid, + flag_descriptions::kEnablePerfettoSystemTracingDescription, + kOsAndroid | kOsLinux, FEATURE_VALUE_TYPE(features::kEnablePerfettoSystemTracing)}, #if BUILDFLAG(IS_ANDROID) @@ -9626,7 +9415,7 @@ const FeatureEntry kFeatureEntries[] = { {"webui-omnibox-popup", flag_descriptions::kWebUIOmniboxPopupName, flag_descriptions::kWebUIOmniboxPopupDescription, kOsDesktop, - FEATURE_VALUE_TYPE(omnibox::kWebUIOmniboxPopup)}, + FEATURE_VALUE_TYPE(omnibox::internal::kWebUIOmniboxPopup)}, {"webui-omnibox-popup-debug", flag_descriptions::kWebUIOmniboxPopupDebugName, @@ -9642,14 +9431,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(omnibox::kWebUIOmniboxPopupSelectionControl)}, #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_CHROMEOS) - {"arc-vm-memory-size", flag_descriptions::kArcVmMemorySizeName, - flag_descriptions::kArcVmMemorySizeDesc, kOsCrOS, - FEATURE_WITH_PARAMS_VALUE_TYPE(arc::kVmMemorySize, - kArcVmMemorySizeVariations, - "VmMemorySize")}, -#endif // BUILDFLAG(IS_CHROMEOS) - #if BUILDFLAG(IS_ANDROID) {"tab-strip-close-refactor-android", @@ -9711,9 +9492,6 @@ const FeatureEntry kFeatureEntries[] = { {"app-launch-shortcut", flag_descriptions::kAppLaunchShortcut, flag_descriptions::kAppLaunchShortcutDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kAppLaunchShortcut)}, - {"enable-welcome-experience", flag_descriptions::kWelcomeExperienceName, - flag_descriptions::kWelcomeExperienceDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kWelcomeExperience)}, {"enable-welcome-experience-test-unsupported-devices", flag_descriptions::kWelcomeExperienceTestUnsupportedDevicesName, flag_descriptions::kWelcomeExperienceTestUnsupportedDevicesDescription, @@ -9736,10 +9514,24 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(ash::features::kGoogleOneOfferFilesBanner)}, #endif - {"sync-autofill-wallet-credential-data", - flag_descriptions::kSyncAutofillWalletCredentialDataName, - flag_descriptions::kSyncAutofillWalletCredentialDataDescription, kOsAll, - FEATURE_VALUE_TYPE(syncer::kSyncAutofillWalletCredentialData)}, + {"sync-account-settings", flag_descriptions::kSyncAccountSettingsName, + flag_descriptions::kSyncAccountSettingsDescription, kOsAll, + FEATURE_VALUE_TYPE(syncer::kSyncAccountSettings)}, + + {"sync-autofill-valuable-metadata", + flag_descriptions::kSyncAutofillValuableMetadataName, + flag_descriptions::kSyncAutofillValuableMetadataDescription, kOsAll, + FEATURE_VALUE_TYPE(syncer::kSyncAutofillValuableMetadata)}, + + {"sync-wallet-flight-reservations", + flag_descriptions::kSyncWalletFlightReservationsName, + flag_descriptions::kSyncWalletFlightReservationsDescription, kOsAll, + FEATURE_VALUE_TYPE(syncer::kSyncWalletFlightReservations)}, + + {"sync-wallet-vehicle-registrations", + flag_descriptions::kSyncWalletVehicleRegistrationsName, + flag_descriptions::kSyncWalletVehicleRegistrationsDescription, kOsAll, + FEATURE_VALUE_TYPE(syncer::kSyncWalletVehicleRegistrations)}, #if BUILDFLAG(IS_CHROMEOS) {"cros-labs-window-cycle-shortcut", @@ -9758,13 +9550,6 @@ const FeatureEntry kFeatureEntries[] = { SINGLE_VALUE_TYPE(ash::switches::kEolResetDismissedPrefs)}, #endif -#if !BUILDFLAG(IS_ANDROID) - {"enable-preferences-account-storage", - flag_descriptions::kEnablePreferencesAccountStorageName, - flag_descriptions::kEnablePreferencesAccountStorageDescription, kOsDesktop, - FEATURE_VALUE_TYPE(switches::kEnablePreferencesAccountStorage)}, -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_CHROMEOS) {"render-arc-notifications-by-chrome", flag_descriptions::kRenderArcNotificationsByChromeName, @@ -9837,9 +9622,13 @@ const FeatureEntry kFeatureEntries[] = { #endif {"glass-toolbar", flag_descriptions::kGlassToolbarName, - flag_descriptions::kGlassToolbarDescription, kOsAll, + flag_descriptions::kGlassToolbarDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlassToolbar)}, + {"toolbar-glow-up", flag_descriptions::kToolbarGlowUpName, + flag_descriptions::kToolbarGlowUpDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kToolbarGlowUp)}, + {"render-document", flag_descriptions::kRenderDocumentName, flag_descriptions::kRenderDocumentDescription, kOsAll, FEATURE_WITH_PARAMS_VALUE_TYPE(features::kRenderDocument, @@ -9864,12 +9653,6 @@ const FeatureEntry kFeatureEntries[] = { extensions_features::kExtensionDisableUnsupportedDeveloper)}, #endif // BUILDFLAG(ENABLE_EXTENSIONS) - {"autofill-enable-cvc-storage-and-filling", - flag_descriptions::kAutofillEnableCvcStorageAndFillingName, - flag_descriptions::kAutofillEnableCvcStorageAndFillingDescription, kOsAll, - FEATURE_VALUE_TYPE( - autofill::features::kAutofillEnableCvcStorageAndFilling)}, - #if BUILDFLAG(IS_CHROMEOS) {"drive-fs-mirroring", flag_descriptions::kDriveFsMirroringName, flag_descriptions::kDriveFsShowCSEFilesDescription, kOsCrOS, @@ -10092,10 +9875,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kMahiPanelResizableDescription, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kMahiPanelResizable)}, - {"pompano", flag_descriptions::kPompanoName, - flag_descriptions::kPompanoDescritpion, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kPompano)}, - {"mahi-summarize-selected", flag_descriptions::kMahiSummarizeSelectedName, flag_descriptions::kMahiSummarizeSelectedDescription, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kMahiSummarizeSelected)}, @@ -10118,10 +9897,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kEnableToggleCameraShortcutDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kEnableToggleCameraShortcut)}, - {"ash-null-top-row-fix", flag_descriptions::kAshNullTopRowFixName, - flag_descriptions::kAshNullTopRowFixDescription, kOsCrOS, - FEATURE_VALUE_TYPE(ash::features::kNullTopRowFix)}, - #endif // BUILDFLAG(IS_CHROMEOS) #if !BUILDFLAG(IS_ANDROID) @@ -10174,6 +9949,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidZoomIndicatorDescription, kOsAndroid, FEATURE_VALUE_TYPE(browser_ui::kAndroidZoomIndicator)}, + {"android-zoom-immersive", flag_descriptions::kAndroidZoomImmersiveName, + flag_descriptions::kAndroidZoomImmersiveDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kAndroidZoomImmersive)}, + {"tab-bottom-sheet", flag_descriptions::kTabBottomSheetName, flag_descriptions::kTabBottomSheetDescription, kOsAndroid, FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kTabBottomSheet, @@ -10198,7 +9977,14 @@ const FeatureEntry kFeatureEntries[] = { {"chrome-finds", flag_descriptions::kChromeFindsName, flag_descriptions::kChromeFindsDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kChromeFinds)}, + FEATURE_WITH_PARAMS_VALUE_TYPE(finds::features::kChromeFinds, + kChromeFindsVariations, + "ChromeFinds")}, + + {"cross-device-task-handoff", + flag_descriptions::kCrossDeviceTaskHandoffName, + flag_descriptions::kCrossDeviceTaskHandoffDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kCrossDeviceTaskHandoff)}, {"history-pane-android", flag_descriptions::kHistoryPaneAndroidName, flag_descriptions::kHistoryPaneAndroidDescription, kOsAndroid, @@ -10214,12 +10000,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDataSharingDebugLogsDescription, kOsAll, SINGLE_VALUE_TYPE(data_sharing::kDataSharingDebugLoggingEnabled)}, - {"autofill-shared-storage-server-card-data", - flag_descriptions::kAutofillSharedStorageServerCardDataName, - flag_descriptions::kAutofillSharedStorageServerCardDataDescription, kOsAll, - FEATURE_VALUE_TYPE( - autofill::features::kAutofillSharedStorageServerCardData)}, - #if BUILDFLAG(IS_CHROMEOS) {"multi-calendar-in-quick-settings", flag_descriptions::kMultiCalendarSupportName, @@ -10321,7 +10101,18 @@ const FeatureEntry kFeatureEntries[] = { {"replace-sync-promos-with-sign-in-promos-desktop", flag_descriptions::kReplaceSyncPromosWithSignInPromosName, flag_descriptions::kReplaceSyncPromosWithSignInPromosDescription, - kOsDesktop, MULTI_VALUE_TYPE(kReplaceSyncPromosWithSignInPromosChoices)}, + kOsDesktop, + MULTI_VALUE_TYPE(kReplaceSyncPromosWithSignInPromosDesktopChoices)}, + + {"replace-sync-promos-with-signin-promos-new-signin", + flag_descriptions::kReplaceSyncPromosWithSigninPromosNewSigninName, + flag_descriptions::kReplaceSyncPromosWithSigninPromosNewSigninDescription, + kOsDesktop, + MULTI_VALUE_TYPE(kReplaceSyncPromosWithSigninPromosNewSigninChoices)}, + + {"uno-phase-2-follow-up", flag_descriptions::kUnoPhase2FollowUpName, + flag_descriptions::kUnoPhase2FollowUpDescription, kOsDesktop, + FEATURE_VALUE_TYPE(syncer::kUnoPhase2FollowUp)}, #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) {"pwm-show-suggestions-on-autofocus", @@ -10470,11 +10261,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(visited_url_ranking::features:: kVisitedURLRankingHistoryVisibilityScoreFilter)}, - {"autofill-unmask-card-request-timeout", - flag_descriptions::kAutofillUnmaskCardRequestTimeoutName, - flag_descriptions::kAutofillUnmaskCardRequestTimeoutDescription, kOsAll, - FEATURE_VALUE_TYPE(autofill::features::kAutofillUnmaskCardRequestTimeout)}, - #if !BUILDFLAG(IS_ANDROID) {"infinite-tabs-freezing", flag_descriptions::kInfiniteTabsFreezingName, flag_descriptions::kInfiniteTabsFreezingDescription, kOsDesktop, @@ -10572,14 +10358,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kCrosContentAdjustedRefreshRate)}, #endif // BUILDFLAG(IS_CHROMEOS) - {"autofill-enable-cvc-storage-and-filling-enhancement", - flag_descriptions::kAutofillEnableCvcStorageAndFillingEnhancementName, - flag_descriptions:: - kAutofillEnableCvcStorageAndFillingEnhancementDescription, - kOsAll, - FEATURE_VALUE_TYPE( - autofill::features::kAutofillEnableCvcStorageAndFillingEnhancement)}, - #if BUILDFLAG(IS_ANDROID) {"discount-on-navigation", commerce::flag_descriptions::kDiscountOnNavigationName, @@ -10598,10 +10376,6 @@ const FeatureEntry kFeatureEntries[] = { "DisocuntOnNavigation")}, #endif //! BUILDFLAG(IS_ANDROID) - {"devtools-privacy-ui", flag_descriptions::kDevToolsPrivacyUIName, - flag_descriptions::kDevToolsPrivacyUIDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kDevToolsPrivacyUI)}, - {"devtools-live-edit", flag_descriptions::kDevToolsLiveEditName, flag_descriptions::kDevToolsLiveEditDescription, kOsAll, FEATURE_VALUE_TYPE(features::kDevToolsLiveEdit)}, @@ -10673,6 +10447,11 @@ const FeatureEntry kFeatureEntries[] = { {"enable-lens-search-aim-m3", flag_descriptions::kLensSearchAimM3Name, flag_descriptions::kLensSearchAimM3Description, kOsDesktop, FEATURE_VALUE_TYPE(lens::features::kLensSearchAimM3)}, + + {"enable-lens-side-panel-unification", + flag_descriptions::kLensSidePanelUnificationName, + flag_descriptions::kLensSidePanelUnificationDescription, kOsDesktop, + FEATURE_VALUE_TYPE(lens::features::kLensSidePanelUnification)}, #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -10716,13 +10495,6 @@ const FeatureEntry kFeatureEntries[] = { autofill::features:: kAutofillEnableCvcStorageAndFillingStandaloneFormEnhancement)}, -#if !BUILDFLAG(IS_ANDROID) - {"separate-local-and-account-themes", - flag_descriptions::kSeparateLocalAndAccountThemesName, - flag_descriptions::kSeparateLocalAndAccountThemesDescription, kOsDesktop, - FEATURE_VALUE_TYPE(syncer::kSeparateLocalAndAccountThemes)}, -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) {"clank-default-browser-promo-role-manager", flag_descriptions::kClankDefaultBrowserPromoRoleManagerName, @@ -10762,30 +10534,16 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( password_manager::features::kPasswordFormGroupedAffiliations)}, - {"password-form-clientside-classifier", - flag_descriptions::kPasswordFormClientsideClassifierName, - flag_descriptions::kPasswordFormClientsideClassifierDescription, kOsAll, - FEATURE_VALUE_TYPE( - password_manager::features::kPasswordFormClientsideClassifier)}, - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) {"contextual-cueing", flag_descriptions::kContextualCueingName, flag_descriptions::kContextualCueingDescription, kOsDesktop | kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(contextual_cueing::kContextualCueing, + FEATURE_WITH_PARAMS_VALUE_TYPE(glic::kContextualCueing, kContextualCueingEnabledOptions, "ContextualCueingEnabledOptions")}, #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) -#if !BUILDFLAG(IS_ANDROID) - {"separate-local-and-account-search-engines", - flag_descriptions::kSeparateLocalAndAccountSearchEnginesName, - flag_descriptions::kSeparateLocalAndAccountSearchEnginesDescription, - kOsDesktop, - FEATURE_VALUE_TYPE(syncer::kSeparateLocalAndAccountSearchEngines)}, -#endif // !BUILDFLAG(IS_ANDROID) - #if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) {"partition-alloc-with-advanced-checks", flag_descriptions::kPartitionAllocWithAdvancedChecksName, @@ -10855,12 +10613,20 @@ const FeatureEntry kFeatureEntries[] = { "GlicActor,GlicActorUi", switches::kDisableFeatures, "GlicActor,GlicActorUi")}, + {"glic-experimental-triggering", + flag_descriptions::kGlicExperimentalTriggeringName, + flag_descriptions::kGlicExperimentalTriggeringDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicExperimentalTriggering)}, {"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::kGlicActorUiMagicCursor)}, + {"glic-actor-script-tools", + flag_descriptions::kGlicActorEnableScriptToolsName, + flag_descriptions::kGlicActorEnableScriptToolsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(actor::kGlicActorEnableScriptTools)}, {"glic-detached", flag_descriptions::kGlicDetachedName, flag_descriptions::kGlicDetachedDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicDetached)}, @@ -10899,9 +10665,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicWarming, kGlicWarmingVariations, "GlicWarming")}, - {"glic-side-panel", flag_descriptions::kGlicSidePanelName, - flag_descriptions::kGlicSidePanelDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kGlicMultiInstance)}, {"glic-entrypoint-variations", flag_descriptions::kGlicEntrypointVariationsName, flag_descriptions::kGlicEntrypointVariationsDescription, kOsDesktop, @@ -10921,23 +10684,30 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kGlicBindPinnedUnboundTabName, flag_descriptions::kGlicBindPinnedUnboundTabDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicBindPinnedUnboundTab)}, + {"glic-button-alt-label", flag_descriptions::kGlicButtonAltLabelName, + flag_descriptions::kGlicButtonAltLabelDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicButtonAltLabel, + kGlicButtonAltLabelVariations, + "GlicButtonAltLabel")}, + {"glic-button-auto-summarize", + flag_descriptions::kGlicButtonAutoSummarizeName, + flag_descriptions::kGlicButtonAutoSummarizeDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicButtonAutoSummarize)}, {"glic-button-pressed-state", flag_descriptions::kGlicButtonPressedStateName, flag_descriptions::kGlicButtonPressedStateDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicButtonPressedState, kGlicButtonPressedStateVariations, "GlicButtonPressedState")}, - {"glic-button-alt-label", flag_descriptions::kGlicButtonAltLabelName, - flag_descriptions::kGlicButtonAltLabelDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicButtonAltLabel, - kGlicButtonAltLabelVariations, - "GlicButtonAltLabel")}, {"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-client-zoom-control", flag_descriptions::kGlicClientZoomControlName, + flag_descriptions::kGlicClientZoomControlDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicClientZoomControl)}, {"glic-daisy-chain-new-tabs", flag_descriptions::kGlicDaisyChainNewTabsName, flag_descriptions::kGlicDaisyChainNewTabsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicDaisyChainNewTabs)}, @@ -10945,9 +10715,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kGlicUseToolbarHeightSidePanelName, flag_descriptions::kGlicUseToolbarHeightSidePanelDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicUseToolbarHeightSidePanel)}, - {"glic-unified-fre-screen", flag_descriptions::kGlicUnifiedFreScreenName, - flag_descriptions::kGlicUnifiedFreScreenDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kGlicUnifiedFreScreen)}, {"glic-live-mode-only-glow", flag_descriptions::kGlicLiveModeOnlyGlowName, flag_descriptions::kGlicLiveModeOnlyGlowDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicLiveModeOnlyGlow)}, @@ -10968,17 +10735,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kGlicDefaultTabContextSettingDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kGlicDefaultTabContextSetting)}, - {"glic-reset-mi-enablement-by-tier", - flag_descriptions::kGlicResetMultiInstanceEnabledByTierName, - flag_descriptions::kGlicResetMultiInstanceEnabledByTierDescription, - kOsDesktop, - SINGLE_VALUE_TYPE(switches::kGlicResetMultiInstanceEnabledByTier)}, - - {"glic-set-g1-for-mi", - flag_descriptions::kGlicForceG1StatusForMultiInstanceName, - flag_descriptions::kGlicForceG1StatusForMultiInstanceDescription, - kOsDesktop, MULTI_VALUE_TYPE(kGlicSetG1ForMultiInstance)}, - {"glic-guest-url-presets", flag_descriptions::kGlicGuestUrlPresetsName, flag_descriptions::kGlicGuestUrlPresetsDescription, kOsDesktop, FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicGuestUrlPresets, @@ -10987,18 +10743,26 @@ const FeatureEntry kFeatureEntries[] = { {"glic-selection-prompt", flag_descriptions::kGlicSelectionPromptName, flag_descriptions::kGlicSelectionPromptDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kGlicSelectionPrompt)}, + FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicSelectionPrompt, + kGlicSelectionPromptVariations, + "GlicSelectionPrompt")}, {"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) + {"glic-horizontal-tab-toolbar-button", + flag_descriptions::kGlicHorizontalTabToolbarButtonName, + flag_descriptions::kGlicHorizontalTabToolbarButtonDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kGlicHorizontalTabToolbarButton)}, + + {"glic-toolbar-button-location", + flag_descriptions::kGlicToolbarButtonLocationName, + flag_descriptions::kGlicToolbarButtonLocationDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(features::kGlicToolbarButtonLocation, + kGlicToolbarButtonLocationVariations, + "GlicToolbarButtonLocation")}, #if !BUILDFLAG(IS_ANDROID) {"skills", flag_descriptions::kSkillsEnabledName, @@ -11060,10 +10824,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(net::features::kHappyEyeballsV3)}, #if !BUILDFLAG(IS_ANDROID) - {"policy-promotion-banner-flag", - flag_descriptions::kEnablePolicyPromotionBannerName, - flag_descriptions::kEnablePolicyPromotionBannerDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kEnablePolicyPromotionBanner)}, {"management-promotion-banner-flag", flag_descriptions::kEnableManagementPromotionBannerName, flag_descriptions::kEnableManagementPromotionBannerDescription, kOsDesktop, @@ -11206,14 +10966,6 @@ const FeatureEntry kFeatureEntries[] = { password_manager::features::kMarkAllCredentialsAsLeaked)}, #endif // !BUILDFLAG(IS_ANDROID) -#if !BUILDFLAG(IS_ANDROID) - {"account-storage-prefs-themes-search-engines", - flag_descriptions::kAccountStoragePrefsThemesAndSearchEnginesName, - flag_descriptions::kAccountStoragePrefsThemesAndSearchEnginesDescription, - kOsDesktop, - MULTI_VALUE_TYPE(kAccountStoragePrefsThemesAndSearchEnginesChoices)}, -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) {"autofill-enable-amount-extraction", @@ -11221,13 +10973,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAutofillEnableAmountExtractionDescription, kOsDesktop | kOsAndroid, FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableAmountExtraction)}, - {"autofill-enable-non-affiliated-loyalty-cards", - flag_descriptions::kAutofillEnableNonAffiliatedLoyaltyCardsFillingName, - flag_descriptions:: - kAutofillEnableNonAffiliatedLoyaltyCardsFillingDescription, - kOsDesktop | kOsAndroid, - FEATURE_VALUE_TYPE( - autofill::features::kAutofillEnableNonAffiliatedLoyaltyCardsFilling)}, #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) @@ -11444,11 +11189,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) - {"enable-web-app-predictable-app-updating", - flag_descriptions::kEnableWebAppPredictableAppUpdatingName, - flag_descriptions::kEnableWebAppPredictableAppUpdatingDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kWebAppPredictableAppUpdating)}, - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) {"root-scrollbar-follows-browser-theme", flag_descriptions::kRootScrollbarFollowsTheme, @@ -11498,12 +11238,6 @@ const FeatureEntry kFeatureEntries[] = { kOsAll, FEATURE_VALUE_TYPE( network::features::kLocalNetworkAccessChecksWebTransport)}, - {"local-network-access-check-split-permissions", - flag_descriptions::kLocalNetworkAccessChecksSplitPermissionsName, - flag_descriptions::kLocalNetworkAccessChecksSplitPermissionsDescription, - kOsAll, - FEATURE_VALUE_TYPE( - network::features::kLocalNetworkAccessChecksSplitPermissions)}, #if !BUILDFLAG(IS_ANDROID) {"tab-capture-infobar-links", @@ -11638,12 +11372,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidAdaptiveFrameRateDescription, kOsAndroid, FEATURE_VALUE_TYPE(features::kUseFrameIntervalDeciderAdaptiveFrameRate)}, - {"robust-window-management", flag_descriptions::kRobustWindowManagementName, - flag_descriptions::kRobustWindowManagementDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kRobustWindowManagement, - kRobustWindowManagementVariations, - "RobustWindowManagement")}, - {"robust-window-management-experimental", flag_descriptions::kRobustWindowManagementExperimentalName, flag_descriptions::kRobustWindowManagementExperimentalDescription, @@ -11652,6 +11380,10 @@ const FeatureEntry kFeatureEntries[] = { chrome::android::kRobustWindowManagementExperimental, kRobustWindowManagementExperimentalVariations, "RobustWindowManagementExperimental")}, + + {"schedule-window-cleaning", flag_descriptions::kScheduleWindowCleaningName, + flag_descriptions::kScheduleWindowCleaningDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kScheduleWindowCleaning)}, #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) @@ -11661,12 +11393,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(blink::features::kSupportOpeningDraggedLinksInSameTab)}, #endif - {"enable-secure-payment-confirmation-fallback-ux", - flag_descriptions::kSecurePaymentConfirmationFallbackName, - flag_descriptions::kSecurePaymentConfirmationFallbackDescription, kOsAll, - FEATURE_VALUE_TYPE( - payments::features::kSecurePaymentConfirmationFallback)}, - #if BUILDFLAG(IS_ANDROID) {"android-use-display-topology", flag_descriptions::kAndroidUseDisplayTopologyName, @@ -11736,19 +11462,6 @@ const FeatureEntry kFeatureEntries[] = { "TouchToSearchCallout")}, #endif // BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_CHROMEOS) - {"preinstalled-web-app-always-migrate-calculator", - flag_descriptions::kPreinstalledWebAppAlwaysMigrateCalculatorName, - flag_descriptions::kPreinstalledWebAppAlwaysMigrateCalculatorDescription, - kOsCrOS, - FEATURE_VALUE_TYPE(features::kPreinstalledWebAppAlwaysMigrateCalculator)}, -#endif // BUILDFLAG(IS_CHROMEOS) - - {"enable-secure-payment-confirmation-ux-refresh", - flag_descriptions::kSecurePaymentConfirmationUxRefreshName, - flag_descriptions::kSecurePaymentConfirmationUxRefreshDescription, - kOsAndroid | kOsMac | kOsWin, - FEATURE_VALUE_TYPE(blink::features::kSecurePaymentConfirmationUxRefresh)}, #if BUILDFLAG(IS_ANDROID) {"android-use-correct-display-work-area", @@ -11966,14 +11679,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(switches::kForceHistoryOptInScreen)}, #endif // BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_ANDROID) - {"fre-signin-alternative-secondary-button-text", - flag_descriptions::kFRESignInAlternativeSecondaryButtonTextName, - flag_descriptions::kFRESignInAlternativeSecondaryButtonTextDescription, - kOsAndroid, - FEATURE_VALUE_TYPE(switches::kFRESignInAlternativeSecondaryButtonText)}, -#endif // BUILDFLAG(IS_ANDROID) - #if !BUILDFLAG(IS_ANDROID) {"enable-lens-overlay-edu-action-chip", flag_descriptions::kLensOverlayEduActionChipName, @@ -12120,7 +11825,15 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidAudioDeviceListenerName, flag_descriptions::kAndroidAudioDeviceListenerDescription, kOsAndroid, FEATURE_VALUE_TYPE(features::kAndroidAudioDeviceListener)}, -#endif // BUILDFLAG(IS_ANDROID) + {"android-block-misspelling-suggestion-span-in-composition-mode", + flag_descriptions:: + kAndroidBlockMisspellingSuggestionSpanInCompositionModeName, + flag_descriptions:: + kAndroidBlockMisspellingSuggestionSpanInCompositionModeDescription, + kOsAndroid, + FEATURE_VALUE_TYPE( + features::kAndroidBlockMisspellingSuggestionSpanInCompositionMode)}, +#endif #if !BUILDFLAG(IS_ANDROID) {"browsing-history-actor-integration-M2", @@ -12212,16 +11925,6 @@ const FeatureEntry kFeatureEntries[] = { "LensOverlayTextSelectionContextMenuEntrypoint")}, #endif // !BUILDFLAG(IS_ANDROID), -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ - BUILDFLAG(IS_CHROMEOS) - {"enable-ntp-enterprise-shortcuts", - flag_descriptions::kEnableNtpEnterpriseShortcutsName, - flag_descriptions::kEnableNtpEnterpriseShortcutsDescription, - static_cast(kOsCrOS | kOsLinux | kOsMac | kOsWin), - FEATURE_VALUE_TYPE(ntp_tiles::kNtpEnterpriseShortcuts)}, -#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) ||\ - // BUILDFLAG(IS_CHROMEOS) - #if BUILDFLAG(IS_ANDROID) {"web-serial-wired-devices-android", flag_descriptions::kWebSerialWiredDevicesAndroidName, @@ -12234,8 +11937,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kTabGroupMenuMoreEntryPointsName, flag_descriptions::kTabGroupMenuMoreEntryPointsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kTabGroupMenuMoreEntryPoints)}, -#endif // !BUILDFLAG(IS_ANDROID) + {"tab-group-hover-cards", flag_descriptions::kTabGroupHoverCardsName, + flag_descriptions::kTabGroupHoverCardsDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kTabGroupHoverCards)}, +#endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_MAC) {"show-tab-groups-mac-system-menu", flag_descriptions::kShowTabGroupsMacSystemMenuName, @@ -12394,7 +12100,7 @@ const FeatureEntry kFeatureEntries[] = { {"enable-unicorn-chrome-activity-reporting", flag_descriptions::kUnicornChromeActivityReportingName, flag_descriptions::kUnicornChromeActivityReportingDescription, kOsCrOS, - FEATURE_VALUE_TYPE(features::kUnicornChromeActivityReporting)}, + FEATURE_VALUE_TYPE(ash::features::kUnicornChromeActivityReporting)}, #endif // BUILDFLAG(IS_CHROMEOS) {"autofill-enable-buy-now-pay-later-updated-suggestion-second-line-string", @@ -12511,14 +12217,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kUserValueDefaultBrowserStringsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kUserValueDefaultBrowserStrings)}, -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_CHROMEOS) - {"read-anything-read-aloud-ts-text-segmentation", - flag_descriptions::kReadAnythingReadAloudTsTextSegmentationName, - flag_descriptions::kReadAnythingReadAloudTsTextSegmentationDescription, - kOsDesktop, - FEATURE_VALUE_TYPE(features::kReadAnythingReadAloudTSTextSegmentation)}, -#endif {"mdm-errors-for-dasher-accounts-handling", flag_descriptions::kHandleMdmErrorsForDasherAccountsName, flag_descriptions::kHandleMdmErrorsForDasherAccountsDescription, kOsAll, @@ -12529,9 +12227,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDisableU18FeedbackDesktopName, flag_descriptions::kDisableU18FeedbackDesktopDescription, kOsWin | kOsMac | kOsLinux, - FEATURE_WITH_PARAMS_VALUE_TYPE(switches::kDisableU18FeedbackDesktop, - kDisableU18FeedbackDesktopVariations, - "DisableU18FeedbackDesktop")}, + FEATURE_VALUE_TYPE(switches::kDisableU18FeedbackDesktop)}, #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) @@ -12682,7 +12378,7 @@ const FeatureEntry kFeatureEntries[] = { {"connection-allowlists", flag_descriptions::kConnectionAllowlistsName, flag_descriptions::kConnectionAllowlistsDescription, kOsAll, - FEATURE_VALUE_TYPE(network::features::kConnectionAllowlists)}, + MULTI_VALUE_TYPE(kConnectionAllowlistsChoices)}, #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) @@ -12732,13 +12428,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kInfobarRefreshDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kInfobarRefresh)}, -#if BUILDFLAG(IS_ANDROID) - {"recently-closed-tabs-and-windows", - flag_descriptions::kRecentlyClosedTabsAndWindowsName, - flag_descriptions::kRecentlyClosedTabsAndWindowsDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kRecentlyClosedTabsAndWindows)}, -#endif - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) {"read-anything-immersive-reading-mode", @@ -12850,14 +12539,6 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kAndroidPkAutocorrectUnderline)}, #endif -#if BUILDFLAG(IS_ANDROID) - {"enable-android-spelling-underline-in-composition-mode", - flag_descriptions::kAndroidSpellingUnderlineInCompositionModeName, - flag_descriptions::kAndroidSpellingUnderlineInCompositionModeDescription, - kOsAndroid, - FEATURE_VALUE_TYPE(features::kAndroidSpellingUnderlineInCompositionMode)}, -#endif - #if BUILDFLAG(IS_MAC) {"mac-enable-okta-sso", flag_descriptions::kEnableOktaSSOName, flag_descriptions::kEnableOktaSSODescription, kOsMac, @@ -12910,16 +12591,81 @@ const FeatureEntry kFeatureEntries[] = { kAutofillAiBasedAmountExtractionIgnoreSeenTermsForTestingName, flag_descriptions:: kAutofillAiBasedAmountExtractionIgnoreSeenTermsForTestingDescription, - kOsDesktop, + kOsAll, FEATURE_VALUE_TYPE( autofill::features:: kAutofillAiBasedAmountExtractionIgnoreSeenTermsForTesting)}, -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) - {"updater-ui", flag_descriptions::kUpdaterUIName, - flag_descriptions::kUpdaterUIDescription, kOsLinux | kOsMac | kOsWin, - FEATURE_VALUE_TYPE(features::kUpdaterUI)}, -#endif + {"autofill-ai-always-trigger-server-model", + flag_descriptions::kAutofillAiAlwaysTriggerServerModelName, + flag_descriptions::kAutofillAiAlwaysTriggerServerModelDescription, kOsAll, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillAiAlwaysTriggerServerModel)}, + + {"autofill-ai-available-by-default", + flag_descriptions::kAutofillAiAvailableByDefaultName, + flag_descriptions::kAutofillAiAvailableByDefaultDescription, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAiAvailableByDefault)}, + + {"autofill-ai-create-entity-data-manager", + flag_descriptions::kAutofillAiCreateEntityDataManagerName, + flag_descriptions::kAutofillAiCreateEntityDataManagerDescription, kOsAll, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillAiCreateEntityDataManager)}, + + {"autofill-ai-dedupe-entities", + flag_descriptions::kAutofillAiDedupeEntitiesName, + flag_descriptions::kAutofillAiDedupeEntitiesDescription, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAiDedupeEntities)}, + + {"autofill-ai-no-filling-icons-experiment", + flag_descriptions::kAutofillAiNoFillingIconsExperimentName, + flag_descriptions::kAutofillAiNoFillingIconsExperimentDescription, kOsAll, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillAiNoFillingIconsExperiment)}, + + {"autofill-ai-reauth-required", + flag_descriptions::kAutofillAiReauthRequiredName, + flag_descriptions::kAutofillAiReauthRequiredDescription, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAiReauthRequired)}, + + {"autofill-ai-server-model", flag_descriptions::kAutofillAiServerModelName, + flag_descriptions::kAutofillAiServerModelDescription, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAiServerModel)}, + + {"autofill-ai-valuables-iph", + flag_descriptions::kAutofillAiValuablesIPHName, + flag_descriptions::kAutofillAiValuablesIPHDescription, kOsAll, + FEATURE_VALUE_TYPE(feature_engagement::kIPHAutofillAiValuablesFeature)}, + + {"autofill-ai-wallet-flight-reservation", + flag_descriptions::kAutofillAiWalletFlightReservationName, + flag_descriptions::kAutofillAiWalletFlightReservationDescription, kOsAll, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillAiWalletFlightReservation)}, + + {"autofill-ai-wallet-private-passes", + flag_descriptions::kAutofillAiWalletPrivatePassesName, + flag_descriptions::kAutofillAiWalletPrivatePassesDescription, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAiWalletPrivatePasses)}, + + {"autofill-ai-wallet-private-passes-deep-link", + flag_descriptions::kAutofillAiWalletPrivatePassesDeepLinkName, + flag_descriptions::kAutofillAiWalletPrivatePassesDeepLinkDescription, + kOsAll, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillAiWalletPrivatePassesDeepLink)}, + + {"autofill-ai-wallet-vehicle-registration", + flag_descriptions::kAutofillAiWalletVehicleRegistrationName, + flag_descriptions::kAutofillAiWalletVehicleRegistrationDescription, kOsAll, + FEATURE_VALUE_TYPE( + autofill::features::kAutofillAiWalletVehicleRegistration)}, + + {"autofill-ai-with-data-schema", + flag_descriptions::kAutofillAiWithDataSchemaName, + flag_descriptions::kAutofillAiWithDataSchemaDescription, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAiWithDataSchema)}, #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) @@ -13096,7 +12842,7 @@ const FeatureEntry kFeatureEntries[] = { {"chrome-finds-internals", flag_descriptions::kChromeFindsInternalsName, flag_descriptions::kChromeFindsInternalsDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kChromeFindsInternals)}, + FEATURE_VALUE_TYPE(finds::features::kChromeFindsInternals)}, {"devtools-enable-durable-messages", flag_descriptions::kDevToolsEnableDurableMessagesName, @@ -13114,7 +12860,9 @@ const FeatureEntry kFeatureEntries[] = { {"horizontal-tab-strip-combo-button", flag_descriptions::kHorizontalTabStripComboButtonName, flag_descriptions::kHorizontalTabStripComboButtonDescription, kOsDesktop, - FEATURE_VALUE_TYPE(tabs::kHorizontalTabStripComboButton)}, + FEATURE_WITH_PARAMS_VALUE_TYPE(tabs::kHorizontalTabStripComboButton, + kHorizontalTabStripComboButtonVariations, + "HorizontalTabStripComboButton")}, #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -13192,6 +12940,160 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_WITH_PARAMS_VALUE_TYPE(kMobilePromoOnDesktopWithReminderWave1, kMobilePromoOnDesktopVariationsWave1, "MobilePromoOnDesktopWithReminderWave1")}, + {"autofill-enable-omnibox-autofill", + flag_descriptions::kAutofillEnableOmniboxAutofillName, + flag_descriptions::kAutofillEnableOmniboxAutofillDescription, kOsDesktop, + FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableOmniboxAutofill)}, + +#if BUILDFLAG(IS_ANDROID) + {"android-bottom-bar", flag_descriptions::kAndroidBottomBarName, + flag_descriptions::kAndroidBottomBarDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kAndroidBottomBar, + kAndroidBottomBarVariations, + "AndroidBottomBar")}, +#endif // BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_ANDROID) + {"reset-suggestions-scroll", flag_descriptions::kResetSuggestionsScrollName, + flag_descriptions::kResetSuggestionsScrollDescription, kOsAndroid, + FEATURE_VALUE_TYPE(omnibox::kResetSuggestionsScroll)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch2", flag_descriptions::kApb144Patch2Name, + flag_descriptions::kApb144Patch2Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch2)}, +#endif // BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch3", flag_descriptions::kApb144Patch3Name, + flag_descriptions::kApb144Patch3Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch3)}, +#endif +#if BUILDFLAG(IS_CHROMEOS) + {"show-frozen-update-notification", + flag_descriptions::kShowFrozenUpdateNotificationName, + flag_descriptions::kShowFrozenUpdateNotificationDescription, kOsDesktop, + FEATURE_VALUE_TYPE(ash::features::kShowFrozenUpdateNotification)}, +#endif // BUILDFLAG(IS_CHROMEOS) + +#if BUILDFLAG(IS_ANDROID) + {"enable-three-dot-menu-back-button", + flag_descriptions::kThreeDotMenuBackButtonName, + flag_descriptions::kThreeDotMenuBackButtonDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kThreeDotMenuBackButton)}, +#endif +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch4", flag_descriptions::kApb144Patch4Name, + flag_descriptions::kApb144Patch4Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch4)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"android-entra-sso", flag_descriptions::kAndroidEntraSsoName, + flag_descriptions::kAndroidEntraSsoDescription, kOsAndroid, + FEATURE_VALUE_TYPE(enterprise_auth::kAndroidEntraSSO)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch5", flag_descriptions::kApb144Patch5Name, + flag_descriptions::kApb144Patch5Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch5)}, +#endif + + {"autofill-enable-wallet-branding-v2", + flag_descriptions::kAutofillEnableWalletBrandingV2Name, + flag_descriptions::kAutofillEnableWalletBrandingV2Description, kOsAll, + FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableWalletBrandingV2)}, + {"webcrypto-pqc", flag_descriptions::kWebCryptoPQCName, + flag_descriptions::kWebCryptoPQCDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kWebCryptoPQC)}, + +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch6", flag_descriptions::kApb144Patch6Name, + flag_descriptions::kApb144Patch6Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch6)}, +#endif + + {"defer-os-clipboard-read-call-to-get-type", + flag_descriptions::kDeferOsClipboardReadCallToGetTypeName, + flag_descriptions::kDeferOsClipboardReadCallToGetTypeDescription, kOsAll, + FEATURE_VALUE_TYPE( + blink::features::kReadClipboardDataOnClipboardItemGetType)}, + +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch7", flag_descriptions::kApb144Patch7Name, + flag_descriptions::kApb144Patch7Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch7)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"enable-pix-in-cct", flag_descriptions::kEnablePixInCctName, + flag_descriptions::kEnablePixInCctDescription, kOsAndroid, + FEATURE_VALUE_TYPE(payments::facilitated::kEnablePixInCct)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch8", flag_descriptions::kApb144Patch8Name, + flag_descriptions::kApb144Patch8Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch8)}, +#endif +#if BUILDFLAG(IS_ANDROID) + {"apb144-patch9", flag_descriptions::kApb144Patch9Name, + flag_descriptions::kApb144Patch9Description, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kApb144Patch9)}, +#endif +#if BUILDFLAG(IS_ANDROID) + {"enable-gesture-user-education-back-swipe", + flag_descriptions::kGestureUserEducationBackSwipeName, + flag_descriptions::kGestureUserEducationBackSwipeDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kGestureUserEducationBackSwipe)}, +#endif + +#if BUILDFLAG(IS_ANDROID) + {"omnibox-item-decoration", flag_descriptions::kOmniboxItemDecorationName, + flag_descriptions::kOmniboxItemDecorationDescription, kOsAndroid, + FEATURE_VALUE_TYPE(omnibox::kOmniboxItemDecoration)}, +#endif + {"import-export-flags", flag_descriptions::kImportExportFlagsName, + flag_descriptions::kImportExportFlagsDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kImportExportFlags)}, + + {"use-persistent-cache-for-code-cache", + flag_descriptions::kUsePersistentCacheForCodeCacheName, + flag_descriptions::kUsePersistentCacheForCodeCacheDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kUsePersistentCacheForCodeCache)}, + + {"inline-script-cache", flag_descriptions::kInlineScriptCacheName, + flag_descriptions::kInlineScriptCacheDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kInlineScriptCache)}, + +#if BUILDFLAG(IS_ANDROID) + {"logo-view-refactor", flag_descriptions::kLogoViewRefactorName, + flag_descriptions::kLogoViewRefactorDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kLogoViewRefactor)}, + + {"enforce-incognito-isolation", + flag_descriptions::kEnforceIncognitoIsolationName, + flag_descriptions::kEnforceIncognitoIsolationDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kEnforceIncognitoIsolation)}, +#endif + + {"migrate-enhanced-sb-user-to-enhanced-bundle", + flag_descriptions::kMigrateEnhancedSbUserToEnhancedBundleName, + flag_descriptions::kMigrateEnhancedSbUserToEnhancedBundleDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(safe_browsing::kMigrateEnhancedSbUserToEnhancedBundle)}, + + + {"energy-effect", flag_descriptions::kEnergyEffectName, + flag_descriptions::kEnergyEffectDescription, kOsDesktop, + FEATURE_VALUE_TYPE(ntp_features::kEnergyEffect)}, + + {"energy-effect-animation", flag_descriptions::kEnergyEffectAnimationName, + flag_descriptions::kEnergyEffectAnimationDescription, kOsDesktop, + FEATURE_VALUE_TYPE(ntp_features::kEnergyEffectAnimation)}, + // 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 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 9c3d04b24..b528b947f 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 @@ -42,7 +42,8 @@ #include "chrome/browser/crash_upload_list/crash_upload_list.h" #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" #include "chrome/browser/domain_reliability/service_factory.h" -#include "chrome/browser/downgrade/user_data_downgrade.h" +#include "chrome/browser/downgrade/snapshot_file_collector.h" +#include "chrome/browser/downgrade/user_data_downgrade.h" // nogncheck #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/external_protocol/external_protocol_handler.h" #include "chrome/browser/file_system_access/chrome_file_system_access_permission_context.h" @@ -57,8 +58,8 @@ #include "chrome/browser/media/webrtc/webrtc_event_log_manager.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" -#include "chrome/browser/password_manager/account_password_store_factory.h" -#include "chrome/browser/password_manager/profile_password_store_factory.h" +#include "chrome/browser/password_manager/factories/account_password_store_factory.h" +#include "chrome/browser/password_manager/factories/profile_password_store_factory.h" #include "chrome/browser/payments/browser_binding/browser_bound_key_deleter_service.h" #include "chrome/browser/payments/browser_binding/browser_bound_key_deleter_service_factory.h" #include "chrome/browser/permissions/permission_actions_history_factory.h" @@ -81,7 +82,6 @@ #include "chrome/browser/spellchecker/spellcheck_service.h" #include "chrome/browser/strike_database/strike_database_factory.h" #include "chrome/browser/sync/sync_service_factory.h" -#include "chrome/browser/tpcd/metadata/manager_factory.h" #include "chrome/browser/translate/chrome_translate_client.h" #include "chrome/browser/ui/find_bar/find_bar_state.h" #include "chrome/browser/ui/find_bar/find_bar_state_factory.h" @@ -143,7 +143,6 @@ #include "components/strike_database/strike_database.h" #include "components/sync/service/sync_service.h" #include "components/sync/service/sync_user_settings.h" -#include "components/tpcd/metadata/browser/manager.h" #include "components/web_cache/browser/web_cache_manager.h" #include "components/webrtc_logging/browser/log_cleanup.h" #include "components/webrtc_logging/browser/text_log_list.h" @@ -200,14 +199,11 @@ #endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) +#include "chrome/browser/extensions/activity_log/activity_log.h" #include "extensions/browser/extension_prefs.h" #include "extensions/common/constants.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) -#if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/extensions/activity_log/activity_log.h" -#endif // BUILDFLAG(ENABLE_EXTENSIONS) - #if BUILDFLAG(IS_CHROMEOS) #include "chrome/browser/ash/net/system_proxy_manager.h" #include "chrome/browser/ash/profiles/profile_helper.h" @@ -433,7 +429,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( language_histogram->ClearHistory(delete_begin_, delete_end_); } -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) // The extension activity log contains details of which websites extensions // were active on. It therefore indirectly stores details of websites a // user has visited so best clean from here as well. @@ -651,11 +647,6 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( privacy_sandbox_settings->OnCookiesCleared(); } - if (tpcd::metadata::Manager* manager = - tpcd::metadata::ManagerFactory::GetForProfile(profile_)) { - manager->ResetCohorts(); - } - #if BUILDFLAG(IS_ANDROID) Java_PackageHash_onCookiesDeleted(base::android::AttachCurrentThread(), profile_->GetJavaObject()); @@ -1367,10 +1358,25 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( ////////////////////////////////////////////////////////////////////////////// // Remove data for this profile contained in any snapshots. if (remove_mask && filter_builder->MatchesMostOriginsAndDomains()) { + bool delete_all = + (((remove_mask & chrome_browsing_data_remover::WIPE_PROFILE) == + chrome_browsing_data_remover::WIPE_PROFILE) || + ((remove_mask & chrome_browsing_data_remover::ALL_DATA_TYPES) == + chrome_browsing_data_remover::ALL_DATA_TYPES)) && + delete_begin_.is_null(); + std::optional> files_to_delete; + if (!delete_all) { + files_to_delete.emplace(); + for (const auto& item : downgrade::CollectProfileItems()) { + if (item.data_types & remove_mask) { + files_to_delete->push_back(item.path); + } + } + } base::ThreadPool::PostTaskAndReply( FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock()}, base::BindOnce(&downgrade::RemoveDataForProfile, delete_begin_, - profile_->GetPath(), remove_mask), + profile_->GetPath(), std::move(files_to_delete)), CreateTaskCompletionClosure(TracingDataType::kUserDataSnapshot)); } #endif // BUILDFLAG(ENABLE_DOWNGRADE_PROCESSING) diff --git a/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc b/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc index 3e072fb6c..7e78d7586 100755 --- a/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc +++ b/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc @@ -109,6 +109,7 @@ #if BUILDFLAG(IS_CHROMEOS) #include "chrome/browser/apps/digital_goods/digital_goods_factory_impl.h" #include "chrome/browser/speech/cros_speech_recognition_service_factory.h" +#include "chromeos/ash/experiences/isolated_web_app/isolated_web_app_api_bridge_impl.h" #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \ @@ -517,6 +518,8 @@ void PopulateChromeFrameBinders( #if BUILDFLAG(IS_CHROMEOS) map->Add( &apps::DigitalGoodsFactoryImpl::BindDigitalGoodsFactory); + map->Add( + &ash::IsolatedWebAppApiBridgeImpl::Create); #endif #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) 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 25458578a..f82343379 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,6 +24,7 @@ #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" @@ -72,6 +73,9 @@ #include "chrome/browser/chrome_content_browser_client_parts.h" #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/contextual_tasks/contextual_tasks_ui_service.h" +#include "chrome/browser/contextual_tasks/contextual_tasks_ui_service_factory.h" +#include "chrome/browser/contextual_tasks/contextual_tasks_url_loader_factory_interceptor.h" #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" #include "chrome/browser/data_saver/data_saver.h" #include "chrome/browser/defaults.h" @@ -95,6 +99,8 @@ #include "chrome/browser/lifetime/browser_shutdown.h" #include "chrome/browser/loader/keep_alive_request_tracker.h" #include "chrome/browser/media/audio_service_util.h" +#include "chrome/browser/media/autoplay_policy_status_observer.h" +#include "chrome/browser/media/media_engagement_service.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" @@ -172,10 +178,10 @@ #include "chrome/browser/ui/blocked_content/chrome_popup_navigation_delegate.h" #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" -#include "chrome/browser/ui/chrome_select_file_policy.h" #include "chrome/browser/ui/color/chrome_color_id.h" #include "chrome/browser/ui/login/http_auth_coordinator.h" #include "chrome/browser/ui/prefs/pref_watcher.h" +#include "chrome/browser/ui/select_file_policy/chrome_select_file_policy.h" #include "chrome/browser/ui/startup/google_chrome_scheme_util.h" #include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" #include "chrome/browser/ui/ui_features.h" @@ -227,6 +233,7 @@ #include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/cookie_settings_base.h" #include "components/contextual_tasks/public/features.h" +#include "components/contextual_tasks/public/utils.h" #include "components/custom_handlers/protocol_handler_registry.h" #include "components/custom_handlers/protocol_handler_throttle.h" #include "components/dom_distiller/core/dom_distiller_switches.h" @@ -245,6 +252,7 @@ #include "components/error_page/common/localized_error.h" #include "components/google/core/common/google_switches.h" #include "components/google/core/common/google_util.h" +#include "components/guest_view/browser/guest_view_base.h" #include "components/guest_view/buildflags/buildflags.h" #include "components/heap_profiling/in_process/heap_profiler_controller.h" #include "components/keep_alive_registry/keep_alive_types.h" @@ -298,6 +306,7 @@ #include "components/safe_browsing/core/common/features.h" #include "components/safe_browsing/core/common/hashprefix_realtime/hash_realtime_utils.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" +#include "components/search_engines/search_engines_switches.h" #include "components/search_engines/template_url_service.h" #include "components/security_state/core/security_state.h" #include "components/site_isolation/features.h" @@ -337,6 +346,7 @@ #include "content/public/browser/permission_descriptor_util.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" +#include "content/public/browser/security_principal.h" #include "content/public/browser/service_worker_context.h" #include "content/public/browser/site_isolation_mode.h" #include "content/public/browser/site_isolation_policy.h" @@ -360,6 +370,7 @@ #include "device/vr/buildflags/buildflags.h" #include "extensions/browser/browser_frame_context_data.h" #include "extensions/buildflags/buildflags.h" +#include "extensions/common/extension_features.h" #include "extensions/common/switches.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/google_api_keys.h" @@ -371,6 +382,7 @@ #include "media/mojo/mojom/speech_recognizer.mojom.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/base/data_url.h" +#include "net/base/url_util.h" #include "net/cookies/cookie_setting_override.h" #include "net/cookies/site_for_cookies.h" #include "net/ssl/client_cert_store.h" @@ -405,7 +417,6 @@ #include "third_party/blink/public/mojom/navigation/navigation_params.mojom.h" #include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom.h" #include "third_party/blink/public/public_buildflags.h" -#include "third_party/widevine/cdm/buildflags.h" #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/clipboard/clipboard_metadata.h" #include "ui/base/l10n/l10n_util.h" @@ -466,6 +477,7 @@ #include "chrome/browser/ash/fileapi/file_system_backend.h" #include "chrome/browser/ash/fileapi/mtp_file_system_backend_delegate.h" #include "chrome/browser/ash/login/signin_partition_manager.h" +#include "chrome/browser/ash/login/signin_partition_manager_factory.h" #include "chrome/browser/ash/login/startup_utils.h" #include "chrome/browser/ash/net/network_health/network_health_manager.h" #include "chrome/browser/ash/net/system_proxy_manager.h" @@ -520,9 +532,6 @@ #include "chrome/browser/actor/actor_features.h" #include "chrome/browser/actor/actor_keyed_service.h" #include "chrome/browser/actor/actor_keyed_service_factory.h" -#include "chrome/browser/contextual_tasks/contextual_tasks_ui_service.h" -#include "chrome/browser/contextual_tasks/contextual_tasks_ui_service_factory.h" -#include "chrome/browser/contextual_tasks/contextual_tasks_url_loader_factory_interceptor.h" #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" #include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/digital_credentials/digital_identity_provider_desktop.h" @@ -539,6 +548,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/dialogs/browser_dialogs.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" @@ -548,7 +558,6 @@ #include "chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_error_page.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" -#include "chrome/browser/web_applications/isolated_web_apps/iwa_permissions_policy_cache.h" #include "chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.h" #include "chrome/browser/web_applications/locks/app_lock.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" @@ -567,7 +576,6 @@ #include "components/password_manager/content/common/web_ui_constants.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/soda/soda_util.h" -#include "components/webapps/isolated_web_apps/types/iwa_origin.h" #include "components/webapps/isolated_web_apps/url_loading/url_loader_factory.h" #include "services/network/public/mojom/permissions_policy/permissions_policy_feature.mojom.h" #include "third_party/blink/public/mojom/installedapp/related_application.mojom.h" @@ -628,8 +636,10 @@ #include "extensions/common/extension.h" #include "extensions/common/extension_set.h" #include "extensions/common/manifest_handlers/background_info.h" +#include "extensions/common/mojom/context_type.mojom.h" #include "extensions/common/permissions/permissions_data.h" #include "extensions/common/switches.h" +#include "extensions/common/user_script.h" #if BUILDFLAG(ENABLE_GUEST_VIEW) #include "extensions/browser/guest_view/web_view/web_view_guest.h" @@ -637,13 +647,14 @@ #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #endif -#else // !BUILDFLAG(ENABLE_EXTENSIONS_CORE) +#elif BUILDFLAG(ENABLE_GUEST_VIEW) +#include "components/guest_view/browser/guest_view_base.h" +#include "components/guest_view/browser/slim_web_view/slim_web_view_url_loader_factory_interceptor.h" // nogncheck + #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) @@ -653,7 +664,6 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/web_applications/web_app_utils.h" #include "extensions/browser/api/web_request/web_request_proxying_webtransport.h" -#include "extensions/common/user_script.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) #if BUILDFLAG(ENABLE_PLUGINS) @@ -893,11 +903,17 @@ bool IsAutoplayAllowedByPolicy(content::WebContents* contents, blink::mojom::AutoplayPolicy DetermineWebContentsAutoplayPolicy( content::WebContents* web_contents, blink::mojom::AutoplayPolicy current_policy) { + using PolicyStatus = AutoplayPolicyStatusObserver::PolicyStatus; + Profile* profile = Profile::FromBrowserContext(web_contents->GetBrowserContext()); PrefService* prefs = profile->GetPrefs(); + AutoplayPolicyStatusObserver* observer = + AutoplayPolicyStatusObserver::GetOrCreateForWebContents(web_contents); + if (IsAutoplayAllowedByPolicy(web_contents, prefs)) { + observer->SetPolicyStatus(PolicyStatus::kAllowedByEnterprisePolicy); return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; } @@ -906,9 +922,13 @@ blink::mojom::AutoplayPolicy DetermineWebContentsAutoplayPolicy( 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 (UnifiedAutoplayConfig::ShouldBlockAutoplay(profile)) { + observer->SetPolicyStatus(PolicyStatus::kBlockedByUserPreference); + return blink::mojom::AutoplayPolicy::kDocumentUserActivationRequired; + } else { + observer->SetPolicyStatus(PolicyStatus::kAllowedByUserPreference); + return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; + } } // If the domain policy allows autoplay and has delegated that to an iframe, @@ -916,15 +936,19 @@ blink::mojom::AutoplayPolicy DetermineWebContentsAutoplayPolicy( if (web_contents->GetPrimaryMainFrame()->IsFeatureEnabled( network::mojom::PermissionsPolicyFeature::kAutoplay) && IsAutoplayAllowedByPolicy(web_contents->GetOuterWebContents(), prefs)) { + observer->SetPolicyStatus( + PolicyStatus::kAllowedByDelegatedEnterprisePolicy); 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); + // page. If there is no content_settings, we cannot provide autoplay (e.g. + // System profile). + const HostContentSettingsMap* const content_settings = + HostContentSettingsMapFactory::GetForProfile(profile); + if (content_settings && + base::FeatureList::IsEnabled(media::kAutoplayBypassForMicCamera)) { const GURL& url = web_contents->GetLastCommittedURL(); if (content_settings->GetContentSetting( @@ -933,6 +957,7 @@ blink::mojom::AutoplayPolicy DetermineWebContentsAutoplayPolicy( content_settings->GetContentSetting( url, url, ContentSettingsType::MEDIASTREAM_CAMERA) == CONTENT_SETTING_ALLOW) { + observer->SetPolicyStatus(PolicyStatus::kAllowedByMicCameraPermission); return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; } } @@ -942,12 +967,29 @@ blink::mojom::AutoplayPolicy DetermineWebContentsAutoplayPolicy( if (base::FeatureList::IsEnabled(features::kAllowUnmutedAutoplayForTWA)) { if (auto* delegate = TabAndroid::FromWebContents(web_contents)) { if (delegate->IsTrustedWebActivity()) { + observer->SetPolicyStatus(PolicyStatus::kAllowedByTWA); return blink::mojom::AutoplayPolicy::kNoUserGestureRequired; } } } #endif // BUILDFLAG(IS_ANDROID) + if (MediaEngagementService::IsEnabled()) { + MediaEngagementService* mei_service = MediaEngagementService::Get(profile); + if (mei_service && mei_service->HasHighEngagement(url::Origin::Create( + web_contents->GetLastCommittedURL()))) { + if (base::FeatureList::IsEnabled( + media::kMediaEngagementBypassAutoplayPolicies)) { + observer->SetPolicyStatus(PolicyStatus::kAllowedByMediaEngagement); + } else { + observer->SetPolicyStatus( + PolicyStatus::kWouldBeAllowedByMediaEngagement); + } + return current_policy; + } + } + + observer->SetPolicyStatus(PolicyStatus::kDefaultPolicyApplied); return current_policy; } @@ -1452,7 +1494,7 @@ ChromeContentBrowserClient::ChromeContentBrowserClient() { #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) extra_parts_.push_back( std::make_unique()); -#elif BUILDFLAG(IS_ANDROID) +#elif BUILDFLAG(ENABLE_GUEST_VIEW) && BUILDFLAG(IS_ANDROID) extra_parts_.push_back( std::make_unique()); #endif @@ -1586,6 +1628,8 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterBooleanPref(prefs::kWebAudioOutputBufferingEnabled, false); registry->RegisterBooleanPref(prefs::kSharedWorkerBlobURLFixEnabled, true); + registry->RegisterBooleanPref(prefs::kSharedWorkerExtendedLifetimeEnabled, + true); registry->RegisterBooleanPref( prefs::kServiceWorkerToControlSrcdocIframeEnabled, true); registry->RegisterBooleanPref(prefs::kReduceAcceptLanguageEnabled, true); @@ -2218,8 +2262,12 @@ bool ChromeContentBrowserClient::HasWebRequestAPIProxy( browser_context); if (!web_request_api) { return false; + } else { + // TODO(crbug.com/362539771): Check if the request is from guest view and + // use HasWebRequestOrDeclarativeWebRequestExtension() instead of using + // MayHaveProxies(). + return web_request_api->MayHaveProxies(); } - return web_request_api && web_request_api->MayHaveProxies(); #else return false; #endif @@ -2369,31 +2417,9 @@ ChromeContentBrowserClient::GetBaselinePermissionsPolicyForIsolatedApp( content::BrowserContext* browser_context, 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 {}; - } - - 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) { - // 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) { - return blink::mojom::IsolatedAppPermissionPolicyEntry::New( - entry.feature, entry.allowed_origins); - }); + return ChromeContentBrowserClientIsolatedWebAppsPart:: + GetBaselinePermissionsPolicyForIsolatedWebApp(browser_context, + app_origin); #else return {}; #endif @@ -3312,6 +3338,14 @@ bool ChromeContentBrowserClient::AllowSharedWorkerBlobURLFix( return profile->GetPrefs()->GetBoolean(prefs::kSharedWorkerBlobURLFixEnabled); } +bool ChromeContentBrowserClient::AllowSharedWorkerExtendedLifetime( + content::BrowserContext* browser_context) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + Profile* profile = Profile::FromBrowserContext(browser_context); + return profile->GetPrefs()->GetBoolean( + prefs::kSharedWorkerExtendedLifetimeEnabled); +} + void ChromeContentBrowserClient::RequestFilesAccess( const std::vector& files, const GURL& destination_url, @@ -3451,40 +3485,6 @@ bool ChromeContentBrowserClient::AllowWorkerWebLocks( storage_key); } -ChromeContentBrowserClient::AllowWebBluetoothResult -ChromeContentBrowserClient::AllowWebBluetooth( - content::BrowserContext* browser_context, - const url::Origin& requesting_origin, - const url::Origin& embedding_origin) { - // TODO(crbug.com/40462828): Don't disable if - // base::CommandLine::ForCurrentProcess()-> - // HasSwitch(switches::kEnableWebBluetooth) is true. - if (base::GetFieldTrialParamValue( - permissions::ContentSettingPermissionContextBase:: - kPermissionsKillSwitchFieldStudy, - "Bluetooth") == permissions::ContentSettingPermissionContextBase:: - kPermissionsKillSwitchBlockedValue) { - // The kill switch is enabled for this permission. Block requests. - return AllowWebBluetoothResult::BLOCK_GLOBALLY_DISABLED; - } - - const HostContentSettingsMap* const content_settings = - HostContentSettingsMapFactory::GetForProfile( - Profile::FromBrowserContext(browser_context)); - - if (content_settings->GetContentSetting( - requesting_origin.GetURL(), embedding_origin.GetURL(), - ContentSettingsType::BLUETOOTH_GUARD) == CONTENT_SETTING_BLOCK) { - return AllowWebBluetoothResult::BLOCK_POLICY; - } - return AllowWebBluetoothResult::ALLOW; -} - -std::string ChromeContentBrowserClient::GetWebBluetoothBlocklist() { - return base::GetFieldTrialParamValue("WebBluetoothBlocklist", - "blocklist_additions"); -} - bool ChromeContentBrowserClient::IsInterestGroupAPIAllowed( content::BrowserContext* browser_context, content::RenderFrameHost* render_frame_host, @@ -3698,25 +3698,6 @@ bool ChromeContentBrowserClient::IsSharedStorageSelectURLAllowed( out_block_is_site_setting_specific); } -bool ChromeContentBrowserClient::IsFencedStorageReadAllowed( - content::BrowserContext* browser_context, - content::RenderFrameHost* rfh, - const url::Origin& top_frame_origin, - const url::Origin& accessing_origin) { - Profile* profile = Profile::FromBrowserContext(browser_context); - auto* privacy_sandbox_settings = - PrivacySandboxSettingsFactory::GetForProfile(profile); - DCHECK(privacy_sandbox_settings); - bool allowed = privacy_sandbox_settings->IsFencedStorageReadAllowed( - top_frame_origin, accessing_origin, rfh); - if (rfh) { - content_settings::PageSpecificContentSettings::BrowsingDataAccessed( - rfh, blink::StorageKey::CreateFirstParty(accessing_origin), - BrowsingDataModel::StorageType::kSharedStorage, !allowed); - } - return allowed; -} - bool ChromeContentBrowserClient::IsPrivateAggregationAllowed( content::BrowserContext* browser_context, const url::Origin& top_frame_origin, @@ -3803,24 +3784,6 @@ bool ChromeContentBrowserClient::IsServiceWorkerSyntheticResponseAllowed( return true; } -void ChromeContentBrowserClient::GrantCookieAccessDueToHeuristic( - content::BrowserContext* browser_context, - const net::SchemefulSite& top_frame_site, - const net::SchemefulSite& accessing_site, - base::TimeDelta ttl, - bool ignore_schemes) { - scoped_refptr cookie_settings = - CookieSettingsFactory::GetForProfile( - Profile::FromBrowserContext(browser_context)); - if (!cookie_settings) { - return; - } - - cookie_settings->SetTemporaryCookieGrantForHeuristic( - accessing_site.GetURL(), top_frame_site.GetURL(), ttl, - /*use_schemeless_patterns=*/ignore_schemes); -} - bool ChromeContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed( content::BrowserContext* browser_context, content::WebContents* web_contents) { @@ -4115,26 +4078,28 @@ blink::mojom::PreferredColorScheme ToBlinkPreferredColorScheme( std::tuple GetPreferredColorScheme(const WebPreferences& web_prefs, - const GURL& url, + const content::SecurityPrincipal& security_principal, WebContents* web_contents) { + blink::mojom::PreferredColorScheme preferred_color_scheme; + blink::mojom::PreferredColorScheme preferred_root_scrollbar_color_scheme; #if BUILDFLAG(IS_ANDROID) + preferred_color_scheme = web_prefs.preferred_color_scheme; + preferred_root_scrollbar_color_scheme = + web_prefs.preferred_root_scrollbar_color_scheme; + if (TabAndroid::FromWebContents(web_contents)) { if (auto* delegate = static_cast( web_contents->GetDelegate())) { - const auto preferred_color_scheme = - delegate->IsNightModeEnabled() - ? blink::mojom::PreferredColorScheme::kDark - : blink::mojom::PreferredColorScheme::kLight; - return {preferred_color_scheme, preferred_color_scheme}; + preferred_color_scheme = delegate->IsNightModeEnabled() + ? blink::mojom::PreferredColorScheme::kDark + : blink::mojom::PreferredColorScheme::kLight; + preferred_root_scrollbar_color_scheme = preferred_color_scheme; } } - return {web_prefs.preferred_color_scheme, - web_prefs.preferred_root_scrollbar_color_scheme}; -#else - blink::mojom::PreferredColorScheme preferred_color_scheme; +#else // !BUILDFLAG(IS_ANDROID) if (Profile::FromBrowserContext(web_contents->GetBrowserContext()) ->IsIncognitoProfile() && - !content::HasWebUIScheme(url)) { + !security_principal.IsWebUI()) { // Incognito contents follow the device color mode. preferred_color_scheme = ToBlinkPreferredColorScheme( ui::NativeTheme::GetInstanceForWeb()->preferred_color_scheme()); @@ -4146,27 +4111,48 @@ GetPreferredColorScheme(const WebPreferences& web_prefs, ? blink::mojom::PreferredColorScheme::kLight : blink::mojom::PreferredColorScheme::kDark; } + // Update the preferred root scrollbar color based on the lightness level of + // the toolbar's color. + preferred_root_scrollbar_color_scheme = + color_utils::IsDark( + web_contents->GetColorProvider().GetColor(kColorToolbar)) + ? blink::mojom::PreferredColorScheme::kDark + : blink::mojom::PreferredColorScheme::kLight; +#endif +#if BUILDFLAG(ENABLE_GUEST_VIEW) // Guest contents uses the same color scheme as the owner contents. content::WebContents* owner_contents = guest_view::GuestViewBase::GetTopLevelWebContents(web_contents); // If the top-level WebContents is the same as the guest, then // `web_contents` is *not* a guest. if (owner_contents != web_contents) { - preferred_color_scheme = - owner_contents->GetOrCreateWebPreferences().preferred_color_scheme; + const auto& preferences = owner_contents->GetOrCreateWebPreferences(); + preferred_color_scheme = preferences.preferred_color_scheme; + preferred_root_scrollbar_color_scheme = + preferences.preferred_root_scrollbar_color_scheme; + } +#endif // BUILDFLAG(ENABLE_GUEST_VIEW) + + // To prevent a UI flicker when the CS param is enforcing dark mode, force set + // the blink renderer so the initial load respects the prefers-color-scheme + // media query. + // TODO(crbug.com/506209287): Investigate if there is a feature specific place + // to add this logic to prevent flick on initial render. + if (web_contents) { + GURL url = web_contents->GetVisibleURL(); + if (url.SchemeIs(content::kChromeUIScheme) && + url.host() == chrome::kChromeUIContextualTasksHost) { + std::optional is_dark_mode = + contextual_tasks::GetDarkModeFromUrl(url); + if (is_dark_mode.has_value()) { + preferred_color_scheme = + is_dark_mode.value() ? blink::mojom::PreferredColorScheme::kDark + : blink::mojom::PreferredColorScheme::kLight; + } + } } - - // Update the preferred root scrollbar color based on the lightness level of - // the toolbar's color. - const auto preferred_root_scrollbar_color_scheme = - color_utils::IsDark( - web_contents->GetColorProvider().GetColor(kColorToolbar)) - ? blink::mojom::PreferredColorScheme::kDark - : blink::mojom::PreferredColorScheme::kLight; - return {preferred_color_scheme, preferred_root_scrollbar_color_scheme}; -#endif } std::optional GetRootScrollbarThemeColor(WebContents* web_contents) { @@ -4277,7 +4263,7 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate( content::StoragePartition* storage_partition = profile->GetStoragePartition(web_contents->GetSiteInstance()); auto* signin_partition_manager = - ash::login::SigninPartitionManager::Factory::GetForBrowserContext( + ash::login::SigninPartitionManagerFactory::GetForBrowserContext( profile); if (!signin_partition_manager->IsCurrentSigninStoragePartition( storage_partition)) { @@ -4400,6 +4386,59 @@ ChromeContentBrowserClient::GetFeatureObserverClient() { ->GetFeatureObserverClient(); } +// These values are persisted to logs and used for histograms. +enum class PopupBypassType { + kContentScript = 0, + kExtensionProcess = 1, + kPrivilegedWebPage = 2, + kMaxValue = kPrivilegedWebPage, +}; + +bool ChromeContentBrowserClient::IsPopupBypassAllowed( + content::RenderFrameHost* render_frame_host) { +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) + content::RenderProcessHost* process = render_frame_host->GetProcess(); + content::BrowserContext* browser_context = process->GetBrowserContext(); + extensions::ProcessMap* process_map = + extensions::ProcessMap::Get(browser_context); + if (!process_map) { + return false; + } + + // Allow if it is an authorized extension process. + const extensions::Extension* extension = + process_map->GetEnabledExtensionByProcessID(process->GetID().value()); + if (process_map->CanProcessHostContextType( + extension, *process, + extensions::mojom::ContextType::kPrivilegedExtension)) { + base::UmaHistogramEnumeration("Security.PopupBypassAllowedType", + PopupBypassType::kExtensionProcess); + return true; + } + + // Allow if it is a privileged web page (e.g., hosted app) in an outermost + // main frame. + if (!render_frame_host->GetParentOrOuterDocument() && + process_map->CanProcessHostContextType( + extension, *process, + extensions::mojom::ContextType::kPrivilegedWebPage)) { + base::UmaHistogramEnumeration("Security.PopupBypassAllowedType", + PopupBypassType::kPrivilegedWebPage); + return true; + } + + // Allow if an extension ran a content script in this process. + if (!extensions::ScriptInjectionTracker:: + GetExtensionsThatRanContentScriptsInProcess(*process) + .empty()) { + base::UmaHistogramEnumeration("Security.PopupBypassAllowedType", + PopupBypassType::kContentScript); + return true; + } +#endif + return false; +} + bool ChromeContentBrowserClient::CanCreateWindow( RenderFrameHost* opener, const GURL& opener_url, @@ -4424,7 +4463,6 @@ bool ChromeContentBrowserClient::CanCreateWindow( DCHECK(profile); *no_javascript_access = false; -#if !BUILDFLAG(IS_ANDROID) // This block gives the Contextual Tasks feature the opportunity to intercept // tab creation in the event it doesn't go directly through the feature's // navigation throttle. When a new tab/window is created, it is done before @@ -4448,7 +4486,6 @@ bool ChromeContentBrowserClient::CanCreateWindow( return false; } } -#endif // !BUILDFLAG(IS_ANDROID) // If the opener is trying to create a background window but doesn't have // the appropriate permission, fail the attempt. @@ -4755,11 +4792,14 @@ void ChromeContentBrowserClient::OverrideWebPreferences( // if the app navigates off scope. This is not a problem because we still // want to use the scope of the app associated with the window, not the // WebContents. - Browser* browser = chrome::FindBrowserWithTab(web_contents); - if (browser && browser->app_controller()) { + BrowserWindowInterface* browser = + chrome::FindBrowserWithTab(web_contents); + web_app::AppBrowserController* app_controller = + browser ? web_app::AppBrowserController::From(browser) : nullptr; + if (app_controller) { web_app::WebAppProvider* const web_app_provider = web_app::WebAppProvider::GetForLocalAppsUnchecked(profile); - const webapps::AppId& app_id = browser->app_controller()->app_id(); + const webapps::AppId& app_id = app_controller->app_id(); const web_app::WebAppRegistrar& registrar = web_app_provider->registrar_unsafe(); if (registrar.AppMatches(app_id, @@ -4769,7 +4809,7 @@ void ChromeContentBrowserClient::OverrideWebPreferences( // IWA with window management permission can close windows and // focus windows without user gesture. - if (browser->app_controller()->IsIsolatedWebApp() && + if (app_controller->IsIsolatedWebApp() && profile->GetPermissionController() ->GetPermissionStatusForCurrentDocument( content::PermissionDescriptorUtil:: @@ -4778,10 +4818,10 @@ void ChromeContentBrowserClient::OverrideWebPreferences( web_contents->GetPrimaryMainFrame()) == blink::mojom::PermissionStatus::GRANTED) { web_prefs->allow_scripts_to_close_windows = true; - web_prefs->allow_window_focus_without_user_gesture = true; + web_prefs->allow_unrestricted_window_focus = true; } #if BUILDFLAG(IS_CHROMEOS) - auto* system_app = browser->app_controller()->system_app(); + auto* system_app = app_controller->system_app(); if (system_app) { web_prefs->allow_scripts_to_close_windows = system_app->ShouldAllowScriptsToCloseWindows(); @@ -4844,8 +4884,8 @@ void ChromeContentBrowserClient::OverrideWebPreferences( std::tie(web_prefs->preferred_color_scheme, web_prefs->preferred_root_scrollbar_color_scheme) = - GetPreferredColorScheme(*web_prefs, main_frame_site.GetSiteURL(), - web_contents); + GetPreferredColorScheme( + *web_prefs, main_frame_site.GetSecurityPrincipal(), web_contents); web_prefs->root_scrollbar_theme_color = GetRootScrollbarThemeColor(web_contents); @@ -4953,8 +4993,8 @@ bool ChromeContentBrowserClient::OverrideWebPreferencesAfterNavigation( web_prefs->preferred_root_scrollbar_color_scheme; std::tie(web_prefs->preferred_color_scheme, web_prefs->preferred_root_scrollbar_color_scheme) = - GetPreferredColorScheme(*web_prefs, main_frame_site.GetSiteURL(), - web_contents); + GetPreferredColorScheme( + *web_prefs, main_frame_site.GetSecurityPrincipal(), web_contents); prefs_changed |= web_prefs->preferred_color_scheme != old_preferred_color_scheme || web_prefs->preferred_root_scrollbar_color_scheme != @@ -5004,7 +5044,7 @@ bool ChromeContentBrowserClient:: GetForcedColorsForWebContent(&web_contents) != std::tie(prefs.in_forced_colors, prefs.is_forced_colors_disabled) || - GetPreferredColorScheme(prefs, main_frame_site.GetSiteURL(), + GetPreferredColorScheme(prefs, main_frame_site.GetSecurityPrincipal(), &web_contents) != std::tie(prefs.preferred_color_scheme, prefs.preferred_root_scrollbar_color_scheme) || @@ -6308,7 +6348,8 @@ void AddChromeSchemeFactories( content::WebContents* web_contents, const extensions::Extension* extension, ChromeContentBrowserClient::NonNetworkURLLoaderFactoryMap* factories) { -#if BUILDFLAG(ENABLE_EXTENSIONS) + // Android does not support instant. +#if !BUILDFLAG(IS_ANDROID) Profile* profile = Profile::FromBrowserContext(web_contents->GetBrowserContext()); InstantService* instant_service = @@ -6326,7 +6367,7 @@ void AddChromeSchemeFactories( frame_host, chrome::kChromeSearchScheme, /*allowed_hosts=*/base::flat_set())); } -#endif // BUILDFLAG(ENABLE_EXTENSIONS) +#endif // !BUILDFLAG(IS_ANDROID) extensions::ExtensionWebContentsObserver* web_observer = extensions::ExtensionWebContentsObserver::GetForWebContents(web_contents); @@ -6521,16 +6562,16 @@ void ChromeContentBrowserClient::WillCreateURLLoaderFactory( } #endif -#if !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_GUEST_VIEW) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (base::FeatureList::IsEnabled(contextual_tasks::kContextualTasks)) { contextual_tasks::MaybeInterceptURLLoaderFactory(frame, factory_builder); } -#endif // !BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(ENABLE_GUEST_VIEW) && !BUILDFLAG(ENABLE_EXTENSIONS_CORE) +#else // !BUILDFLAG (ENABLE_EXTENSIONS_CORE) guest_view::MaybeInterceptURLLoaderFactoryForSlimWebView( frame, factory_builder, header_client); -#endif +#endif // BUILDFLAG (ENABLE_EXTENSIONS_CORE) +#endif // BUILDFLAG(ENABLE_GUEST_VIEW) // WARNING: This must be the last interceptor in the chain as the proxying // URLLoaderFactory installed by this needs to be the one actually sending @@ -6606,10 +6647,9 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( // BrowserContextKeyedAPI factories for e.g. WebRequest. if (!web_request_api) { return false; + } else { + return web_request_api->MayHaveProxiesForFrame(frame); } - - return (web_request_api->MayHaveProxies() || - web_request_api->IsAvailableToWebViewEmbedderFrame(frame)); #else return false; #endif @@ -6779,7 +6819,7 @@ bool ChromeContentBrowserClient::ShouldForceDownloadResource( content::BrowserContext* browser_context, const GURL& url, const std::string& mime_type) { -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) // Special-case user scripts to get downloaded instead of viewed. if (extensions::UserScript::IsURLUserScript(url, mime_type)) { return true; @@ -6803,7 +6843,7 @@ bool ChromeContentBrowserClient::ShouldForceDownloadResource( } } #endif // BUILDFLAG(IS_CHROMEOS) -#endif // BUILDFLAG(ENABLE_EXTENSIONS) +#endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) return false; } @@ -7153,6 +7193,16 @@ bool ChromeContentBrowserClient::HandleWebUI( replacements.SetPathStr(chrome::kChromeUIContactInfoPath); *url = url->ReplaceComponents(replacements); } + + // Rewrite chrome://settings/searchEngines to chrome://settings/search. + if (url->SchemeIs(content::kChromeUIScheme) && + url->GetHost() == chrome::kChromeUISettingsHost && + (url->GetPath() == chrome::kChromeUISearchEngineSettingsPath) && + base::FeatureList::IsEnabled(switches::kSearchSettingsUpdate)) { + GURL::Replacements replacements; + replacements.SetPathStr(chrome::kChromeUISearchSettingsPath); + *url = url->ReplaceComponents(replacements); + } #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) @@ -7619,36 +7669,6 @@ int ChromeContentBrowserClient::NumVersionsInTopicsEpochs( main_frame->GetLastCommittedOrigin()); } -bool ChromeContentBrowserClient::IsBluetoothScanningBlocked( - content::BrowserContext* browser_context, - const url::Origin& requesting_origin, - const url::Origin& embedding_origin) { - const HostContentSettingsMap* const content_settings = - HostContentSettingsMapFactory::GetForProfile( - Profile::FromBrowserContext(browser_context)); - - if (content_settings->GetContentSetting( - requesting_origin.GetURL(), embedding_origin.GetURL(), - ContentSettingsType::BLUETOOTH_SCANNING) == CONTENT_SETTING_BLOCK) { - return true; - } - - return false; -} - -void ChromeContentBrowserClient::BlockBluetoothScanning( - content::BrowserContext* browser_context, - const url::Origin& requesting_origin, - const url::Origin& embedding_origin) { - HostContentSettingsMap* const content_settings = - HostContentSettingsMapFactory::GetForProfile( - Profile::FromBrowserContext(browser_context)); - - content_settings->SetContentSettingDefaultScope( - requesting_origin.GetURL(), embedding_origin.GetURL(), - ContentSettingsType::BLUETOOTH_SCANNING, CONTENT_SETTING_BLOCK); -} - void ChromeContentBrowserClient::GetMediaDeviceIDSalt( content::RenderFrameHost* rfh, const net::SiteForCookies& site_for_cookies, @@ -7956,6 +7976,13 @@ bool ChromeContentBrowserClient::AreV8OptimizationsEnabledForSite( site_url, site_url, ContentSettingsType::JAVASCRIPT_OPTIMIZER, &content_setting_info); + content_settings::ProviderType default_content_setting_provider; + map->GetDefaultContentSetting(ContentSettingsType::JAVASCRIPT_OPTIMIZER, + &default_content_setting_provider); + auto default_content_setting_source = + content_settings::GetSettingSourceFromProviderType( + default_content_setting_provider); + // `default_javascript_optimizer_setting` is determined based on the user's // selection in chrome://settings, whether the site-familiarity-feature is // enabled, and enterprise policy. `default_javascript_optimizer_setting` @@ -7968,7 +7995,8 @@ bool ChromeContentBrowserClient::AreV8OptimizationsEnabledForSite( // Invariant guaranteed by ComputeDefaultJavascriptOptimizerSetting(). CHECK(default_javascript_optimizer_setting != JavascriptOptimizerSetting::kBlockedForUnfamiliarSites || - content_setting_info.source == content_settings::SettingSource::kUser); + default_content_setting_source == + content_settings::SettingSource::kUser); if (default_javascript_optimizer_setting != JavascriptOptimizerSetting::kBlockedForUnfamiliarSites) { @@ -8269,8 +8297,8 @@ bool ChromeContentBrowserClient::ShouldPreconnectNavigation( const auto* web_request_api = extensions::BrowserContextKeyedAPIFactory::Get( browser_context); - if (!web_request_api || web_request_api->MayHaveProxies() || - web_request_api->IsAvailableToWebViewEmbedderFrame(render_frame_host)) { + if (!web_request_api || + web_request_api->MayHaveProxiesForFrame(render_frame_host)) { return false; } #endif @@ -8977,7 +9005,9 @@ ChromeContentBrowserClient::GetClipboardTypesIfPolicyApplied( bool ChromeContentBrowserClient::UsePrefetchPrerenderIntegration() { return base::FeatureList::IsEnabled(features::kBookmarkTriggerForPrefetch) || - base::FeatureList::IsEnabled(features::kNewTabPageTriggerForPrefetch); + base::FeatureList::IsEnabled( + features::kNewTabPageTriggerForPrefetch) || + base::FeatureList::IsEnabled(features::kDsePreload2); } #if !BUILDFLAG(IS_ANDROID) @@ -9125,3 +9155,21 @@ void ChromeContentBrowserClient::UpdateCorsExemptHeaderForPrefetch( } #endif } + +bool ChromeContentBrowserClient::IsAttributionInternalsWebUIEnabled() { + return !base::FeatureList::IsEnabled( + privacy_sandbox::kPrivacySandboxAdPrivacyUxDeprecation); +} + +bool ChromeContentBrowserClient::IsFullscreenAllowedForUnfocusedWebContents( + content::WebContents* unfocused_web_contents) { + guest_view::GuestViewBase* guest = + guest_view::GuestViewBase::FromWebContents(unfocused_web_contents); + if (!guest) { + return false; + } + if (guest->IsOwnedByControlledFrameEmbedder()) { + return guest->embedder_web_contents()->ContainsOrIsFocusedWebContents(); + } + return false; +} 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 238e0cae8..d1615d67d 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 @@ -11,6 +11,7 @@ #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/contextual_tasks/contextual_tasks_navigation_throttle.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" @@ -24,6 +25,7 @@ #include "chrome/browser/policy/chrome_policy_blocklist_service_factory.h" #include "chrome/browser/policy/policy_util.h" #include "chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h" +#include "chrome/browser/preloading/prerender/dse_prewarm_navigation_throttle.h" #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ssl/chrome_security_blocking_page_factory.h" @@ -90,7 +92,6 @@ #else // BUILDFLAG(IS_ANDROID) #include "chrome/browser/apps/link_capturing/link_capturing_navigation_throttle.h" #include "chrome/browser/apps/link_capturing/web_app_link_capturing_delegate.h" -#include "chrome/browser/contextual_tasks/contextual_tasks_navigation_throttle.h" #include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/page_info/web_view_side_panel_throttle.h" #include "chrome/browser/preloading/preview/preview_navigation_throttle.h" @@ -165,7 +166,7 @@ #include "chrome/browser/offline_pages/offline_page_navigation_throttle.h" #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) #include "chrome/browser/enterprise/platform_auth/platform_auth_navigation_throttle.h" #endif @@ -187,7 +188,7 @@ namespace { // parameters. void HandleSSLErrorWrapper( content::WebContents* web_contents, - int cert_error, + net::Error cert_error, const net::SSLInfo& ssl_info, const GURL& request_url, SSLErrorHandler::BlockingPageReadyCallback blocking_page_ready_callback) { @@ -287,6 +288,8 @@ void CreateAndAddChromeThrottlesForNavigation( page_load_metrics::MetricsNavigationThrottle::CreateAndAdd(registry); } + DSEPrewarmNavigationThrottle::MaybeCreateAndAdd(registry); + #if BUILDFLAG(IS_ANDROID) // TODO(davidben): This is insufficient to integrate with prerender properly. // https://crbug.com/40364296 @@ -463,7 +466,6 @@ void CreateAndAddChromeThrottlesForNavigation( // before ContextualTasksNavigationThrottle intercepts them. AimEligibilityRefreshNavigationThrottle::MaybeCreateAndAdd(registry); -#if !BUILDFLAG(IS_ANDROID) if (base::FeatureList::IsEnabled(contextual_tasks::kContextualTasks) || base::FeatureList::IsEnabled( contextual_tasks::kContextualTasksUrlRedirectToAimUrl)) { @@ -471,6 +473,7 @@ void CreateAndAddChromeThrottlesForNavigation( registry); } +#if !BUILDFLAG(IS_ANDROID) DevToolsWindow::MaybeCreateAndAddNavigationThrottle(registry); if (base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) { @@ -571,13 +574,13 @@ void CreateAndAddChromeThrottlesForNavigation( registry); } -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) // Don't perform platform authentication in incognito and guest profiles. if (profile && !profile->IsOffTheRecord()) { enterprise_auth::PlatformAuthNavigationThrottle::MaybeCreateAndAdd( registry); } -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_CHROMEOS) // TODO(b:296844164) Handle captive portal signin properly. 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 7292e452b..d58521a62 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 @@ -157,6 +157,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( // LINT.IfChange(FeaturesExposedToJava) // keep-sorted start group_prefixes=["public static final String"] + public static final String AAPM_BLOCKS_WEB_GPU = "AAPMBlocksWebGPU"; public static final String ABORT_NAVIGATIONS_FROM_TAB_CLOSURES = "AbortNavigationsFromTabClosures"; public static final String ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS = @@ -176,14 +177,14 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String ANDROID_APP_INTEGRATION_MODULE = "AndroidAppIntegrationModule"; public static final String ANDROID_APP_INTEGRATION_MULTI_DATA_SOURCE = "AndroidAppIntegrationMultiDataSource"; + public static final String ANDROID_APP_RATING_PROMPT = "AndroidAppRatingPrompt"; public static final String ANDROID_AUTOFILL_SUPPORT_FOR_HTTP_AUTH = "AndroidAutofillSupportForHttpAuth"; public static final String ANDROID_AUTO_MINTED_TWA = "AndroidAutoMintedTWA"; public static final String ANDROID_BOOKMARK_BAR = "AndroidBookmarkBar"; public static final String ANDROID_BOOKMARK_BAR_FAST_FOLLOW = "AndroidBookmarkBarFastFollow"; + public static final String ANDROID_BOTTOM_BAR = "AndroidBottomBar"; public static final String ANDROID_BOTTOM_TOOLBAR_V2 = "AndroidBottomToolbarV2"; - public static final String ANDROID_COMPOSEPLATE = "AndroidComposeplate"; - public static final String ANDROID_COMPOSEPLATE_LFF = "AndroidComposeplateLFF"; public static final String ANDROID_CONTEXT_MENU_DUPLICATE_TABS = "AndroidContextMenuDuplicateTabs"; public static final String ANDROID_DATA_IMPORTER_SERVICE = "AndroidDataImporterService"; @@ -197,11 +198,12 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( 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_PINNED_TABS = "AndroidPinnedTabs"; - public static final String ANDROID_PINNED_TABS_TABLET_TAB_STRIP = - "AndroidPinnedTabsTabletTabStrip"; + public static final String ANDROID_PAGE_INFO_AS_APP_MENU_ITEM = "AndroidPageInfoAsAppMenuItem"; public static final String ANDROID_PROGRESS_BAR_VISUAL_UPDATE = "AndroidProgressBarVisualUpdate"; + public static final String ANDROID_SAVE_CARD_NON_BLOCKING_DIALOG = + "AndroidSaveCardNonBlockingDialog"; + public static final String ANDROID_SELF_OCCLUSION_TRACKING = "AndroidSelfOcclusionTracking"; public static final String ANDROID_SETTINGS_CONTAINMENT = "AndroidSettingsContainment"; public static final String ANDROID_SETUP_LIST = "AndroidSetupList"; public static final String ANDROID_SURFACE_COLOR_UPDATE = "AndroidSurfaceColorUpdate"; @@ -224,20 +226,33 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( "AndroidWindowPopupPredictFinalBounds"; public static final String ANDROID_WINDOW_POPUP_RESIZE_AFTER_SPAWN = "AndroidWindowPopupResizeAfterSpawn"; + public static final String ANDROID_XR_IMMERSIVE_PLAYER = "AndroidXrImmersivePlayer"; public static final String ANDROID_XR_USES_SURFACE_CONTROL = "AndroidXRUsesSurfaceControl"; + public static final String ANDROID_ZOOM_IMMERSIVE = "AndroidZoomImmersive"; public static final String ANIMATED_GIF_REFACTOR = "AnimatedGifRefactor"; 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 APB144_PATCH2 = "Apb144Patch2"; + public static final String APB144_PATCH3 = "Apb144Patch3"; + public static final String APB144_PATCH4 = "Apb144Patch4"; + public static final String APB144_PATCH5 = "Apb144Patch5"; + public static final String APB144_PATCH6 = "Apb144Patch6"; + public static final String APB144_PATCH7 = "Apb144Patch7"; + public static final String APB144_PATCH8 = "Apb144Patch8"; + public static final String APB144_PATCH9 = "Apb144Patch9"; 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_AVAILABLE_BY_DEFAULT = "AutofillAiAvailableByDefault"; 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_SHOW_WALLET_DISABLED_BANNER = + "AutofillAiShowWalletDisabledBanner"; public static final String AUTOFILL_AI_WITH_DATA_SCHEMA = "AutofillAiWithDataSchema"; public static final String AUTOFILL_ALLOW_NON_HTTP_ACTIVATION = "AutofillAllowNonHttpActivation"; @@ -256,7 +271,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( "AutofillEnableCardBenefitsForAmericanExpress"; public static final String AUTOFILL_ENABLE_CARD_BENEFITS_FOR_BMO = "AutofillEnableCardBenefitsForBmo"; - public static final String AUTOFILL_ENABLE_CVC_STORAGE = "AutofillEnableCvcStorageAndFilling"; public static final String AUTOFILL_ENABLE_FLAT_RATE_CARD_BENEFITS_FROM_CURINOS = "AutofillEnableFlatRateCardBenefitsFromCurinos"; public static final String AUTOFILL_ENABLE_KEYBOARD_ACCESSORY_CHIP_REDESIGN = @@ -264,8 +278,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String AUTOFILL_ENABLE_KEYBOARD_ACCESSORY_CHIP_WIDTH_ADJUSTMENT = "AutofillEnableKeyboardAccessoryChipWidthAdjustment"; public static final String AUTOFILL_ENABLE_LOCAL_IBAN = "AutofillEnableLocalIban"; - public static final String AUTOFILL_ENABLE_LOYALTY_CARDS_FILLING = - "AutofillEnableLoyaltyCardsFilling"; public static final String AUTOFILL_ENABLE_NEW_CARD_BENEFITS_TOGGLE_TEXT = "AutofillEnableNewCardBenefitsToggleText"; public static final String AUTOFILL_ENABLE_NEW_FOP_DISPLAY_ANDROID = @@ -278,6 +290,8 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String AUTOFILL_ENABLE_SUPPORT_FOR_HOME_AND_WORK = "AutofillEnableSupportForHomeAndWork"; public static final String AUTOFILL_ENABLE_WALLET_BRANDING = "AutofillEnableWalletBranding"; + public static final String AUTOFILL_ENABLE_WALLET_BRANDING_V2 = + "AutofillEnableWalletBrandingV2"; public static final String AUTOFILL_RETRY_IMAGE_FETCH_ON_FAILURE = "AutofillRetryImageFetchOnFailure"; public static final String AUTOFILL_SYNC_EWALLET_ACCOUNTS = "AutofillSyncEwalletAccounts"; @@ -343,6 +357,8 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( "CCTOpenInBrowserButtonIfAllowedByEmbedder"; public static final String CCT_OPEN_IN_BROWSER_BUTTON_IF_ENABLED_BY_EMBEDDER = "CCTOpenInBrowserButtonIfEnabledByEmbedder"; + public static final String CCT_PAGE_CONTENT_REQUEST_ALLOWED = "CCTPageContentRequestAllowed"; + public static final String CCT_PAGE_CONTENT_REQUEST_ENABLED = "CCTPageContentRequestEnabled"; public static final String CCT_REALTIME_ENGAGEMENT_EVENTS_IN_BACKGROUND = "CCTRealtimeEngagementEventsInBackground"; public static final String CCT_REPORT_PARALLEL_REQUEST_STATUS = @@ -391,6 +407,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( 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 CROSS_DEVICE_TASK_HANDOFF = "CrossDeviceTaskHandoff"; public static final String DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING = "DarkenWebsitesCheckboxInThemesSetting"; public static final String DATA_SHARING = "DataSharing"; @@ -447,13 +464,13 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String ENABLE_TOOLBAR_SWIPE_ON_NON_DESKTOP_LFF = "EnableToolbarSwipeOnNonDesktopLff"; public static final String ENABLE_X_AXIS_ACTIVITY_TRANSITION = "EnableXAxisActivityTransition"; + public static final String ENFORCE_INCOGNITO_ISOLATION = "EnforceIncognitoIsolation"; public static final String ESC_CANCEL_DRAG = "EscCancelDrag"; public static final String FACILITATED_PAYMENTS_ENABLE_A2A_PAYMENT = "FacilitatedPaymentsEnableA2APayment"; public static final String FEED_AUDIO_OVERVIEWS = "FeedAudioOverviews"; public static final String FEED_CONTAINMENT = "FeedContainment"; public static final String FEED_FOLLOW_UI_UPDATE = "FeedFollowUiUpdate"; - public static final String FEED_HEADER_REMOVAL = "FeedHeaderRemoval"; public static final String FEED_IMAGE_MEMORY_CACHE_SIZE_PERCENTAGE = "FeedImageMemoryCacheSizePercentage"; public static final String FEED_LOADING_PLACEHOLDER = "FeedLoadingPlaceholder"; @@ -468,6 +485,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( "FullscreenInsetsApiMigrationOnAutomotive"; public static final String FULLSCREEN_VIDEO_PICTURE_IN_PICTURE = "FullscreenVideoPictureInPicture"; + public static final String GESTURE_USER_EDUCATION_BACK_SWIPE = "GestureUserEducationBackSwipe"; public static final String GLIC = "Glic"; public static final String GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE = "GridTabSwitcherSurfaceColorUpdate"; @@ -498,10 +516,10 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String LOCK_TOP_CONTROLS_ON_LARGE_TABLETS = "LockTopControlsOnLargeTablets"; public static final String LOCK_TOP_CONTROLS_ON_LARGE_TABLETS_V2 = "LockTopControlsOnLargeTabletsV2"; + public static final String LOGO_VIEW_REFACTOR = "LogoViewRefactor"; public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI = "LookalikeUrlNavigationSuggestionsUI"; public static final String LOW_END_MEMORY_EXPERIMENT = BaseFeatures.LOW_END_MEMORY_EXPERIMENT; - public static final String MAGIC_STACK_ANDROID = "MagicStackAndroid"; public static final String MALICIOUS_APK_DOWNLOAD_CHECK = "MaliciousApkDownloadCheck"; public static final String MAYLAUNCHURL_USES_SEPARATE_STORAGE_PARTITION = "MayLaunchUrlUsesSeparateStoragePartition"; @@ -554,10 +572,10 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String PRERENDER2 = "Prerender2"; public static final String PRICE_ANNOTATIONS = "PriceAnnotations"; public static final String PRICE_CHANGE_MODULE = "PriceChangeModule"; - public static final String PRIVACY_SANDBOX_ACTIVITY_TYPE_STORAGE = - "PrivacySandboxActivityTypeStorage"; public static final String PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS = "PrivacySandboxAdsApiUxEnhancements"; + public static final String PRIVACY_SANDBOX_AD_PRIVACY_UX_DEPRECATION = + "PrivacySandboxAdPrivacyUxDeprecation"; public static final String PRIVACY_SANDBOX_AD_TOPICS_CONTENT_PARITY = "PrivacySandboxAdTopicsContentParity"; public static final String PRIVACY_SANDBOX_SETTINGS_4 = "PrivacySandboxSettings4"; @@ -573,7 +591,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String READALOUD_IPH_MENU_BUTTON_HIGHLIGHT_CCT = "ReadAloudIPHMenuButtonHighlightCCT"; public static final String READALOUD_PLAYBACK = "ReadAloudPlayback"; - public static final String RECENTLY_CLOSED_TABS_AND_WINDOWS = "RecentlyClosedTabsAndWindows"; public static final String RECORD_INCOGNITO_NTP_TIME_TO_FIRST_NAVIGATION_METRIC = "RecordIncognitoNtpTimeToFirstNavigationMetric"; public static final String RECORD_SUPPRESSION_METRICS = "RecordSuppressionMetrics"; @@ -590,7 +607,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( "RestrictLegacySearchEnginePromoOnFormFactors"; public static final String RIGHT_EDGE_GOES_FORWARD_GESTURE_NAV = "RightEdgeGoesForwardGestureNav"; - public static final String ROBUST_WINDOW_MANAGEMENT = "RobustWindowManagement"; public static final String ROBUST_WINDOW_MANAGEMENT_EXPERIMENTAL = "RobustWindowManagementExperimental"; public static final String SAFETY_HUB = "SafetyHub"; @@ -604,6 +620,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String SAFE_BROWSING_DELAYED_WARNINGS = "SafeBrowsingDelayedWarnings"; public static final String SAFE_BROWSING_EXTENDED_REPORTING_REMOVE_PREF_DEPENDENCY = "ExtendedReportingRemovePrefDependency"; + public static final String SCHEDULE_WINDOW_CLEANING = "ScheduleWindowCleaning"; public static final String SEARCH_IN_CCT = "SearchInCCT"; public static final String SEARCH_IN_CCT_ALTERNATE_TAP_HANDLING = "SearchInCCTAlternateTapHandling"; @@ -612,7 +629,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String SEARCH_IN_CCT_IF_ENABLED_BY_EMBEDDER = "SearchInCCTIfEnabledByEmbedder"; public static final String SEARCH_IN_SETTINGS = "SearchInSettings"; - public static final String SEARCH_RESUMPTION_MODULE_ANDROID = "SearchResumptionModuleAndroid"; public static final String SEED_ACCOUNTS_REVAMP = "SeedAccountsRevamp"; public static final String SEGMENTATION_PLATFORM_ANDROID_HOME_MODULE_RANKER = "SegmentationPlatformAndroidHomeModuleRanker"; @@ -676,7 +692,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String TASK_MANAGER_CLANK = "TaskManagerClank"; public static final String TEST_DEFAULT_DISABLED = "TestDefaultDisabled"; public static final String TEST_DEFAULT_ENABLED = "TestDefaultEnabled"; - public static final String TINKER_TANK_BOTTOM_SHEET = "TinkerTankBottomSheet"; + public static final String THREE_DOT_MENU_BACK_BUTTON = "ThreeDotMenuBackButton"; public static final String TOOLBAR_PHONE_ANIMATION_REFACTOR = "ToolbarPhoneAnimationRefactor"; public static final String TOOLBAR_SCROLL_ABLATION = "AndroidToolbarScrollAblation"; public static final String TOOLBAR_SNAPSHOT_REFACTOR = "ToolbarSnapshotRefactor"; @@ -690,7 +706,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final String TRUSTED_WEB_ACTIVITY_CONTACTS_DELEGATION = "TrustedWebActivityContactsDelegation"; public static final String UMA_SESSION_CORRECTNESS_FIXES = "UmaSessionCorrectnessFixes"; - public static final String UNO_PHASE_2_FOLLOW_UP = "UnoPhase2FollowUp"; public static final String UNPARCEL_INTENT_FILE_DESCRIPTORS = "UnparcelIntentFileDescriptors"; public static final String UPDATE_COMPOSTIROR_FOR_SURFACE_CONTROL = "UpdateCompositorForSurfaceControl"; @@ -727,17 +742,29 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( 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 sAndroidApb144Patch2 = newCachedFlag(APB144_PATCH2, true); + public static final CachedFlag sAndroidApb144Patch3 = newCachedFlag(APB144_PATCH3, true); + public static final CachedFlag sAndroidApb144Patch4 = newCachedFlag(APB144_PATCH4, true); + public static final CachedFlag sAndroidApb144Patch5 = newCachedFlag(APB144_PATCH5, true); + public static final CachedFlag sAndroidApb144Patch6 = newCachedFlag(APB144_PATCH6, true); + public static final CachedFlag sAndroidApb144Patch7 = newCachedFlag(APB144_PATCH7, true); + public static final CachedFlag sAndroidApb144Patch8 = newCachedFlag(APB144_PATCH8, true); + public static final CachedFlag sAndroidApb144Patch9 = newCachedFlag(APB144_PATCH9, true); public static final CachedFlag sAndroidAppIntegrationModule = newCachedFlag(ANDROID_APP_INTEGRATION_MODULE, true); public static final CachedFlag sAndroidAppIntegrationMultiDataSource = newCachedFlag(ANDROID_APP_INTEGRATION_MULTI_DATA_SOURCE, true); + public static final CachedFlag sAndroidAppRatingPrompt = + newCachedFlag( + ANDROID_APP_RATING_PROMPT, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sAndroidAutoMintedTwa = newCachedFlag(ANDROID_AUTO_MINTED_TWA, false); + public static final CachedFlag sAndroidBottomBar = + newCachedFlag(ANDROID_BOTTOM_BAR, false, /* defaultValueInTests= */ false); public static final CachedFlag sAndroidBottomToolbarV2 = newCachedFlag(ANDROID_BOTTOM_TOOLBAR_V2, false, true); - public static final CachedFlag sAndroidComposeplate = newCachedFlag(ANDROID_COMPOSEPLATE, true); - public static final CachedFlag sAndroidComposeplateLFF = - newCachedFlag(ANDROID_COMPOSEPLATE_LFF, /* defaultValue= */ true); public static final CachedFlag sAndroidDataImporterService = newCachedFlag(ANDROID_DATA_IMPORTER_SERVICE, true); public static final CachedFlag sAndroidDesktopDensity = @@ -748,15 +775,19 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( newCachedFlag(ANDROID_NEW_MEDIA_PICKER, false); public static final CachedFlag sAndroidOpenIncognitoAsWindow = newCachedFlag(ANDROID_OPEN_INCOGNITO_AS_WINDOW, BuildConfig.IS_DESKTOP_ANDROID, true); + public static final CachedFlag sAndroidPageInfoAsAppMenuItem = + newCachedFlag(ANDROID_PAGE_INFO_AS_APP_MENU_ITEM, false); public static final CachedFlag sAndroidProgressBarVisualUpdate = newCachedFlag( ANDROID_PROGRESS_BAR_VISUAL_UPDATE, /* defaultValue= */ false, /* defaultValueInTests= */ false); + public static final CachedFlag sAndroidSelfOcclusionTracking = + newCachedFlag(ANDROID_SELF_OCCLUSION_TRACKING, false); public static final CachedFlag sAndroidSettingsContainment = newCachedFlag( ANDROID_SETTINGS_CONTAINMENT, - /* defaultValue= */ false, + /* defaultValue= */ true, /* defaultValueInTests= */ true); public static final CachedFlag sAndroidSetupList = newCachedFlag( @@ -785,13 +816,15 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( /* defaultValue= */ false, /* defaultValueInTests= */ true); public static final CachedFlag sAndroidWindowPopupCustomTabUi = - newCachedFlag(ANDROID_WINDOW_POPUP_CUSTOM_TAB_UI, false, true); + newCachedFlag(ANDROID_WINDOW_POPUP_CUSTOM_TAB_UI, true); public static final CachedFlag sAndroidWindowPopupLargeScreen = - newCachedFlag(ANDROID_WINDOW_POPUP_LARGE_SCREEN, false, true); + newCachedFlag(ANDROID_WINDOW_POPUP_LARGE_SCREEN, true); public static final CachedFlag sAndroidWindowPopupPredictFinalBounds = - newCachedFlag(ANDROID_WINDOW_POPUP_PREDICT_FINAL_BOUNDS, false, true); + newCachedFlag(ANDROID_WINDOW_POPUP_PREDICT_FINAL_BOUNDS, true); public static final CachedFlag sAndroidWindowPopupResizeAfterSpawn = - newCachedFlag(ANDROID_WINDOW_POPUP_RESIZE_AFTER_SPAWN, false, true); + newCachedFlag(ANDROID_WINDOW_POPUP_RESIZE_AFTER_SPAWN, true); + public static final CachedFlag sAndroidXrImmersivePlayer = + newCachedFlag(ANDROID_XR_IMMERSIVE_PLAYER, false); public static final CachedFlag sAppSpecificHistory = newCachedFlag(APP_SPECIFIC_HISTORY, true); public static final CachedFlag sAppSpecificHistoryViewIntent = newCachedFlag(APP_SPECIFIC_HISTORY_VIEW_INTENT, true); @@ -856,6 +889,10 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ALLOWED_BY_EMBEDDER, false); public static final CachedFlag sCctOpenInBrowserButtonIfEnabledByEmbedder = newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ENABLED_BY_EMBEDDER, true); + public static final CachedFlag sCctPageContentRequestAllowed = + newCachedFlag(CCT_PAGE_CONTENT_REQUEST_ALLOWED, true); + public static final CachedFlag sCctPageContentRequestEnabled = + newCachedFlag(CCT_PAGE_CONTENT_REQUEST_ENABLED, false); public static final CachedFlag sCctRealtimeEngagementEventsInBackground = newCachedFlag(CCT_REALTIME_ENGAGEMENT_EVENTS_IN_BACKGROUND, true); public static final CachedFlag sCctResetTimeoutAllowed = @@ -892,8 +929,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( 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 = @@ -920,7 +955,24 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final CachedFlag sEducationalTipDefaultBrowserPromoCard = newCachedFlag(EDUCATIONAL_TIP_DEFAULT_BROWSER_PROMO_CARD, false, true); public static final CachedFlag sEnableAndroidSidePanel = - newCachedFlag(ENABLE_ANDROID_SIDE_PANEL, false); + newCachedFlag( + ENABLE_ANDROID_SIDE_PANEL, + /* defaultValue= */ false, + // In http://crrev.com/c/7689838, "defaultValueInTests" was set to + // true for testing purposes. Detailed reasons are in that CL's commit message. + // + // However, it caused the flag to be also enabled in non-official or + // non-Chrome-branded browser app APKs on _mobile_ Android where there should be + // no side panel (see CachedFlag.java for details). + // + // To avoid affecting non-official or non-Chrome-branded _mobile_ Android in + // non-testing environments, we use BuildConfig.IS_FOR_TEST to truly limit the + // "true" value in tests. + // + // In the long-term, this flag will be enabled for all form factors, and the + // code behind it should decide whether the side panel UI should appear, based + // on factors like window size. + /* defaultValueInTests= */ BuildConfig.IS_FOR_TEST); public static final CachedFlag sEnableAndroidSidePanelDevFeature = newCachedFlag(ENABLE_ANDROID_SIDE_PANEL_DEV_FEATURE, false); public static final CachedFlag sEnableBrowserWindowInterfaceForCustomTabActivity = @@ -943,6 +995,11 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( newCachedFlag(FULLSCREEN_INSETS_API_MIGRATION_ON_AUTOMOTIVE, true); public static final CachedFlag sFullscreenVideoPictureInPicture = newCachedFlag(FULLSCREEN_VIDEO_PICTURE_IN_PICTURE, true); + public static final CachedFlag sGestureUserEducationBackSwipe = + newCachedFlag( + GESTURE_USER_EDUCATION_BACK_SWIPE, + /* defaultValue= */ false, + /* defaultValueInTests= */ false); public static final CachedFlag sGlic = newCachedFlag(GLIC, false); public static final CachedFlag sGridTabSwitcherSurfaceColorUpdate = newCachedFlag( @@ -981,7 +1038,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( LOCK_TOP_CONTROLS_ON_LARGE_TABLETS_V2, /* defaultValue= */ false, /* defaultValueInTests= */ true); - public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true); public static final CachedFlag sMaliciousApkDownloadCheck = newCachedFlag( MALICIOUS_APK_DOWNLOAD_CHECK, @@ -1000,7 +1056,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( /* defaultValue= */ false, /* defaultValueInTests= */ true); public static final CachedFlag sMultiInstanceSharedPrefsMigration = - newCachedFlag(MULTI_INSTANCE_SHARED_PREFS_MIGRATION, false); + newCachedFlag(MULTI_INSTANCE_SHARED_PREFS_MIGRATION, true); public static final CachedFlag sMvcUpdateViewWhenModelChanged = newCachedFlag( MVC_UPDATE_VIEW_WHEN_MODEL_CHANGED, @@ -1028,7 +1084,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final CachedFlag sPCctMinimumHeight = newCachedFlag(PCCT_MINIMUM_HEIGHT, true); public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false); public static final CachedFlag sPersistAcrossReboots = - newCachedFlag(PERSIST_ACROSS_REBOOTS, false); + newCachedFlag(PERSIST_ACROSS_REBOOTS, true); public static final CachedFlag sPersistAcrossRebootsDebugLogs = newCachedFlag(PERSIST_ACROSS_REBOOTS_DEBUG_LOGS, false); public static final CachedFlag sPostGetMyMemoryStateToBackground = @@ -1092,6 +1148,11 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final CachedFlag sTestDefaultDisabled = newCachedFlag(TEST_DEFAULT_DISABLED, false); public static final CachedFlag sTestDefaultEnabled = newCachedFlag(TEST_DEFAULT_ENABLED, true); + public static final CachedFlag sThreeDotMenuBackButton = + newCachedFlag( + THREE_DOT_MENU_BACK_BUTTON, + /* defaultValue= */ false, + /* defaultValueInTests= */ false); public static final CachedFlag sToolbarPhoneAnimationRefactor = newCachedFlag( TOOLBAR_PHONE_ANIMATION_REFACTOR, @@ -1144,18 +1205,28 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( sAccountForSuppressedKeyboardInsets, sAndroidAnimatedProgressBarInBrowser, sAndroidApb144Patch1, + sAndroidApb144Patch2, + sAndroidApb144Patch3, + sAndroidApb144Patch4, + sAndroidApb144Patch5, + sAndroidApb144Patch6, + sAndroidApb144Patch7, + sAndroidApb144Patch8, + sAndroidApb144Patch9, sAndroidAppIntegrationModule, sAndroidAppIntegrationMultiDataSource, + sAndroidAppRatingPrompt, sAndroidAutoMintedTwa, + sAndroidBottomBar, sAndroidBottomToolbarV2, - sAndroidComposeplate, - sAndroidComposeplateLFF, sAndroidDataImporterService, sAndroidDesktopDensity, sAndroidElegantTextHeight, sAndroidNewMediaPicker, sAndroidOpenIncognitoAsWindow, + sAndroidPageInfoAsAppMenuItem, sAndroidProgressBarVisualUpdate, + sAndroidSelfOcclusionTracking, sAndroidSettingsContainment, sAndroidSetupList, sAndroidSurfaceColorUpdate, @@ -1171,6 +1242,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( sAndroidWindowPopupLargeScreen, sAndroidWindowPopupPredictFinalBounds, sAndroidWindowPopupResizeAfterSpawn, + sAndroidXrImmersivePlayer, sAppSpecificHistory, sAppSpecificHistoryViewIntent, sAsyncNotificationManager, @@ -1199,6 +1271,8 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( sCctNestedSecurityIcon, sCctOpenInBrowserButtonIfAllowedByEmbedder, sCctOpenInBrowserButtonIfEnabledByEmbedder, + sCctPageContentRequestAllowed, + sCctPageContentRequestEnabled, sCctRealtimeEngagementEventsInBackground, sCctResetTimeoutAllowed, sCctResetTimeoutEnabled, @@ -1215,7 +1289,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( sCpaTabGroupingButton, sCrossDeviceTabPaneAndroid, sDefaultBrowserPromoEntryPoint, - sDefaultBrowserPromoFre, sDesktopAndroidLinkCapturing, sDesktopUAOnConnectedDisplay, sDocumentPictureInPictureAPI, @@ -1238,6 +1311,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( sFullscreenInsetsApiMigration, sFullscreenInsetsApiMigrationOnAutomotive, sFullscreenVideoPictureInPicture, + sGestureUserEducationBackSwipe, sGlic, sGridTabSwitcherSurfaceColorUpdate, sHistoryPaneAndroid, @@ -1248,7 +1322,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( sLoadNativeEarly, sLockBackPressHandlerAtStart, sLockTopControlsOnLargeTabletsV2, - sMagicStackAndroid, sMaliciousApkDownloadCheck, sMostVisitedTilesCustomization, sMostVisitedTilesReselect, @@ -1288,6 +1361,7 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( sTabStorageSqlitePrototype, sTabStripDensityChangeAndroid, sTabWindowManagerReportIndicesMismatch, + sThreeDotMenuBackButton, sToolbarPhoneAnimationRefactor, sToolbarSnapshotRefactor, sToolbarStaleCaptureBugFix, @@ -1331,14 +1405,12 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( 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 sAndroidTipsNotifications = newMutableFlagWithSafeDefault(ANDROID_TIPS_NOTIFICATIONS, false); public static final MutableFlagWithSafeDefault sAndroidTipsNotificationsV2 = newMutableFlagWithSafeDefault(ANDROID_TIPS_NOTIFICATIONS_V2, false); + public static final MutableFlagWithSafeDefault sAndroidZoomImmersive = + newMutableFlagWithSafeDefault(ANDROID_ZOOM_IMMERSIVE, false); public static final MutableFlagWithSafeDefault sBrowserControlsEarlyResize = newMutableFlagWithSafeDefault(BROWSER_CONTROLS_EARLY_RESIZE, false); public static final MutableFlagWithSafeDefault sBrowserControlsPersistsOnCvh = @@ -1347,9 +1419,9 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final MutableFlagWithSafeDefault sBrowserControlsRenderDrivenShowConstraint = newMutableFlagWithSafeDefault(BROWSER_CONTROLS_RENDER_DRIVEN_SHOW_CONSTRAINT, false); public static final MutableFlagWithSafeDefault sBrowserWindowInterfaceMobile = - newMutableFlagWithSafeDefault(BROWSER_WINDOW_INTERFACE_MOBILE, false); + newMutableFlagWithSafeDefault(BROWSER_WINDOW_INTERFACE_MOBILE, true); public static final MutableFlagWithSafeDefault sCompositorViewHolderObscuring = - newMutableFlagWithSafeDefault(COMPOSITOR_VIEW_HOLDER_OBSCURING, true); + newMutableFlagWithSafeDefault(COMPOSITOR_VIEW_HOLDER_OBSCURING, false); public static final MutableFlagWithSafeDefault sControlsVisibilityFromNavigations = newMutableFlagWithSafeDefault(CONTROLS_VISIBILITY_FROM_NAVIGATIONS, true); // Defaulted to true in native, but since it is being used as a kill switch set the default @@ -1363,11 +1435,13 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final MutableFlagWithSafeDefault sEnableToolbarPositioningInResizeMode = newMutableFlagWithSafeDefault(ENABLE_TOOLBAR_POSITIONING_IN_RESIZE_MODE, true); public static final MutableFlagWithSafeDefault sEscCancelDrag = - newMutableFlagWithSafeDefault(ESC_CANCEL_DRAG, false); + newMutableFlagWithSafeDefault(ESC_CANCEL_DRAG, true); public static final MutableFlagWithSafeDefault sIncognitoNtpSmallIcon = newMutableFlagWithSafeDefault(INCOGNITO_NTP_SMALL_ICON, false); public static final MutableFlagWithSafeDefault sIncognitoScreenshot = newMutableFlagWithSafeDefault(INCOGNITO_SCREENSHOT, false); + public static final MutableFlagWithSafeDefault sInlinePdfV2 = + newMutableFlagWithSafeDefault(INLINE_PDF_V2, false); public static final MutableFlagWithSafeDefault sLockTopControlsOnLargeTablets = newMutableFlagWithSafeDefault(LOCK_TOP_CONTROLS_ON_LARGE_TABLETS, false); public static final MutableFlagWithSafeDefault sMediaIndicatorsAndroid = @@ -1378,15 +1452,13 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( 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, 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, true); + public static final MutableFlagWithSafeDefault sScheduleWindowCleaning = + newMutableFlagWithSafeDefault(SCHEDULE_WINDOW_CLEANING, false); public static final MutableFlagWithSafeDefault sShowTabListAnimations = newMutableFlagWithSafeDefault(SHOW_TAB_LIST_ANIMATIONS, false); public static final MutableFlagWithSafeDefault sSuppressToolbarCapturesAtGestureEnd = @@ -1431,6 +1503,9 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final BooleanCachedFeatureParam sAndroidAppIntegrationModuleShowThirdPartyCard = newBooleanCachedFeatureParam( ANDROID_APP_INTEGRATION_MODULE, "show_third_party_card", false); + + public static final BooleanCachedFeatureParam sAndroidAppRatingPromptBypassChecks = + newBooleanCachedFeatureParam(ANDROID_APP_RATING_PROMPT, "bypass_checks", false); public static final BooleanCachedFeatureParam sAndroidAppIntegrationMultiDataSourceSkipSchemaCheck = newBooleanCachedFeatureParam( @@ -1447,8 +1522,12 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( public static final BooleanCachedFeatureParam sAndroidBookmarkBarShowBookmarkBar = newBooleanCachedFeatureParam(ANDROID_BOOKMARK_BAR, "show_bookmark_bar", false); - public static final BooleanCachedFeatureParam sAndroidComposeplateSkipLocaleCheck = - newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "skip_locale_check", false); + public static final BooleanCachedFeatureParam sAndroidBottomBarKeepAppMenuInToolbar = + newBooleanCachedFeatureParam(ANDROID_BOTTOM_BAR, "keep_app_menu_in_toolbar", false); + public static final BooleanCachedFeatureParam sAndroidBottomBarKeepHomeButtonInToolbar = + newBooleanCachedFeatureParam(ANDROID_BOTTOM_BAR, "keep_home_button_in_toolbar", false); + public static final BooleanCachedFeatureParam sAndroidBottomBarShowBottomBarOnGts = + newBooleanCachedFeatureParam(ANDROID_BOTTOM_BAR, "show_bottom_bar_on_gts", false); public static final BooleanCachedFeatureParam sAndroidBottomToolbarV2ForceBottomForFocusedOmnibox = @@ -1459,6 +1538,17 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( newBooleanCachedFeatureParam( ANDROID_BOTTOM_TOOLBAR_V2, "reverse_order_suggestions_list", false); + public static final BooleanCachedFeatureParam sAndroidSelfOcclusionTrackingForwarding = + newBooleanCachedFeatureParam( + ANDROID_SELF_OCCLUSION_TRACKING, "occlusion_state_forwarding", false); + + public static final IntCachedFeatureParam + sAndroidSelfOcclusionTrackingMinimumVisibilitySizeThreshold = + newIntCachedFeatureParam( + ANDROID_SELF_OCCLUSION_TRACKING, + "minimum_visibility_size_threshold", + 0); + public static final IntCachedFeatureParam sBackgroundThreadPoolFieldTrialConfig = newIntCachedFeatureParam(BACKGROUND_THREAD_POOL_FIELD_TRIAL, "config", 4); @@ -1563,10 +1653,6 @@ private static MutableFlagWithSafeDefault newMutableFlagWithSafeDefault( 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. @@ -1619,14 +1705,6 @@ A cached param that determines whether we show the menu item (entry point) in th 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}. - */ - public static final StringCachedFeatureParam sEdgeToEdgeBottomChinOemMinVersions = - newStringCachedFeatureParam( - EDGE_TO_EDGE_BOTTOM_CHIN, "e2e_field_trial_oem_min_versions", "34,34"); - public static final StringCachedFeatureParam sEdgeToEdgeEverywhereOemMinVersions = newStringCachedFeatureParam( EDGE_TO_EDGE_EVERYWHERE, "e2e_field_trial_oem_min_versions", "35"); @@ -1637,15 +1715,6 @@ A cached param that determines whether we show the menu item (entry point) in th "e2e_backup_navbar_insets_oem_min_versions", ""); - /** - * Param for the OEMs that need an exception for min versions. Its value should be a comma - * separated list of manufacturer, and its index should match {@link - * #sEdgeToEdgeBottomChinOemMinVersions}. - */ - public static final StringCachedFeatureParam sEdgeToEdgeBottomChinOemList = - newStringCachedFeatureParam( - EDGE_TO_EDGE_BOTTOM_CHIN, "e2e_field_trial_oem_list", "oppo,xiaomi"); - public static final StringCachedFeatureParam sEdgeToEdgeEverywhereOemList = newStringCachedFeatureParam( EDGE_TO_EDGE_EVERYWHERE, "e2e_field_trial_oem_list", "realme"); @@ -1672,8 +1741,6 @@ A cached param that determines whether we show the menu item (entry point) in th newBooleanCachedFeatureParam( GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE, "tab_group_list_containment", true); - public static final BooleanCachedFeatureParam sMagicStackAndroidShowAllModules = - newBooleanCachedFeatureParam(MAGIC_STACK_ANDROID, "show_all_modules", false); public static final BooleanCachedFeatureParam sMaliciousApkDownloadCheckTelemetryOnly = newBooleanCachedFeatureParam(MALICIOUS_APK_DOWNLOAD_CHECK, "telemetry_only", false); public static final BooleanCachedFeatureParam sMostVisitedTilesReselectLaxSchemeHost = @@ -1735,14 +1802,8 @@ A cached param that determines whether we show the menu item (entry point) in th "start_surface_return_time_on_tablet_seconds", 14400); // 4 hours - public static final BooleanCachedFeatureParam sTabStorageSqlitePrototypeAllowFullMigration = - newBooleanCachedFeatureParam( - TAB_STORAGE_SQLITE_PROTOTYPE, "allow_full_migration", false); - - public static final BooleanCachedFeatureParam - sTabStorageSqlitePrototypeAuthoritativeReadSource = - newBooleanCachedFeatureParam( - TAB_STORAGE_SQLITE_PROTOTYPE, "authoritative_read_source", false); + public static final StringCachedFeatureParam sTabStorageSqlitePrototypePhase = + newStringCachedFeatureParam(TAB_STORAGE_SQLITE_PROTOTYPE, "phase", ""); public static final IntCachedFeatureParam sTabWindowManagerReportIndicesMismatchTimeDiffThresholdMs = @@ -1784,10 +1845,15 @@ A cached param that determines whether we show the menu item (entry point) in th sAndroidAppIntegrationModuleShowThirdPartyCard, sAndroidAppIntegrationMultiDataSourceSkipDeviceCheck, sAndroidAppIntegrationMultiDataSourceSkipSchemaCheck, + sAndroidAppRatingPromptBypassChecks, sAndroidBookmarkBarShowBookmarkBar, + sAndroidBottomBarKeepAppMenuInToolbar, + sAndroidBottomBarKeepHomeButtonInToolbar, + sAndroidBottomBarShowBottomBarOnGts, sAndroidBottomToolbarV2ForceBottomForFocusedOmnibox, sAndroidBottomToolbarV2ReverseOrderSuggestionsList, - sAndroidComposeplateSkipLocaleCheck, + sAndroidSelfOcclusionTrackingForwarding, + sAndroidSelfOcclusionTrackingMinimumVisibilitySizeThreshold, sAndroidThemeModuleForceDependencies, sAndroidThemeResourceProviderForceLight, sAndroidTipsNotificationsAlwaysShowOptInPromo, @@ -1813,10 +1879,7 @@ A cached param that determines whether we show the menu item (entry point) in th sClampAutomotiveScalingMaxScalingPercentage, sClankStartupLatencyInjectionAmountMs, sDefaultBrowserPromoEntryPointShowAppMenu, - sDefaultBrowserPromoFreArm, sDesktopUAAllowedOnExternalDisplayForOem, - sEdgeToEdgeBottomChinOemList, - sEdgeToEdgeBottomChinOemMinVersions, sEdgeToEdgeEverywhereOemList, sEdgeToEdgeEverywhereOemMinVersions, sEdgeToEdgeTabletInvisibleBottomChinMinWidth, @@ -1827,7 +1890,6 @@ A cached param that determines whether we show the menu item (entry point) in th sInitFeatureListEarly, sLockTopControlsForceAdjustHeightOnStartup, sLowMemoryDeviceThresholdMb, - sMagicStackAndroidShowAllModules, sMaliciousApkDownloadCheckTelemetryOnly, sMostVisitedTilesReselectLaxPath, sMostVisitedTilesReselectLaxQuery, @@ -1852,8 +1914,7 @@ A cached param that determines whether we show the menu item (entry point) in th sShouldConsiderLanguageInOverviewReadability, sStartSurfaceReturnTimeTabletSecs, sTabGroupListContainment, - sTabStorageSqlitePrototypeAllowFullMigration, - sTabStorageSqlitePrototypeAuthoritativeReadSource, + sTabStorageSqlitePrototypePhase, sTabWindowManagerReportIndicesMismatchTimeDiffThresholdMs, sTopControlsRefactorNarrowWidthTransitionThreshold, sTouchToSearchCalloutIph, @@ -1866,13 +1927,6 @@ A cached param that determines whether we show the menu item (entry point) in th // Mutable*ParamWithSafeDefault instances. /* Alphabetical: */ - public static final MutableBooleanParamWithSafeDefault sAndroidPinnedTabsSearchBoxMovement = - sAndroidPinnedTabs.newBooleanParam("search_box_movement", true); - - public static final MutableBooleanParamWithSafeDefault - sAndroidPinnedTabsSearchBoxSquishAnimation = - sAndroidPinnedTabs.newBooleanParam("search_box_squish_animation", true); - public static final MutableBooleanParamWithSafeDefault sOmniboxAutofocusOnIncognitoNtpNotFirstTab = sOmniboxAutofocusOnIncognitoNtp.newBooleanParam("not_first_tab", false); @@ -1894,7 +1948,4 @@ A cached param that determines whether we show the menu item (entry point) in th 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", 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 ad6b592b4..4c7ad0aaa 100755 --- a/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc +++ b/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc @@ -25,14 +25,15 @@ #include "chrome/browser/browser_process_impl.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/component_updater/component_updater_prefs.h" -#include "chrome/browser/contextual_cueing/contextual_cueing_prefs.h" #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/engagement/important_sites_util.h" #include "chrome/browser/enterprise/reporting/prefs.h" #include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/external_protocol/external_protocol_handler.h" +#include "chrome/browser/finds/core/finds_service.h" #include "chrome/browser/first_run/first_run.h" #include "chrome/browser/glic/glic_pref_names.h" +#include "chrome/browser/glic/suggestions/contextual_cueing_prefs.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" @@ -186,7 +187,6 @@ #include "components/subresource_filter/content/browser/ruleset_service.h" #include "components/subresource_filter/core/common/constants.h" #include "components/supervised_user/core/browser/supervised_user_preferences.h" -#include "components/supervised_user/core/common/pref_names.h" #include "components/sync/base/pref_names.h" #include "components/sync/service/device_statistics_scheduler.h" #include "components/sync/service/glue/sync_transport_data_prefs.h" @@ -242,6 +242,10 @@ #include "chrome/browser/media/unified_autoplay_config.h" +#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS_CORE) +#include "chrome/browser/ui/webui/management/management_ui.h" +#endif + #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" @@ -275,7 +279,6 @@ #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" -#include "chrome/browser/new_tab_page/modules/safe_browsing/safe_browsing_handler.h" #include "chrome/browser/new_tab_page/modules/v2/authentication/microsoft_auth_page_handler.h" #include "chrome/browser/new_tab_page/modules/v2/calendar/google_calendar_page_handler.h" #include "chrome/browser/new_tab_page/modules/v2/calendar/outlook_calendar_page_handler.h" @@ -293,14 +296,12 @@ #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/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" -#include "chrome/browser/ui/webui/management/management_ui.h" #include "chrome/browser/ui/webui/new_tab_footer/new_tab_footer_ui.h" #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h" #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h" @@ -328,6 +329,7 @@ #include "ash/constants/ash_constants.h" #include "ash/constants/ash_pref_names.h" #include "ash/public/cpp/ash_prefs.h" +#include "base/check_deref.h" #include "chrome/browser/apps/app_discovery_service/almanac_fetcher.h" #include "chrome/browser/apps/app_preload_service/app_preload_service.h" #include "chrome/browser/apps/app_service/metrics/app_platform_metrics_service.h" @@ -374,6 +376,7 @@ #include "chrome/browser/ash/login/reporting/login_logout_reporter.h" #include "chrome/browser/ash/login/saml/saml_profile_prefs.h" #include "chrome/browser/ash/login/screens/enable_adb_sideloading_screen.h" +#include "chrome/browser/ash/login/screens/hid_detection_screen.h" #include "chrome/browser/ash/login/screens/reset_screen.h" #include "chrome/browser/ash/login/security_token_session_controller.h" #include "chrome/browser/ash/login/session/chrome_session_manager.h" @@ -401,6 +404,7 @@ #include "chrome/browser/ash/policy/handlers/tpm_auto_update_mode_policy_handler.h" #include "chrome/browser/ash/policy/networking/euicc_status_uploader.h" #include "chrome/browser/ash/policy/remote_commands/crd/crd_admin_session_controller.h" +#include "chrome/browser/ash/policy/remote_commands/device_command_query_geolocation_job.h" #include "chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h" #include "chrome/browser/ash/policy/reporting/arc_app_install_event_logger.h" #include "chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_prefs.h" @@ -497,10 +501,13 @@ #include "chrome/browser/webnn/webnn_prefs.h" #endif // BUILDFLAG(IS_WIN) -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) #include "chrome/browser/enterprise/platform_auth/platform_auth_policy_observer.h" +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) #include "components/os_crypt/sync/os_crypt.h" // nogncheck -#endif +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) @@ -517,7 +524,7 @@ #endif #if BUILDFLAG(ENABLE_DOWNGRADE_PROCESSING) -#include "chrome/browser/downgrade/downgrade_prefs.h" +#include "chrome/browser/downgrade/downgrade_prefs.h" // nogncheck #endif #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) @@ -556,81 +563,6 @@ namespace { // Please keep the list of deprecated prefs in chronological order. i.e. Add to // the bottom of the list, not here at the top. -// Deprecated 01/2025. -inline constexpr char kCompactModeEnabled[] = "compact_mode"; - -// Deprecated 01/2025. -inline constexpr char kSafeBrowsingAutomaticDeepScanningIPHSeen[] = - "safebrowsing.automatic_deep_scanning_iph_seen"; -inline constexpr char kSafeBrowsingAutomaticDeepScanPerformed[] = - "safe_browsing.automatic_deep_scan_performed"; - -#if BUILDFLAG(IS_CHROMEOS) -// Deprecated 01/2025. -inline constexpr char kUsedPolicyCertificates[] = - "policy.used_policy_certificates"; -#endif // BUILDFLAG(IS_CHROMEOS) - -// Deprecated 02/2025. -inline constexpr char kUserAgentClientHintsGREASEUpdateEnabled[] = - "policy.user_agent_client_hints_grease_update_enabled"; - -// Deprecated 02/2025. -inline constexpr char kDefaultSearchProviderKeywordsUseExtendedList[] = - "default_search_provider.keywords_use_extended_list"; - -#if BUILDFLAG(IS_ANDROID) -// Deprecated 2/2025. -inline constexpr char kLocalPasswordsMigrationWarningShownTimestamp[] = - "local_passwords_migration_warning_shown_timestamp"; -inline constexpr char kLocalPasswordMigrationWarningShownAtStartup[] = - "local_passwords_migration_warning_shown_at_startup"; -#endif // BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(IS_CHROMEOS) -// Deprecated 2/2025. -inline constexpr char kLiveCaptionUserMicrophoneEnabled[] = - "accessibility.captions.user_microphone_captioning_enabled"; -inline constexpr char kUserMicrophoneCaptionLanguageCode[] = - "accessibility.captions.user_microphone_language_code"; -#endif // BUILDFLAG(IS_CHROMEOS) - -// Deprecated 03/2025. -inline constexpr char kPasswordChangeFlowNoticeAgreement[] = - "password_manager.password_change_flow_notice_agreement"; - -#if BUILDFLAG(IS_CHROMEOS) -// Deprecated 02/2025. -constexpr char kScannerFeedbackEnabled[] = "ash.scanner.feedback_enabled"; -constexpr char kHmrFeedbackAllowed[] = "settings.mahi_feedback_allowed"; -constexpr char kSharedStorage[] = "shared_storage"; -#endif // BUILDFLAG(IS_CHROMEOS) - -#if BUILDFLAG(IS_ANDROID) -// Deprecated 02/2025. -inline constexpr char kRootSecretPrefName[] = - "webauthn.authenticator_root_secret"; -#endif // BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(IS_CHROMEOS) -// Deprecated 03/2025. -inline constexpr char kShouldAutoEnroll[] = "ShouldAutoEnroll"; -inline constexpr char kShouldRetrieveDeviceState[] = - "ShouldRetrieveDeviceState"; -inline constexpr char kAutoEnrollmentPowerLimit[] = "AutoEnrollmentPowerLimit"; -#endif // BUILDFLAG(IS_CHROMEOS) - -#if BUILDFLAG(IS_CHROMEOS) -// Deprecated 03/2025. -inline constexpr char kDeviceRestrictionScheduleHighestSeenTime[] = - "device_restriction_schedule_highest_seen_time"; -constexpr char kSunfishEnabled[] = "ash.capture_mode.sunfish_enabled"; -#endif // BUILDFLAG(IS_CHROMEOS) - -// Deprecated 03/2025. -inline constexpr char kRecurrentSSLInterstitial[] = - "profile.ssl_recurrent_interstitial"; - // Deprecated 04/2025. inline constexpr char kDefaultSearchProviderChoiceScreenShuffleMilestone[] = "default_search_provider.choice_screen_shuffle_milestone"; @@ -1003,30 +935,50 @@ 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) { - // Deprecated 02/2025. - registry->RegisterBooleanPref(kUserAgentClientHintsGREASEUpdateEnabled, true); +// Deprecated 03/2026. +inline constexpr char kTabSearchTabIndex[] = "tab_search.tab_index"; + +// Deprecated 03/2026. +constexpr char kGlicMultiInstanceEnabledBySubscriptionTier[] = + "glic.multi_instance_enabled_by_tier"; + +// Deprecated 03/2026 +constexpr char kSigninFromBookmarksBubbleSyntheticTrialGroupNamePref[] = + "UnoDesktopBookmarksEnabledInAccountFromBubbleGroup"; +constexpr char kBookmarksBubblePromoShownSyntheticTrialGroupNamePref[] = + "UnoDesktopBookmarksBubblePromoShownGroup"; #if BUILDFLAG(IS_ANDROID) - // Deprecated 02/2025. - registry->RegisterStringPref(kRootSecretPrefName, std::string()); +// Deprecated 03/2026. +constexpr char kPrivacySandboxActivityTypeRecord2[] = + "privacy_sandbox.activity_type.record2"; #endif // BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_CHROMEOS) - // Deprecated 03/2025. - registry->RegisterBooleanPref(kShouldRetrieveDeviceState, false); - registry->RegisterBooleanPref(kShouldAutoEnroll, false); - registry->RegisterIntegerPref(kAutoEnrollmentPowerLimit, -1); -#endif +// Deprecated 03/2026. +constexpr char kTabOrganizationNudgeBackoffCount[] = + "tab_organization.nudge_backoff_count"; +constexpr char kTabOrganizationShowFRE[] = "tab_organization.show_fre_2"; +constexpr char kTabOrganizationModelStrategy[] = + "tab_organization.model_strategy"; -#if BUILDFLAG(IS_CHROMEOS) - // Deprecated 03/2025. - registry->RegisterTimePref(kDeviceRestrictionScheduleHighestSeenTime, - base::Time()); -#endif +// Deprecated 03/2026. +constexpr char kNtpContextMenuClickCount[] = "ntp.context_menu_click_count"; + +// Deprecated 03/2026. +constexpr char kNtpPromoPrefLastSnoozed[] = + "in_product_help.ntp_promos.last_snoozed"; + +// Deprecated 03/2026. +constexpr char kSafeBrowsingModuleShownCount[] = + "safebrowsing.ntp.module_shown_count"; +constexpr char kSafeBrowsingModuleLastCooldownStartAt[] = + "safebrowsing.ntp.last_cooldown_start_timestamp"; +constexpr char kSafeBrowsingModuleOpened[] = + "safebrowsing.ntp.user_opened_module"; +// Register local state used only for migration (clearing or moving to a new +// key). +void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { #if !BUILDFLAG(IS_ANDROID) // Deprecated 04/2025. registry->RegisterListPref( @@ -1090,6 +1042,10 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { registry->RegisterIntegerPref(kPrivacyBudgetGeneration, 0); registry->RegisterStringPref(kPrivacyBudgetSeenSurfaces, std::string()); registry->RegisterStringPref(kPrivacyBudgetSelectedOffsets, std::string()); + + // Deprecated 03/2026. + registry->RegisterBooleanPref(kGlicMultiInstanceEnabledBySubscriptionTier, + false); registry->RegisterIntegerPref(kPrivacyBudgetSelectedBlock, -1); registry->RegisterDoublePref(kPrivacyBudgetMetaExperimentActivationSalt, 0); @@ -1132,55 +1088,6 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { // Register prefs used only for migration (clearing or moving to a new key). void RegisterProfilePrefsForMigration( user_prefs::PrefRegistrySyncable* registry) { - // Deprecated 01/2025. - registry->RegisterBooleanPref(kCompactModeEnabled, false); - - // Deprecated 01/2025. - registry->RegisterBooleanPref(kSafeBrowsingAutomaticDeepScanningIPHSeen, - false); - registry->RegisterBooleanPref(kSafeBrowsingAutomaticDeepScanPerformed, false); - -#if BUILDFLAG(IS_CHROMEOS) - // Deprecated 01/2025. - registry->RegisterBooleanPref(kUsedPolicyCertificates, false); -#endif // BUILDFLAG(IS_CHROMEOS) - - // Deprecated 02/2025. - registry->RegisterBooleanPref(kDefaultSearchProviderKeywordsUseExtendedList, - false); - -#if BUILDFLAG(IS_ANDROID) - // Deprecated 02/2025. - registry->RegisterTimePref(kLocalPasswordsMigrationWarningShownTimestamp, - base::Time()); - registry->RegisterBooleanPref(kLocalPasswordMigrationWarningShownAtStartup, - false); -#endif // BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(IS_CHROMEOS) - // Deprecated 02/2025. - registry->RegisterBooleanPref(kLiveCaptionUserMicrophoneEnabled, false); - registry->RegisterStringPref(kUserMicrophoneCaptionLanguageCode, ""); -#endif // BUILDFLAG(IS_CHROMEOS) - -#if BUILDFLAG(IS_CHROMEOS) - // Deprecated 02/2025. - registry->RegisterBooleanPref(kScannerFeedbackEnabled, true); - registry->RegisterBooleanPref(kHmrFeedbackAllowed, true); - registry->RegisterDictionaryPref(kSharedStorage); -#endif // BUILDFLAG(IS_CHROMEOS) - - // Deprecated 03/2025. - registry->RegisterBooleanPref(kPasswordChangeFlowNoticeAgreement, false); - -#if BUILDFLAG(IS_CHROMEOS) - // Deprecated 03/2025. - registry->RegisterBooleanPref(kSunfishEnabled, true); -#endif // BUILDFLAG(IS_CHROMEOS) - - // Deprecated 03/2025 - registry->RegisterDictionaryPref(kRecurrentSSLInterstitial); - // Deprecated 04/2025. registry->RegisterIntegerPref( kDefaultSearchProviderChoiceScreenShuffleMilestone, 0); @@ -1401,6 +1308,36 @@ void RegisterProfilePrefsForMigration( // Deprecated 03/2026. registry->RegisterIntegerPref(kTabDeclutterUsageCount, 0); + + // Deprecated 03/2026. + registry->RegisterIntegerPref(kTabSearchTabIndex, 1); + + // Deprecated 03/2026. + registry->RegisterStringPref( + kSigninFromBookmarksBubbleSyntheticTrialGroupNamePref, std::string()); + registry->RegisterStringPref( + kBookmarksBubblePromoShownSyntheticTrialGroupNamePref, std::string()); + +#if BUILDFLAG(IS_ANDROID) + // Deprecated 03/2026. + registry->RegisterListPref(kPrivacySandboxActivityTypeRecord2); +#endif // BUILDFLAG(IS_ANDROID) + + // Deprecated 03/2026. + registry->RegisterIntegerPref(kTabOrganizationNudgeBackoffCount, 0); + registry->RegisterBooleanPref(kTabOrganizationShowFRE, true); + registry->RegisterIntegerPref(kTabOrganizationModelStrategy, 0); + + // Deprecated 03/2026. + registry->RegisterIntegerPref(kNtpContextMenuClickCount, 0); + + // Deprecated 03/2026. + registry->RegisterTimePref(kNtpPromoPrefLastSnoozed, base::Time()); + + // Deprecated 03/2026. + registry->RegisterIntegerPref(kSafeBrowsingModuleShownCount, 0); + registry->RegisterInt64Pref(kSafeBrowsingModuleLastCooldownStartAt, 0); + registry->RegisterBooleanPref(kSafeBrowsingModuleOpened, false); } } // namespace @@ -1431,7 +1368,6 @@ void RegisterLocalState(PrefRegistrySimple* registry) { chrome_labs_prefs::RegisterLocalStatePrefs(registry); chrome_urls::RegisterPrefs(registry); ChromeMetricsServiceClient::RegisterPrefs(registry); - ChromeSigninClient::RegisterLocalStatePrefs(registry); enterprise_connectors::RegisterLocalStatePrefs(registry); enterprise_util::RegisterLocalStatePrefs(registry); component_updater::RegisterPrefs(registry); @@ -1491,6 +1427,9 @@ void RegisterLocalState(PrefRegistrySimple* registry) { // Individual preferences. If you have multiple preferences that should // clearly be grouped together, please group them together into a helper // function called above. Please keep this list alphabetized. + + registry->RegisterTimePref(prefs::kAudioInputStreamLastTimeCreated, + base::Time(), PrefRegistry::LOSSY_PREF); registry->RegisterBooleanPref( policy::policy_prefs::kIntensiveWakeUpThrottlingEnabled, false); #if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -1530,8 +1469,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { registry->RegisterIntegerPref(prefs::kLastWhatsNewVersion, 0); #endif // BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(ENABLE_EXTENSIONS) - extensions::ExtensionPrefs::RegisterBrowserPrefs(registry); +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) + extensions::ExtensionPrefs::RegisterLocalStatePrefs(registry); #endif #if BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) @@ -1569,6 +1508,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { ash::report::ReportController::RegisterPrefs(registry); ash::EnableDebuggingScreenHandler::RegisterPrefs(registry); ash::FastTransitionObserver::RegisterPrefs(registry); + ash::HIDDetectionScreen::RegisterLocalStatePrefs(registry); ash::HWDataUsageController::RegisterLocalStatePrefs(registry); ash::KerberosCredentialsManager::RegisterLocalStatePrefs(registry); ash::KioskController::RegisterLocalStatePrefs(registry); @@ -1603,6 +1543,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { policy::AdbSideloadingAllowanceModePolicyHandler::RegisterPrefs(registry); policy::BrowserPolicyConnectorAsh::RegisterPrefs(registry); policy::CrdAdminSessionController::RegisterLocalStatePrefs(registry); + policy::DeviceCommandQueryGeolocationJob::RegisterPrefs(registry); policy::DeviceCloudPolicyManagerAsh::RegisterPrefs(registry); policy::DeviceRestrictionScheduleController::RegisterLocalStatePrefs( registry); @@ -1668,9 +1609,9 @@ void RegisterLocalState(PrefRegistrySimple* registry) { screen_ai::RegisterLocalStatePrefs(registry); #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) PlatformAuthPolicyObserver::RegisterPrefs(registry); -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) // Platform-specific and compile-time conditional individual preferences. // If you have multiple preferences that should clearly be grouped together, @@ -1747,7 +1688,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, chrome_browser_net::NetErrorTabHelper::RegisterProfilePrefs(registry); chrome_prefs::RegisterProfilePrefs(registry); collaboration::prefs::RegisterProfilePrefs(registry); - contextual_cueing::prefs::RegisterProfilePrefs(registry); commerce::RegisterProfilePrefs(registry); contextual_search::ContextualSearchService::RegisterProfilePrefs(registry); registry->RegisterIntegerPref(prefs::kContextualTasksNextPanelOpenCount, 0); @@ -1758,7 +1698,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, enterprise_reporting::RegisterProfilePrefs(registry); dom_distiller::DistilledPagePrefs::RegisterProfilePrefs(registry); DownloadPrefs::RegisterProfilePrefs(registry); + finds::FindsService::RegisterProfilePrefs(registry); glic::prefs::RegisterProfilePrefs(registry); + glic::contextual_cueing::prefs::RegisterProfilePrefs(registry); permissions::PermissionHatsTriggerHelper::RegisterProfilePrefs(registry); history_clusters::prefs::RegisterProfilePrefs(registry); HostContentSettingsMap::RegisterProfilePrefs(registry); @@ -1868,6 +1810,11 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, extensions_ui_prefs::RegisterProfilePrefs(registry); ExtensionUrlOverrides::RegisterProfilePrefs(registry); update_client::RegisterProfilePrefs(registry); + +#if BUILDFLAG(IS_ANDROID) + registry->RegisterBooleanPref(prefs::kPinExtensionsMenuButton, true); +#endif + #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) #if BUILDFLAG(ENABLE_EXTENSIONS) @@ -1932,7 +1879,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, GoogleCalendarPageHandler::RegisterProfilePrefs(registry); HatsServiceDesktop::RegisterProfilePrefs(registry); lens::prefs::RegisterProfilePrefs(registry); - ManagementUI::RegisterProfilePrefs(registry); media_router::RegisterAccessCodeProfilePrefs(registry); media_router::RegisterProfilePrefs(registry); MicrosoftAuthPageHandler::RegisterProfilePrefs(registry); @@ -1940,7 +1886,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, NewTabFooterUI::RegisterProfilePrefs(registry); NewTabPageHandler::RegisterProfilePrefs(registry); NewTabPageUI::RegisterProfilePrefs(registry); - ntp::SafeBrowsingHandler::RegisterProfilePrefs(registry); OutlookCalendarPageHandler::RegisterProfilePrefs(registry); PinnedTabCodec::RegisterProfilePrefs(registry); promos_utils::RegisterProfilePrefs(registry); @@ -1953,13 +1898,16 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, MostRelevantTabResumptionPageHandler::RegisterProfilePrefs(registry); TabGroupsPageHandler::RegisterProfilePrefs(registry); tab_groups::saved_tab_groups::prefs::RegisterProfilePrefs(registry); - tab_organization_prefs::RegisterProfilePrefs(registry); tab_search_prefs::RegisterProfilePrefs(registry); ThemeColorPickerHandler::RegisterProfilePrefs(registry); ThemeService::RegisterProfilePrefs(registry); toolbar::RegisterProfilePrefs(registry); #endif // BUILDFLAG(IS_ANDROID) +#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_EXTENSIONS_CORE) + ManagementUI::RegisterProfilePrefs(registry); +#endif + #if BUILDFLAG(ENABLE_DEVTOOLS_FRONTEND) DevToolsWindow::RegisterProfilePrefs(registry); #endif // BUILDFLAG(ENABLE_DEVTOOLS_FRONTEND) @@ -2035,7 +1983,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, ash::HelpAppNotificationController::RegisterProfilePrefs(registry); ash::quick_unlock::FingerprintStorage::RegisterProfilePrefs(registry); ash::quick_unlock::PinStoragePrefs::RegisterProfilePrefs(registry); - ash::Preferences::RegisterProfilePrefs(registry); + ash::Preferences::RegisterProfilePrefs( + CHECK_DEREF(g_browser_process->local_state()), registry); ash::EnterprisePrintersProvider::RegisterProfilePrefs(registry); ash::parent_access::ParentAccessService::RegisterProfilePrefs(registry); quick_answers::prefs::RegisterProfilePrefs(registry); @@ -2162,6 +2111,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, prefs::kManagedLocalNetworkAccessRestrictionsTemporaryOptOut, false); #if BUILDFLAG(IS_ANDROID) + registry->RegisterBooleanPref( + prefs::kAppRatingPromptShown, false, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, false); #endif @@ -2270,31 +2222,11 @@ void MigrateObsoleteLocalStatePrefs(PrefService* local_state) { // BEGIN_MIGRATE_OBSOLETE_LOCAL_STATE_PREFS // Please don't delete the preceding line. It is used by PRESUBMIT.py. - // Added 02/2025. - local_state->ClearPref(kUserAgentClientHintsGREASEUpdateEnabled); - // Added 02/2025 #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) local_state->ClearPref(prefs::kDefaultBrowserPromptRefreshStudyGroup); #endif - // Added 02/2025 -#if BUILDFLAG(IS_ANDROID) - local_state->ClearPref(kRootSecretPrefName); -#endif // BUILDFLAG(IS_ANDROID) - - // Added 03/2025. -#if BUILDFLAG(IS_CHROMEOS) - local_state->ClearPref(kShouldRetrieveDeviceState); - local_state->ClearPref(kShouldAutoEnroll); - local_state->ClearPref(kAutoEnrollmentPowerLimit); -#endif - - // Added 03/2025. -#if BUILDFLAG(IS_CHROMEOS) - local_state->ClearPref(kDeviceRestrictionScheduleHighestSeenTime); -#endif - #if !BUILDFLAG(IS_ANDROID) local_state->ClearPref( kPerformanceInterventionNotificationAcceptHistoryDeprecated); @@ -2408,6 +2340,9 @@ void MigrateObsoleteLocalStatePrefs(PrefService* local_state) { local_state->ClearPref(kProfilesDeletedOld); } + // Added 03/2026. + local_state->ClearPref(kGlicMultiInstanceEnabledBySubscriptionTier); + // Please don't delete the following line. It is used by PRESUBMIT.py. // END_MIGRATE_OBSOLETE_LOCAL_STATE_PREFS @@ -2463,56 +2398,6 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, MigrateDefaultBrowserLastDeclinedPref(profile_prefs); #endif - // Added 01/2025. - profile_prefs->ClearPref(kCompactModeEnabled); - - // Added 01/2025. - profile_prefs->ClearPref(kSafeBrowsingAutomaticDeepScanPerformed); - profile_prefs->ClearPref(kSafeBrowsingAutomaticDeepScanningIPHSeen); - -#if BUILDFLAG(IS_CHROMEOS) - // Added 01/2025. - profile_prefs->ClearPref(kUsedPolicyCertificates); -#endif // BUILDFLAG(IS_CHROMEOS) - - // Added 02/2025. - profile_prefs->ClearPref(kDefaultSearchProviderKeywordsUseExtendedList); - -#if BUILDFLAG(IS_ANDROID) - // Added 02/2025. - profile_prefs->ClearPref(kLocalPasswordsMigrationWarningShownTimestamp); - profile_prefs->ClearPref(kLocalPasswordMigrationWarningShownAtStartup); -#endif // BUILDFLAG(IS_ANDROID) - -#if BUILDFLAG(IS_CHROMEOS) - // Deprecated 02/2025. - profile_prefs->ClearPref(kLiveCaptionUserMicrophoneEnabled); - profile_prefs->ClearPref(kUserMicrophoneCaptionLanguageCode); -#endif // BUILDFLAG(IS_CHROMEOS) - -#if BUILDFLAG(IS_CHROMEOS) - // Added 02/2025. - profile_prefs->ClearPref(kScannerFeedbackEnabled); - profile_prefs->ClearPref(kHmrFeedbackAllowed); - profile_prefs->ClearPref(kSharedStorage); -#endif // BUILDFLAG(IS_CHROMEOS) - - // Added 03/2025. - profile_prefs->ClearPref(kPasswordChangeFlowNoticeAgreement); - -#if !BUILDFLAG(IS_CHROMEOS) - // Added 03/2025. - profile_prefs->ClearPref(prefs::kChildAccountStatusKnown); -#endif - -#if BUILDFLAG(IS_CHROMEOS) - // Added 03/2025. - profile_prefs->ClearPref(kSunfishEnabled); -#endif - - // Added 03/2025. - profile_prefs->ClearPref(kRecurrentSSLInterstitial); - // Added 04/2025. profile_prefs->ClearPref(kDefaultSearchProviderChoiceScreenShuffleMilestone); @@ -2704,11 +2589,44 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, // Added 03/2026. profile_prefs->ClearPref(kTabDeclutterUsageCount); + // Added 03/2026. + profile_prefs->ClearPref(kTabSearchTabIndex); + #if !BUILDFLAG(IS_ANDROID) // Added 02/2026. tabs::MigrateTabSearchPref(profile_prefs); #endif // !BUILDFLAG(IS_ANDROID) + // Added 03/2026 + profile_prefs->ClearPref( + kSigninFromBookmarksBubbleSyntheticTrialGroupNamePref); + profile_prefs->ClearPref( + kBookmarksBubblePromoShownSyntheticTrialGroupNamePref); + + // Added 03/2026. + profile_prefs->ClearPref(kSafeBrowsingModuleShownCount); + profile_prefs->ClearPref(kSafeBrowsingModuleLastCooldownStartAt); + profile_prefs->ClearPref(kSafeBrowsingModuleOpened); + +#if BUILDFLAG(IS_ANDROID) + // Added 03/2026. + profile_prefs->ClearPref(kPrivacySandboxActivityTypeRecord2); +#endif // BUILDFLAG(IS_ANDROID) + + // Added 03/2026. + profile_prefs->ClearPref(kTabOrganizationNudgeBackoffCount); + profile_prefs->ClearPref(kTabOrganizationShowFRE); + profile_prefs->ClearPref(kTabOrganizationModelStrategy); + + // Added 03/2026. + profile_prefs->ClearPref(kNtpContextMenuClickCount); + + // Added 03/2026. + privacy_sandbox::ClearAdPrivacyPrefs(profile_prefs); + + // Added 03/2026. + profile_prefs->ClearPref(kNtpPromoPrefLastSnoozed); + // 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 6c3874b43..0854cc7f4 100755 --- a/tools/under-control/src/chrome/browser/ui/tab_helpers.cc +++ b/tools/under-control/src/chrome/browser/ui/tab_helpers.cc @@ -32,6 +32,7 @@ #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_features.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" @@ -66,6 +67,7 @@ #include "chrome/browser/profiles/profile_key.h" #include "chrome/browser/resource_coordinator/tab_helper.h" #include "chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager_factory.h" +#include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/sessions/session_tab_helper_factory.h" #include "chrome/browser/site_protection/site_protection_metrics_observer.h" #include "chrome/browser/ssl/chrome_security_blocking_page_factory.h" @@ -81,7 +83,6 @@ #include "chrome/browser/sync/sessions/sync_sessions_web_contents_router_factory.h" #include "chrome/browser/tab_contents/navigation_metrics_recorder.h" #include "chrome/browser/task_manager/web_contents_tags.h" -#include "chrome/browser/tpcd/metadata/devtools_observer.h" #include "chrome/browser/translate/chrome_translate_client.h" #include "chrome/browser/trusted_vault/trusted_vault_encryption_keys_tab_helper.h" #include "chrome/browser/ui/autofill/autofill_client_provider.h" @@ -142,6 +143,7 @@ #include "components/safe_browsing/content/browser/ui_manager.h" #include "components/safe_browsing/core/common/features.h" #include "components/search/ntp_features.h" +#include "components/signin/public/base/signin_buildflags.h" #include "components/site_engagement/content/site_engagement_helper.h" #include "components/site_engagement/content/site_engagement_service.h" #include "components/tabs/public/tab_interface.h" @@ -214,6 +216,7 @@ #include "chrome/browser/chromeos/policy/dlp/dlp_content_tab_helper.h" #include "chrome/browser/chromeos/printing/print_preview/printing_init_cros.h" #include "chrome/browser/ui/ash/google_one/google_one_offer_iph_tab_helper.h" +#include "chromeos/ash/experiences/isolated_web_app/cros_isolated_web_app_enabler.h" #endif #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ @@ -282,6 +285,12 @@ #include "components/safe_browsing/content/browser/safe_browsing_tab_observer.h" #endif +#if BUILDFLAG(ENABLE_DICE_SUPPORT) +#include "chrome/browser/contextual_tasks/search_ai_mode_promo_tab_helper.h" +#include "components/contextual_tasks/public/features.h" +#include "components/signin/public/base/signin_switches.h" +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) + using content::WebContents; namespace { @@ -581,6 +590,13 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { #endif // BUILDFLAG(SAFE_BROWSING_AVAILABLE) SafetyTipWebContentsObserver::CreateForWebContents(web_contents); SearchEngineTabHelper::CreateForWebContents(web_contents); +#if BUILDFLAG(ENABLE_DICE_SUPPORT) + if (base::FeatureList::IsEnabled(switches::kEnableSearchAIModeSigninPromo) && + base::FeatureList::IsEnabled(contextual_tasks::kContextualTasks)) { + contextual_tasks::SearchAiModePromoTabHelper::CreateForWebContents( + web_contents); + } +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) if (site_engagement::SiteEngagementService::IsEnabled()) { site_engagement::SiteEngagementService::Helper::CreateForWebContents( web_contents, @@ -603,8 +619,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { } #endif tasks::TaskTabHelper::CreateForWebContents(web_contents); - tpcd::metadata::TpcdMetadataDevtoolsObserver::CreateForWebContents( - web_contents); #if !BUILDFLAG(IS_ANDROID) TabCaptureContentsBorderHelper::CreateForWebContents(web_contents); #endif // BUILDFLAG(IS_ANDROID) @@ -636,9 +650,15 @@ 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(finds::features::kChromeFinds)) { + if (auto* finds_service = + finds::FindsServiceFactory::GetForProfile(profile)) { + finds::FindsTabHelper::CreateForWebContents( + web_contents, finds_service, + OptimizationGuideKeyedServiceFactory::GetForProfile(profile), + TemplateURLServiceFactory::GetForProfile(profile), + profile->GetPrefs()); + } } if (base::FeatureList::IsEnabled( @@ -715,6 +735,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ash::BootTimesRecorderTabHelper::MaybeCreateForWebContents(web_contents); CrosAppsTabHelper::MaybeCreateForWebContents(web_contents); + ash::CrosIsolatedWebAppEnabler::CreateForWebContents(web_contents); GeminiAppTabHelper::MaybeCreateForWebContents(web_contents); mahi::MahiTabHelper::MaybeCreateForWebContents(web_contents); policy::DlpContentTabHelper::MaybeCreateForWebContents(web_contents); diff --git a/tools/under-control/src/chrome/browser/ui/webui/chrome_content_browser_client_webui_part.cc b/tools/under-control/src/chrome/browser/ui/webui/chrome_content_browser_client_webui_part.cc index 045b28016..7e74a3ada 100755 --- a/tools/under-control/src/chrome/browser/ui/webui/chrome_content_browser_client_webui_part.cc +++ b/tools/under-control/src/chrome/browser/ui/webui/chrome_content_browser_client_webui_part.cc @@ -10,6 +10,7 @@ #include "components/prefs/pref_service.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_entry.h" +#include "content/public/browser/security_principal.h" #include "content/public/browser/web_contents.h" #include "extensions/common/constants.h" #include "third_party/blink/public/common/web_preferences/web_preferences.h" @@ -95,8 +96,9 @@ bool ChromeContentBrowserClientWebUiPart::OverrideWebPreferencesAfterNavigation( } // Extensions are handled by ChromeContentBrowserClientExtensionsPart. - const GURL& site_url = main_frame_site.GetSiteURL(); - if (site_url.SchemeIs(extensions::kExtensionScheme)) { + const content::SecurityPrincipal& security_principal = + main_frame_site.GetSecurityPrincipal(); + if (security_principal.SchemeIs(extensions::kExtensionScheme)) { return false; } diff --git a/tools/under-control/src/chrome/common/extensions/api/accessibility_service_private.idl b/tools/under-control/src/chrome/common/extensions/api/accessibility_service_private.idl deleted file mode 100755 index ef335e0e0..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/accessibility_service_private.idl +++ /dev/null @@ -1,30 +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. - -// API which provides support for ChromeOS Accessibility features in the -// browser. - -[platforms=("chromeos"), - implemented_in="chrome/browser/chromeos/extensions/accessibility_service_private/accessibility_service_private.h"] - -namespace accessibilityServicePrivate { - callback VoidCallback = void(); - - interface Functions { - // Called when Select to Speak in ChromeOS should speak the current - // text selection; fired when the context menu option was clicked in - // a selection context. - static void speakSelectedText( - optional VoidCallback callback); - }; - - interface Events { - // Called when Select to Speak in ChromeOS wants a clipboard copy - // event to be performed on the active and focused tab with the - // given URL. This is fired when Select to Speak is trying to speak - // with search+s but cannot find a selection and the focused node - // is in a Google Docs page. - static void clipboardCopyInActiveGoogleDoc(DOMString url); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/appview_tag.idl b/tools/under-control/src/chrome/common/extensions/api/appview_tag.idl deleted file mode 100755 index faf48fdaa..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/appview_tag.idl +++ /dev/null @@ -1,46 +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 appview tag to embed other Chrome Apps within your -// Chrome App. (see Usage). -namespace appviewTag { - // This object specifies details and operations to perform on the embedding - // request. The app to be embedded can make a decision on whether or not to - // allow the embedding and what to embed based on the embedder making the - // request. - dictionary EmbedRequest { - // The ID of the app that sent the embedding request. - DOMString embedderId; - - // Optional developer specified data that the app to be embedded can use - // when making an embedding decision. - object data; - - // Allows the embedding request. - // - // |url| : Specifies the content to be embedded. - static void allow(DOMString url); - - // Prevents the embedding request. - static void deny(); - }; - - // An optional function that's called after the embedding request is - // completed. - // - // |success| : True if the embedding request succeded. - callback EmbeddingCallback = void (boolean success); - - interface Functions { - // Requests another app to be embedded. - // - // |app| : The extension id of the app to be embedded. - // |data| : Optional developer specified data that the app to be embedded - // can use when making an embedding decision. - // |callback| : An optional function that's called after the embedding - // request is completed. - static void connect(DOMString app, optional any data, - optional EmbeddingCallback callback); - }; -}; 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 0a8d0f325..63fe89d39 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 @@ -155,17 +155,12 @@ namespace autofillPrivate { FLIGHT_RESERVATION_TICKET_NUMBER, FLIGHT_RESERVATION_CONFIRMATION_CODE, FLIGHT_RESERVATION_PASSENGER_NAME, - FLIGHT_RESERVATION_DEPARTURE_AIRPORT, - 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, + SHIPMENT_TRACKING_NUMBER, MAX_VALID_FIELD_TYPE }; @@ -445,6 +440,9 @@ namespace autofillPrivate { DOMString entityInstanceSubLabel; // Whether the entity is stored on Google Wallet servers. boolean storedInWallet; + // If the entity is `storedInWallet`, this string contains the URL to the + // management page of the pass on the Wallet website. + DOMString? walletEntityUrl; }; // A Pay Over Time Issuer entry which can be displayed in the autofill diff --git a/tools/under-control/src/chrome/common/extensions/api/autotest_private.idl b/tools/under-control/src/chrome/common/extensions/api/autotest_private.idl deleted file mode 100755 index ee303f5e6..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/autotest_private.idl +++ /dev/null @@ -1,1635 +0,0 @@ -// Copyright 2012 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// API for integration testing. To be used on test images with a test component -// extension. -[platforms=("chromeos"), - implemented_in="chrome/browser/ash/extensions/autotest_private/autotest_private_api.h"] -namespace autotestPrivate { - - enum ShelfAlignmentType { - // BottomLocked not supported by shelf_prefs. - Bottom, Left, Right - }; - - // A mapping of ash::ShelfItemType. - enum ShelfItemType { - PinnedApp, - BrowserShortcut, - App, - UnpinnedBrowserShortcut, - Dialog - }; - - // A mapping of ash::ShelfItemStatus. - enum ShelfItemStatus { - Closed, - Running, - Attention - }; - - // A mapping of apps::mojom::Type - enum AppType { - Arc, - Crostini, - Extension, - Web, - MacOS, - PluginVm, - StandaloneBrowser, - Remote, - Borealis, - Bruschetta - }; - - // A mapping of apps::mojom::InstallSource - enum AppInstallSource { - Unknown, - System, - Policy, - Oem, - Default, - Sync, - User, - SubApp, - Kiosk, - CommandLine - }; - - // A mapping of apps::mojom::Readiness - enum AppReadiness { - Ready, - DisabledByBlacklist, - DisabledByPolicy, - DisabledByUser, - Terminated, - UninstalledByUser, - Removed, - UninstalledByMigration, - DisabledByLocalSettings - }; - - // A mapping of arc::mojom::WakefulnessMode - enum WakefulnessMode { - Unknown, - Asleep, - Awake, - Dreaming, - Dozing - }; - callback WakefulnessModeCallback = void (WakefulnessMode mode); - - // A subset of Window State types in ash::WindowStateType. We may add more - // into the set in the future. - enum WindowStateType { - Normal, - Minimized, - Maximized, - Fullscreen, - PrimarySnapped, - SecondarySnapped, - Pinned, - TrustedPinned, - PIP, - Floated - }; - - // A subset of WM event types in ash::WMEventType. We may add more in the - // set in the future. - enum WMEventType { - WMEventNormal, - WMEventMaximize, - WMEventMinimize, - WMEventFullscreen, - WMEventSnapPrimary, - WMEventSnapSecondary, - WMEventFloat - }; - - // Display orientation type. - enum RotationType { - // RotateAny is the auto-rotation status (not locked to a rotation) for - // tablet mode. Not working in clamshell mode. - RotateAny, - Rotate0, - Rotate90, - Rotate180, - Rotate270 - }; - - enum LauncherStateType { - Closed, - FullscreenAllApps, - FullscreenSearch - }; - - enum OverviewStateType { - Shown, - Hidden - }; - - enum MouseButton { - Left, - Middle, - Right, - Back, - Forward - }; - - // A paramter used in setArcAppWindowState() function. - dictionary WindowStateChangeDict { - // The WM event to change the ARC window state. - WMEventType eventType; - - // If the initial state is already same as the expected state, should we - // treat this case as a failure? Default value is false. - boolean? failIfNoChange; - }; - - dictionary LoginStatusDict { - // Are we logged in? - boolean isLoggedIn; - // Is the logged-in user the owner? - boolean isOwner; - // Is the screen locked? - boolean isScreenLocked; - // Is the wallpaper blur layer still animating in? - boolean isLockscreenWallpaperAnimating; - // Is the screen ready for password? - boolean isReadyForPassword; - // Are the avatar images loaded for all users? - boolean areAllUserImagesLoaded; - - // Is the logged-in user a regular user? Set only if `isLoggedIn`. - boolean? isRegularUser; - // Are we logged into the guest account? Set only if `isLoggedIn`. - boolean? isGuest; - // Are we logged into kiosk-app mode? Set only if `isLoggedIn`. - boolean? isKiosk; - - // User email. Set only if `isLoggedIn`. - DOMString? email; - // User display email. Set only if `isLoggedIn`. - DOMString? displayEmail; - // User display name. Set only if `isLoggedIn`. - DOMString? displayName; - // User image: 'file', 'profile' or a number. Set only if `isLoggedIn`. - DOMString? userImage; - // Whether the user has a valid oauth2 token. Only set for gaia user. - boolean? hasValidOauth2Token; - }; - callback LoginStatusCallback = void (LoginStatusDict status); - - // |all_policies| will be the full list of policies as returned by the - // DictionaryPolicyConversions.ToValue function. - callback AllEnterprisePoliciesCallback = void (any all_policies); - - dictionary ExtensionInfoDict { - DOMString id; - DOMString version; - DOMString name; - DOMString publicKey; - DOMString description; - DOMString backgroundUrl; - DOMString optionsUrl; - - DOMString[] hostPermissions; - DOMString[] effectiveHostPermissions; - DOMString[] apiPermissions; - - boolean isComponent; - boolean isInternal; - boolean isUserInstalled; - boolean isEnabled; - boolean allowedInIncognito; - boolean hasPageAction; - }; - dictionary ExtensionsInfoArray { - ExtensionInfoDict[] extensions; - }; - callback ExtensionsInfoCallback = void (ExtensionsInfoArray info); - - dictionary Notification { - DOMString id; - DOMString type; - DOMString title; - DOMString message; - long priority; - long progress; - }; - callback NotificationArrayCallback = void (Notification[] notifications); - - dictionary Printer { - DOMString printerName; - DOMString? printerId; - DOMString? printerType; - DOMString? printerDesc; - DOMString? printerMakeAndModel; - DOMString? printerUri; - DOMString? printerPpd; - }; - callback PrinterArrayCallback = void (Printer[] printers); - - callback ArcStartTimeCallback = void (double startTicks); - - dictionary ArcState { - // Whether the ARC is provisioned. - boolean provisioned; - // Whether ARC Terms of Service needs to be shown. - boolean tosNeeded; - // ARC pre-start time (mini-ARC) or 0 if not pre-started. - double preStartTime; - // ARC start time or 0 if not started. - double startTime; - }; - callback ArcStateCallback = void (ArcState result); - - dictionary PlayStoreState { - // Whether the Play Store allowed for the current user. - boolean allowed; - // Whether the Play Store currently enabled. - boolean? enabled; - // Whether the Play Store managed by policy. - boolean? managed; - }; - callback PlayStoreStateCallback = void (PlayStoreState result); - - dictionary AssistantQueryResponse { - // Text response returned from server. - DOMString? text; - // HTML response returned from server. - DOMString? htmlResponse; - // Open URL response returned from server. - DOMString? openUrl; - // Open Android app response returned from server. - DOMString? openAppResponse; - }; - dictionary AssistantQueryStatus { - // Indicates whether this might be a voice interaction. - boolean isMicOpen; - // Query text sent to Assistant. In the event of a voice interaction, - // this field will be same as the speech recognition final result. - DOMString queryText; - // Response for the current query. - AssistantQueryResponse queryResponse; - }; - callback AssistantQueryStatusCallback = void (AssistantQueryStatus status); - - callback IsAppShownCallback = void (boolean appShown); - - callback IsArcProvisionedCallback = void (boolean arcProvisioned); - - callback IsArcPackageListInitialRefreshedCallback = void (boolean refreshed); - - dictionary ArcAppDict { - DOMString name; - DOMString packageName; - DOMString activity; - DOMString intentUri; - DOMString iconResourceId; - double lastLaunchTime; - double installTime; - boolean sticky; - boolean notificationsEnabled; - boolean ready; - boolean suspended; - boolean showInLauncher; - boolean shortcut; - boolean launchable; - }; - callback GetArcAppCallback = void (ArcAppDict package); - - dictionary ArcAppKillsDict { - double oom; - double lmkdForeground; - double lmkdPerceptible; - double lmkdCached; - double pressureForeground; - double pressurePerceptible; - double pressureCached; - }; - callback GetArcAppKillsCallback = void (ArcAppKillsDict counts); - - dictionary ArcPackageDict { - DOMString packageName; - long packageVersion; - DOMString lastBackupAndroidId; - double lastBackupTime; - boolean shouldSync; - boolean vpnProvider; - }; - callback GetArcPackageCallback = void (ArcPackageDict package); - - dictionary Location { - double x; - double y; - }; - - dictionary Bounds { - double left; - double top; - double width; - double height; - }; - - dictionary ArcAppTracingInfo { - boolean success; - double fps; - double perceivedFps; - double commitDeviation; - double presentDeviation; - double renderQuality; - double janksPerMinute; - double janksPercentage; - }; - - callback TakeScreenshotCallback = void (DOMString base64Png); - - callback GetPrimaryDisplayScaleFactorCallback = void (double scaleFactor); - - callback IsTabletModeEnabledCallback = void (boolean enabled); - - callback SetTabletModeEnabledCallback = void(boolean enabled); - - callback SetShelfIconPinCallback = void(DOMString[] results); - - callback SetOverviewModeStateCallback = void(boolean finished); - - enum ThemeStyle { - TonalSpot, - Vibrant, - Expressive, - Spritz, - Rainbow, - FruitSalad - }; - - callback SendArcOverlayColorCallback = void (boolean result); - - callback ArcAppTracingCallback = void(ArcAppTracingInfo info); - - callback WaitForDisplayRotationCallback = void (boolean success); - - callback InstallPWAForCurrentURLCallback = void (DOMString appId); - - dictionary App { - DOMString appId; - DOMString name; - DOMString shortName; - DOMString publisherId; - AppType? type; - AppInstallSource? installSource; - AppReadiness? readiness; - DOMString[] additionalSearchTerms; - boolean? showInLauncher; - boolean? showInSearch; - }; - - dictionary SystemWebApp { - // App's internal name. This isn't user-visible and should only be used - // for logging. - DOMString internalName; - - // App's install URL. This is a placeholder for installation pipeline, - // not used for anything else. - DOMString url; - - // App's visible name. This is defined in the Web App manifest, and shown - // in Shelf and Launcher. This matches App's name attribute (see above). - DOMString name; - - // App's default start_url. This is the default URL that the App will be - // launched to. - DOMString startUrl; - }; - - callback GetAllInstalledAppsCallback = void (App[] apps); - - dictionary ShelfItem { - DOMString appId; - DOMString launchId; - DOMString title; - ShelfItemType? type; - ShelfItemStatus status; - boolean showsTooltip; - boolean pinnedByPolicy; - boolean pinStateForcedByType; - boolean hasNotification; - }; - - // A mapping of ash::AppType. - enum AppWindowType { - Browser, - ChromeApp, - ArcApp, - CrostiniApp, - SystemApp, - ExtensionApp, - Lacros - }; - - // A mapping of HotseatState in ash/public/cpp/shelf_types.h. - enum HotseatState { - Hidden, - ShownClamShell, - ShownHomeLauncher, - Extended - }; - - // The frame mode of a window. None if the window is framesless. - enum FrameMode { - Normal, - Immersive - }; - - dictionary OverviewInfo { - // Bounds in screen of an OverviewItem. - Bounds bounds; - // Whether an OverviewItem is being dragged in overview. - boolean isDragged; - }; - - // Used to update an app's shelf pin state. - dictionary ShelfIconPinUpdateParam { - // The identifier of the target app. - DOMString appId; - - // The target pin state for the app. - boolean pinned; - }; - - dictionary AppWindowInfo { - // The identifier of the window. This shouldn't change across the time. - long id; - - // The name of the window object -- typically internal class name of the - // window (like 'BrowserWidget'). - DOMString name; - - AppWindowType windowType; - WindowStateType stateType; - - // The bounds of the window, in the coordinate of the root window (i.e. - // relative to the display where this window resides). - Bounds boundsInRoot; - - // The identifier of the display where this window resides. - DOMString displayId; - - boolean isVisible; - boolean canFocus; - - // The title of the window; this can be seen in the window caption, or in - // the overview mode. Typically, this provides the title of the webpage or - // the title supplied by the application. - DOMString title; - - // Whether some animation is ongoing on the window or not. - boolean isAnimating; - - // The final bounds of the window when the animation completes. This should - // be same as |boundsInRoot| when |isAnimating| is false. - Bounds targetBounds; - - // Whether or not the window is going to be visible after the animation - // completes. This should be same as |isVisible| when |isAnimating| is - // false. - boolean targetVisibility; - - // WM Releated states - boolean isActive; - boolean hasFocus; - boolean onActiveDesk; - boolean hasCapture; - boolean canResize; - - // Stacking order of the window in relation to its siblings. 0 indicates - // that the window is topmost. -1 if stacking info is not available - long stackingOrder; - - // Window frame info - FrameMode frameMode; - boolean isFrameVisible; - long captionHeight; - // The bitset of the enabled caption buttons. See - // ui/views/window/caption_button_types.h. - long captionButtonEnabledStatus; - // The bitset of the caption buttons which are visible on the frame. - long captionButtonVisibleStatus; - - DOMString? arcPackageName; - - OverviewInfo? overviewInfo; - - // The identifier of the app associated with the window that was launched - // from full restore. This should be same as |appId| when the window was - // restored from full restore, otherwise null. - DOMString? fullRestoreWindowAppId; - - // The identifier of the app associated with the window. - DOMString? appId; - }; - - dictionary Accelerator { - DOMString keyCode; - boolean shift; - boolean control; - boolean alt; - boolean search; - boolean pressed; - }; - - // Mapped to ScrollableShelfState in ash/public/cpp/shelf_ui_info.h. - // [deprecated="Use ShelfState"] - dictionary ScrollableShelfState { - double? scrollDistance; - }; - - // Mapped to ShelfState in ash/public/cpp/shelf_ui_info.h. - dictionary ShelfState { - double? scrollDistance; - }; - - // Mapped to ScrollableShelfInfo in ash/public/cpp/shelf_ui_info.h. - // |targetMainAxisOffset| is set when ShelfState used in query - // specifies the scroll distance. - dictionary ScrollableShelfInfo { - double mainAxisOffset; - double pageOffset; - double? targetMainAxisOffset; - Bounds leftArrowBounds; - Bounds rightArrowBounds; - boolean isAnimating; - boolean iconsUnderAnimation; - boolean isOverflow; - Bounds[] iconsBoundsInScreen; - boolean isShelfWidgetAnimating; - }; - - // Mapped to HotseatSwipeDescriptor in ash/public/cpp/shelf_ui_info.h. - dictionary HotseatSwipeDescriptor { - Location swipeStartLocation; - Location swipeEndLocation; - }; - - // Mapped to HotseatInfo in ash/public/cpp/shelf_ui_info.h. - dictionary HotseatInfo { - HotseatSwipeDescriptor swipeUp; - HotseatState state; - boolean isAnimating; - // Whether the shelf is hidden with auto-hide enabled. - boolean isAutoHidden; - }; - - // The ui information of shelf components, including hotseat and - // scrollable shelf. - dictionary ShelfUIInfo { - HotseatInfo hotseatInfo; - ScrollableShelfInfo scrollableShelfInfo; - }; - - // Information about all desks. - dictionary DesksInfo { - long activeDeskIndex; - long numDesks; - boolean isAnimating; - DOMString[] deskContainers; - }; - - // Information about launcher's search box. - dictionary LauncherSearchBoxState { - DOMString ghostText; - }; - - callback GetShelfItemsCallback = void (ShelfItem[] items); - - callback GetDefaultPinnedAppIdsCallback = void (DOMString[] items); - - callback GetShelfAutoHideBehaviorCallback = void (DOMString behavior); - - callback GetLauncherSearchBoxStateCallback = void ( - LauncherSearchBoxState state); - - callback GetShelfAlignmentCallback = void (ShelfAlignmentType alignment); - - callback WindowStateCallback = void (WindowStateType currentType); - - callback VoidCallback = void (); - - callback DOMStringCallback = void (DOMString data); - - callback GetAppWindowListCallback = void (AppWindowInfo[] window_list); - - callback AcceleratorCallback = void (boolean success); - - callback DesksCallback = void (boolean success); - - callback GetDeskCountCallback = void (long count); - - callback GetDesksInfoCallback = void (DesksInfo desks); - - callback GetScrollableShelfInfoForStateCallback = void ( - ScrollableShelfInfo info); - - callback GetShelfUIInfoForStateCallback = void (ShelfUIInfo info); - - // Frame counting record for one frame sink/compositor. - dictionary FrameCountingPerSinkData { - // Type of the frame sink. This corresponds to CompositorFrameSinkType. - DOMString sinkType; - // Whether the frame sink is the root. - boolean isRoot; - // Debug label of the frame sink. - DOMString debugLabel; - - // Number of presented frames grouped using `bucketSizeInSeconds` arg in - // startFrameCounting call. It would be fps if the `bucketSizeInSeconds` is - // 1s. - long[] presentedFrames; - }; - - callback StopFrameCountingCallback = void (FrameCountingPerSinkData[] data); - - dictionary OverdrawData { - // Average overdraw as percentage of the display size grouped by - // `bucketSizeInSeconds` arg of `startOverdrawTracking` call. - double[] averageOverdraws; - }; - - callback StopOverdrawTrackingCallback = void (OverdrawData data); - - // Result of calling setWindowBounds, which returns the actual bounds and - // display the window was set to. This may be different than the requested - // bounds and display, for example if the window is showing an ARC app and - // Android modifies the bounds request. Further, this result may never be - // returned in some situations (e.g. Android ignoring a bounds request), - // causing a timeout. - dictionary SetWindowBoundsResult { - // Bounds of the window. - Bounds bounds; - // Display ID of the display the window is on. - DOMString displayId; - }; - callback WindowBoundsCallback = void (SetWindowBoundsResult result); - - // Collected DisplaySmoothness data between startSmoothnessTracking and - // stopSmoothnessTracking calls. - dictionary DisplaySmoothnessData { - // Number of frames expected to be shown for this animation. - long framesExpected; - // Number of frames actually shown for this animation. - long framesProduced; - // Number of janks during this animation. A jank is counted when the current - // frame latency is larger than previous ones. - long jankCount; - // Display throughput percentage at fixed intervals. - long[] throughput; - // The timestamps of the janks during this animation in milllisecond. - long[] jankTimestamps; - // The durations of the janks during this animation in millisecond. - long[] jankDurations; - }; - - // Callback invoked to report the smoothness after StopSmoothnessTracking is - // called. - callback StopSmoothnessTrackingCallback = void - (DisplaySmoothnessData data); - - // Collected ui::ThroughputTracker data for one animation. It is based on - // cc::FrameSequenceMetrics::ThroughputData. - dictionary ThroughputTrackerAnimationData { - // Animation start time in milliseconds, relative to when - // `startThroughputTrackerDataCollection` is called. - long startOffsetMs; - // Animation stop time in milliseconds, relative to when - // `startThroughputTrackerDataCollection` is called. - long stopOffsetMs; - // Number of frames expected to be shown for this animation. - long framesExpected; - // Number of frames actually shown for this animation. - long framesProduced; - // Number of janks during this animation. A jank is counted when the current - // frame latency is larger than previous ones. - long jankCount; - }; - - // Callback invoked to report the collection ui::ThroughputTracker data - // after stopThroughputTrackerDataCollection is called. - callback StopThroughputTrackerDataCollectionCallback = void - (ThroughputTrackerAnimationData[] data); - - // Callback invoked to report the currently collected ui::ThroughputTracker - // animation data. Note that the data reported is removed to avoid reporting - // duplicated data. - callback GetThroughtputTrackerDataCallback = void - (ThroughputTrackerAnimationData[] data); - - // Callback invoked to report the number of system web apps that should be - // installed. - callback GetRegisteredSystemWebAppsCallback = void - (SystemWebApp[] systemWebApps); - - callback IsSystemWebAppOpenCallback = void (boolean isOpen); - - // Callback invoked to return the smoothness percentage after - // getDisplaySmoothness is called. - callback GetDisplaySmoothnessCallback = void (long smoothness); - - // Options for resetting the holding space. - dictionary ResetHoldingSpaceOptions { - // Whether to call `ash::holding_space_prefs::MarkTimeOfFirstAdd()` after - // reset. Used to show the holding space tray in tests, since it's otherwise - // hidden after OOBE. - boolean markTimeOfFirstAdd; - }; - - callback CouldAllowCrostiniCallback = void (boolean canBeAllowed); - - // Collected ash::LoginEventRecorder data. - dictionary LoginEventRecorderData { - // Event name - DOMString name; - // Number of frames actually shown for this animation. - double microsecnods_since_unix_epoch; - }; - - // Callback invoked to report the collection ui::LoginEventRecorder data - // after getLoginEventRecorderLoginEvents is called. - callback GetLoginEventRecorderLoginEventsCallback = void - (LoginEventRecorderData[] data); - - // Request parameters for getAccessToken. - dictionary GetAccessTokenParams { - // An email associated with the account to get a token for. - DOMString email; - // A list of OAuth scopes to request. - DOMString[] scopes; - // An optional timeout in milliseconds for the request. - // Default: 90 seconds - long? timeoutMs; - }; - - // Response data for getAccessToken. - dictionary GetAccessTokenData { - // The access token - DOMString accessToken; - // The time the access token will expire as a unix timestamp in - // milliseconds. - DOMString expirationTimeUnixMs; - }; - - // Reponse callback for getAccessToken. - callback GetAccessTokenCallback = void(GetAccessTokenData data); - - // Callback invoked to report whether the current input method is ready to - // accept key events from the test. - callback IsInputMethodReadyForTestingCallback = void - (boolean isReady); - - // Response data for makeFuseboxTempDir. - dictionary MakeFuseboxTempDirData { - DOMString fuseboxFilePath; - DOMString underlyingFilePath; - }; - - // Callback invoked when the temporary directory was made. - callback MakeFuseboxTempDirCallback = void(MakeFuseboxTempDirData data); - - // Callback invoked when the temporary directory was removed. - callback RemoveFuseboxTempDirCallback = void(); - - callback IsFeatureEnabledCallback = void(boolean enabled); - - // Response data for getCurrentInputMethodDescriptor. - // Add more fields from ash/input_method/InputMethodDescriptor as needed. - dictionary GetCurrentInputMethodDescriptorData { - DOMString keyboardLayout; - }; - - // Response callback for current input method keyboard layout. - callback GetCurrentInputMethodDescriptorCallback = void - (GetCurrentInputMethodDescriptorData data); - - // Response callback to report if a field trial exists and has been activated. - callback IsFieldTrialActiveCallback = void(boolean active); - - callback OverrideLobsterResponseForTestingCallback = void(boolean success); - - // Request data containing the mock responses from - // overrideOrcaResponseForTesting. - dictionary OrcaResponseArray { - DOMString[] responses; - }; - - callback OverrideOrcaResponseForTestingCallback = void(boolean success); - - // Request data containing the mock responses from - // overrideScannerResponsesForTesting. - dictionary ScannerResponseArray { - DOMString[] responses; - }; - - callback OverrideScannerResponsesForTestingCallback = void(boolean success); - - interface Functions { - // Must be called to allow autotestPrivateAPI events to be fired. - static void initializeEvents(); - - // Logout of a user session. - static void logout(); - - // Restart the browser. - static void restart(); - - // Shutdown the browser. - // |force|: if set, ignore ongoing downloads and onunbeforeunload handlers. - static void shutdown(boolean force); - - // Get login status. - static void loginStatus(LoginStatusCallback callback); - - // Waits for the post login animation to be complete and then triggers the - // callback. - static void waitForLoginAnimationEnd(VoidCallback callback); - - // Locks the screen. - static void lockScreen(); - - // Get info about installed extensions. - static void getExtensionsInfo( - ExtensionsInfoCallback callback); - - // Get state of the policies. - // Will contain device policies and policies from the active profile. - // The policy values are formatted as they would be for exporting in - // chrome://policy. - static void getAllEnterprisePolicies( - AllEnterprisePoliciesCallback callback); - - // Refreshes the Enterprise Policies. - static void refreshEnterprisePolicies( - VoidCallback callback); - - // Refreshes the remote commands. - static void refreshRemoteCommands(VoidCallback callback); - - // Simulates a memory access bug for asan testing. - static void simulateAsanMemoryBug(); - - // Set the touchpad pointer sensitivity setting. - // |value|: the pointer sensitivity setting index. - static void setTouchpadSensitivity(long value); - - // Turn on/off tap-to-click for the touchpad. - // |enabled|: if set, enable tap-to-click. - static void setTapToClick(boolean enabled); - - // Turn on/off three finger click for the touchpad. - // |enabled|: if set, enable three finger click. - static void setThreeFingerClick(boolean enabled); - - // Turn on/off tap dragging for the touchpad. - // |enabled|: if set, enable tap dragging. - static void setTapDragging(boolean enabled); - - // Turn on/off Australian scrolling for devices other than wheel mouse. - // |enabled|: if set, enable Australian scrolling. - static void setNaturalScroll(boolean enabled); - - // Set the mouse pointer sensitivity setting. - // |value|: the pointer sensitivity setting index. - static void setMouseSensitivity(long value); - - // Swap the primary mouse button for left click. - // |right|: if set, swap the primary mouse button. - static void setPrimaryButtonRight(boolean right); - - // Turn on/off reverse scrolling for mice. - // |enabled|: if set, enable reverse scrolling. - static void setMouseReverseScroll(boolean enabled); - - // Get visible notifications on the system. - static void getVisibleNotifications( - NotificationArrayCallback callback); - - // Remove all notifications. - static void removeAllNotifications( - VoidCallback callback); - - // Get ARC start time in ticks. - static void getArcStartTime( - ArcStartTimeCallback callback); - - // Get state of the ARC session. - static void getArcState( - ArcStateCallback callback); - - // Get state of the Play Store. - static void getPlayStoreState( - PlayStoreStateCallback callback); - - // Get list of available printers - static void getPrinterList( - PrinterArrayCallback callback); - - // Returns true if requested app is shown in Chrome. - static void isAppShown( - DOMString appId, - IsAppShownCallback callback); - - // Returns true if ARC is provisioned. - // [deprecated="Use getArcState()"] - static void isArcProvisioned( - IsArcProvisionedCallback callback); - - // Gets information about the requested ARC app. - static void getArcApp( - DOMString appId, - GetArcAppCallback callback); - - // Gets counts of how many ARC apps have been killed, by priority. - static void getArcAppKills( - GetArcAppKillsCallback callback); - - // Gets information about requested ARC package. - static void getArcPackage( - DOMString packageName, - GetArcPackageCallback callback); - - // Waits for system web apps to complete the installation. - static void waitForSystemWebAppsInstall( - VoidCallback callback); - - // Gets all the default pinned shelf app IDs, these may not be installed. - static void getDefaultPinnedAppIds( - GetDefaultPinnedAppIdsCallback callback); - - // Returns the number of system web apps that should be installed. - static void getRegisteredSystemWebApps( - GetRegisteredSystemWebAppsCallback callback); - - // Returns whether the system web app is currently open or not. - static void isSystemWebAppOpen( - DOMString appId, - IsSystemWebAppOpenCallback callback); - - // Launches an application from the launcher with the given appId. - static void launchApp( - DOMString appId, - VoidCallback callback); - - // Launches an system web app from the launcher with the given app name and - // url. - static void launchSystemWebApp( - DOMString appName, - DOMString url, - VoidCallback callback); - - // Launches Files app directly to absolutePath, if the path does not - // exist, it will launch to the default opening location (i.e. MyFiles). - // If the supplied path is a file (and it exists) it will open Files app - // to the parent folder instead. - static void launchFilesAppToPath( - DOMString absolutePath, - VoidCallback callback); - - // Closes an application the given appId in case it was running. - static void closeApp( - DOMString appId, - VoidCallback callback); - - // Update printer. Printer with empty ID is considered new. - static void updatePrinter(Printer printer); - - // Remove printer. - static void removePrinter(DOMString printerId); - - // Enable/disable the Play Store. - // |enabled|: if set, enable the Play Store. - // |callback|: Called when the operation has completed. - static void setPlayStoreEnabled( - boolean enabled, - VoidCallback callback); - - // Get text from ui::Clipboard. - // |callback|: Called with result. - static void getClipboardTextData( - DOMStringCallback callback); - - // Set text in ui::Clipbaord. - // |callback|: Called when operation is complete. - static void setClipboardTextData( - DOMString data, - VoidCallback callback); - - // Run the crostini installer GUI to install the default crostini - // vm / container and create sshfs mount. The installer launches the - // crostini terminal app on completion. The installer expects that - // crostini is not already installed. - // |callback|: Called when the operation has completed. - static void runCrostiniInstaller(VoidCallback callback); - - // Run the crostini uninstaller GUI to remove the default crostini - // vm / container. The callback is invoked upon completion. - static void runCrostiniUninstaller( - VoidCallback callback); - - // Enable/disable Crostini in preferences. - // |enabled|: Enable Crostini. - // |callback|: Called when the operation has completed. - static void setCrostiniEnabled( - boolean enabled, - VoidCallback callback); - - // Export the crostini container. - // |path|: The path in Downloads to save the export. - // |callback|: Called when the operation has completed. - static void exportCrostini( - DOMString path, - VoidCallback callback); - - // Import the crostini container. - // |path|: The path in Downloads to read the import. - // |callback|: Called when the operation has completed. - static void importCrostini( - DOMString path, - VoidCallback callback); - - // Returns whether crostini could ever be allowed. - // |callback|: Called with a boolean indicating if crostini can ever be - // allowed in the current profile. - static void couldAllowCrostini( - CouldAllowCrostiniCallback callback); - - // Sets mock Plugin VM policy. - // |imageUrl|: URL to the image to install. - // |imageHash|: Hash for the provided image. - // |licenseKey|: License key for Plugin VM. - static void setPluginVMPolicy(DOMString imageUrl, - DOMString imageHash, - DOMString licenseKey); - - // Shows the Plugin VM installer. Does not start installation. - static void showPluginVMInstaller(); - - // Installs Borealis without showing the normal installer UI. - // |callback|: Called when the operation has completed. - static void installBorealis(VoidCallback callback); - - // Register a component with ComponentManagerAsh. - // |name|: The name of the component. - // |path|: Path to the component. - static void registerComponent(DOMString name, DOMString path); - - // Takes a screenshot and returns the data in base64 encoded PNG format. - static void takeScreenshot( - TakeScreenshotCallback callback); - - // Tasks a screenshot for a display. - // |display_id|: the display id of the display. - // |callback|: called when the operation has completed. - static void takeScreenshotForDisplay( - DOMString display_id, - TakeScreenshotCallback callback); - - // Triggers an on-demand update of smart dim component and checks whether - // it's successfully loaded by smart dim ml_agent. - // |callback|: Called when the operation has completed. - static void loadSmartDimComponent(VoidCallback callback); - - // Whether the local list of installed ARC packages has been refreshed for - // the first time after user login. - static void isArcPackageListInitialRefreshed( - IsArcPackageListInitialRefreshedCallback callback); - - // Set value for the specified user pref in the pref tree. - static void setAllowedPref( - DOMString pref_name, - any value, - VoidCallback callback); - - // Clears value for the specified user pref in the pref tree. - static void clearAllowedPref( - DOMString pref_name, - VoidCallback callback); - - // DEPRECATED: use SetAllowedPref instead, see crbug/1262034 - // Set value for the specified user pref in the pref tree. - static void setWhitelistedPref( - DOMString pref_name, - any value, - VoidCallback callback); - - // Enable/disable a Crostini app's "scaled" property. - // |appId|: The Crostini application ID. - // |scaled|: The app is "scaled" when shown, which means it uses low display - // density. - // |callback|: Called when the operation has completed. - static void setCrostiniAppScaled( - DOMString appId, - boolean scaled, - VoidCallback callback); - - // Get the primary display scale factor. - // |callback| is invoked with the scale factor. - static void getPrimaryDisplayScaleFactor( - GetPrimaryDisplayScaleFactorCallback callback); - - // Get the tablet mode enabled status. - // |callback| is invoked with the tablet mode enablement status. - static void isTabletModeEnabled( - IsTabletModeEnabledCallback callback); - - // Enable/disable tablet mode. After calling this function, it won't be - // possible to physically switch to/from tablet mode since that - // functionality will be disabled. - // |enabled|: if set, enable tablet mode. - // |callback|: Called when the operation has completed. - static void setTabletModeEnabled( - boolean enabled, - SetTabletModeEnabledCallback callback); - - // Get the list of all installed applications - static void getAllInstalledApps( - GetAllInstalledAppsCallback callback); - - // Get the list of all shelf items - static void getShelfItems( - GetShelfItemsCallback callback); - - // Get the launcher search box search state. - static void getLauncherSearchBoxState( - GetLauncherSearchBoxStateCallback callback); - - // Get the shelf auto hide behavior. - // |displayId|: display that contains the shelf. - // |callback| is invoked with the shelf auto hide behavior. Possible - // behavior values are: "always", "never" or "hidden". - static void getShelfAutoHideBehavior( - DOMString displayId, - GetShelfAutoHideBehaviorCallback callback); - - // Set the shelf auto hide behavior. - // |displayId|: display that contains the shelf. - // |behavior|: an enum of "always", "never" or "hidden". - // |callback|: Called when the operation has completed. - static void setShelfAutoHideBehavior( - DOMString displayId, - DOMString behavior, - VoidCallback callback); - - // Get the shelf alignment. - // |displayId|: display that contains the shelf. - // |callback| is invoked with the shelf alignment type. - static void getShelfAlignment( - DOMString displayId, - GetShelfAlignmentCallback callback); - - // Set the shelf alignment. - // |displayId|: display that contains the shelf. - // |alignment|: the type of alignment to set. - // |callback|: Called when the operation has completed. - static void setShelfAlignment( - DOMString displayId, - ShelfAlignmentType alignment, - VoidCallback callback); - - // Create a pin on shelf for the app specified by |appId|. - // Deprecated. Use setShelfIconPin() instead. - static void pinShelfIcon( - DOMString appId, - VoidCallback callback); - - // Update pin states of the shelf apps based on |updateParams|. Return a - // list of app ids whose pin state changed. Pin states will not be changed - // if the method fails. - static void setShelfIconPin( - ShelfIconPinUpdateParam[] updateParams, - optional SetShelfIconPinCallback callback); - - // Enter or exit the overview mode. - // |start|: whether entering to or exiting from the overview mode. - // |callback|: called after the overview mode switch finishes. - static void setOverviewModeState( - boolean start, - SetOverviewModeStateCallback callback); - - // Show virtual keyboard of the current input method if it's available. - static void showVirtualKeyboardIfEnabled(); - - // Sends the overlay color and theme to Android and changes the Android system color and theme to these values. - // |color|: the int color of the system ui. - // |theme|: the theme of the system ui. - // |callback|: callback to deliver sendArcOverlayColor result. - static void sendArcOverlayColor( - long color, ThemeStyle theme, SendArcOverlayColorCallback callback); - - // Start ARC performance tracing for the active ARC app window. - // |callback|: Called when the operation has completed. - static void arcAppTracingStart(VoidCallback callback); - - // Stop ARC performance tracing if it was started and analyze results. - // |callback|: callback to deliver tracing results. - static void arcAppTracingStopAndAnalyze( - ArcAppTracingCallback callback); - - // Swap the windows in the split view. - // |callback|: Called when the operation has completed. - static void swapWindowsInSplitView( - VoidCallback callback); - - // Set ARC app window focused. - // |packageName|: the package name of the ARC app window. - // |callback|: called when the operation has completed. - static void setArcAppWindowFocus( - DOMString packageName, - VoidCallback callback); - - // Invokes the callback when the display rotation animation is finished, or - // invokes it immediately if it is not animating. The callback argument - // is true if the display's rotation is same as |rotation|, or false otherwise. - // |displayId|: display that contains the shelf. - // |rotation|: the target rotation. - // |callback|: called when the operation has completed. - static void waitForDisplayRotation( - DOMString displayId, - RotationType rotation, - WaitForDisplayRotationCallback callback); - - // Get information on all application windows. Callback will be called - // with the list of |AppWindowInfo| dictionary. - // |callback|: called with window list. - static void getAppWindowList( - GetAppWindowListCallback callback); - - // Send WM event to change the app window's window state. - // |id|: the id of the window - // |change|: WM event type to send to the app window. - // |wait|: whether the method should wait for the window state to change before returning. - // |callback|: called when the window state is changed if |wait| is true. - // Otherwise, called right after the WM event is sent. - static void setAppWindowState( - long id, - WindowStateChangeDict change, - optional boolean wait, - WindowStateCallback callback); - - // Activate app window given by "id". - // |id|: the id of the window - // |callback|: called when the window is requested to activate. - static void activateAppWindow( - long id, - VoidCallback callback); - - // Closes an app window given by "id". - // |id|: the id of the window - // |callback|: called when the window is requested to close. - static void closeAppWindow( - long id, - VoidCallback callback); - - // Installs the Progressive Web App (PWA) that is in the current URL. - // |timeout_ms|: Timeout in milliseconds for the operation to complete. - // |callback|: called when the operation has completed. Passes the app Id - // of the recently installed PWA as argument. - static void installPWAForCurrentURL( - long timeout_ms, - InstallPWAForCurrentURLCallback callback); - - // Activates shortcut. - // |accelerator|: the accelerator to activate. - // |callback|: called when the operation has completed. - static void activateAccelerator( - Accelerator accelerator, - AcceleratorCallback callback); - - // Wwait until the launcher is transitionto the |launcherState|, if it's not - // in that state. - // |launcherState|: the target launcher state. - // |callback|: called when the operation has completed. - static void waitForLauncherState( - LauncherStateType launcherState, - VoidCallback callback); - - // Wait until overview has transitioned to |overviewState|, if it is not in - // that state. - // |overviewState|: the target overview state. - // |callback|: called when overview has reached |overviewState|. - static void waitForOverviewState( - OverviewStateType overviewState, - VoidCallback callback); - - // Creates a new desk if the maximum number of desks has not been reached. - // |callback|: called to indicate success or failure. - static void createNewDesk(DesksCallback callback); - - // Activates the desk at the given |index| triggering the activate-desk - // animation. - // |index|: the zero-based index of the desk desired to be activated. - // |callback|: called indicating success when the animation completes, or - // failure when the desk at |index| is already the active desk. - static void activateDeskAtIndex( - long index, - DesksCallback callback); - - // Removes the currently active desk and triggers the remove-desk animation. - // |callback|: called indicating success when the animation completes, or - // failure if the currently active desk is the last available desk which - // cannot be removed. - static void removeActiveDesk(DesksCallback callback); - - // Activates the desk at the given |index| by chaining multiple - // activate-desk animations. - // |index|: the zero-based index of the desk desired to be activated. - // |callback|: called indicating success when the animation completes, or - // failure when the desk at |index| is already the active desk. - static void activateAdjacentDesksToTargetIndex( - long index, - DesksCallback callback); - - // Fetches the number of open desks in the `DesksController` at the time of - // call. - // `callback`: callback that is passed the number of open desks. - static void getDeskCount( - GetDeskCountCallback callback); - - // Fetches info about the open desks at the time of the call. - // `callback`: callback that is passed desks information. - static void getDesksInfo( - GetDesksInfoCallback callback); - - // Create mouse events to cause a mouse click. - // |button|: the mouse button for the click event. - // |callback|: called after the mouse click finishes. - static void mouseClick( - MouseButton button, - VoidCallback callback); - - // Create a mouse event to cause mouse pressing. The mouse button stays - // in the pressed state. - // |button|: the mouse button to be pressed. - // |callback|: called after the mouse pressed event is handled. - static void mousePress( - MouseButton button, - VoidCallback callback); - - // Create a mouse event to release a mouse button. This does nothing and - // returns immediately if the specified button is not pressed. - // |button|: the mouse button to be released. - // |callback|: called after the mouse is released. - static void mouseRelease( - MouseButton button, - VoidCallback callback); - - // Create mouse events to move a mouse cursor to the location. This can - // cause a dragging if a button is pressed. It starts from the last mouse - // location. - // |location|: the target location (in screen coordinate). - // |duration_in_ms|: the duration (in milliseconds) for the mouse movement. - // The mouse will move linearly. 0 means moving immediately. - // |callback|: called after the mouse move finishes. - static void mouseMove( - Location location, - double duration_in_ms, - VoidCallback callback); - - // Enable/disable metrics reporting in preferences. - // |enabled|: Enable metrics reporting. - // |callback|: Called when the operation has completed. - static void setMetricsEnabled( - boolean enabled, - VoidCallback callback); - - // Sends ARC touch mode enabled or disabled. - // |enable|: whether enabled touch mode. - // |callback|: called when action performed. - static void setArcTouchMode( - boolean enabled, - VoidCallback callback); - - // Fetches ui information of scrollable shelf view for the given shelf - // state. This function does not change scrollable shelf. - // [deprecated="Use getShelfUIInfoForState()"] - static void getScrollableShelfInfoForState( - ScrollableShelfState state, - GetScrollableShelfInfoForStateCallback callback); - - // Fetches UI information of shelf (including scrollable shelf and hotseat) - // for the given shelf state. This function does not change any shelf - // component. - static void getShelfUIInfoForState( - ShelfState state, - GetShelfUIInfoForStateCallback callback); - - // Sends a WM event to change a window's bounds and/or the display it is on. - // |id|: the id of the window. - // |bounds|: bounds the window should be set to. - // |displayId|: id of display to move the window to. - // |callback|: called when the window bounds are changed. - static void setWindowBounds( - long id, - Bounds bounds, - DOMString displayId, - WindowBoundsCallback callback); - - // Starts smoothness tracking for a display. If the display id is not - // specified, the primary display is used. Otherwise, the display specified - // by the display id is used. If `throughputIntervalMs` is not specified, - // default 5 seconds interval is used to collect throughput data. - static void startSmoothnessTracking( - optional DOMString displayId, - optional long throughputIntervalMs, - VoidCallback callback); - - // Stops smoothness tracking for a display and report the smoothness. If - // the display id is not specified, the primary display is used. Otherwise, - // the display specified by the display id is used. - static void stopSmoothnessTracking( - optional DOMString displayId, - StopSmoothnessTrackingCallback callback); - - // When neccesary, disables showing the dialog when Switch Access is disabled. - static void disableSwitchAccessDialog(); - - // Waits for the completion of photo transition animation in ambient mode. - // |numCompletions|: number of completions of the animation. - // |timeout|: the timeout in seconds. - // |callback|: Called when the operation has completed. - static void waitForAmbientPhotoAnimation( - long numCompletions, - long timeout, - VoidCallback callback); - - // Waits for ambient video to successfully start playback. - // |timeout|: the timeout in seconds. - // |callback|: Called when the operation has completed. - static void waitForAmbientVideo( - long timeout, - VoidCallback callback); - - // Disables the automation feature. Note that the event handlers and caches - // of automation nodes still remain in the test extension and so the next - // automation.getDesktop will miss initialization. The caller should ensure - // invalidation of those information (i.e. reloading the entire background - // page). - static void disableAutomation(VoidCallback callback); - - // Starts to ui::ThroughputTracker data collection for tracked animations. - static void startThroughputTrackerDataCollection( - VoidCallback callback); - - // Stops ui::ThroughputTracker data collection and reports the collected - // data since the start or the last GetThroughtputTrackerData call. - static void stopThroughputTrackerDataCollection( - StopThroughputTrackerDataCollectionCallback callback); - - // Reports the currently collected animation data. - static void getThroughputTrackerData( - GetThroughtputTrackerDataCallback callback); - - // Gets the smoothness of a display. If the display id is not specified, - // the primary display is used. - static void getDisplaySmoothness( - optional DOMString displayId, - GetDisplaySmoothnessCallback callback); - - // Resets the holding space by removing all items and clearing the prefs. - static void resetHoldingSpace( - optional ResetHoldingSpaceOptions options, - VoidCallback callback); - - // Starts collection of ui::LoginEventRecorder data. - static void startLoginEventRecorderDataCollection( - VoidCallback callback); - - // Stops ui::LoginEventRecorder data collection and reports all the - // collected data. - static void getLoginEventRecorderLoginEvents( - GetLoginEventRecorderLoginEventsCallback callback); - - // Adds login event to test LoginEventRecorderDataCollection API. - static void addLoginEventForTesting( - VoidCallback callback); - - // Force auto theme mode in dark mode or light mode for testing. - static void forceAutoThemeMode(boolean darkModeEnabled, VoidCallback callback); - - // Fetches an access token from Chrome. - static void getAccessToken( - GetAccessTokenParams accessTokenParams, - GetAccessTokenCallback callback); - - // Returns whether the current input method is ready to accept key events. - static void isInputMethodReadyForTesting( - IsInputMethodReadyForTestingCallback callback); - - // Creates a temporary directory visible under the Fusebox mount point. - static void makeFuseboxTempDir( - MakeFuseboxTempDirCallback callback); - - // Removes a temporary directory visible under the Fusebox mount point. The - // fuseboxFilePath argument was returned by the MakeFuseboxTempDirCallback. - static void removeFuseboxTempDir( - DOMString fuseboxFilePath, - RemoveFuseboxTempDirCallback callback); - - // Remove the specified component extension. - static void removeComponentExtension( - DOMString extensionId, VoidCallback callback); - - // Starts frame counting in viz. `bucketSizeInSeconds` decides the bucket - // size of the frame count records. If it is X seconds, each record is - // the number of presented frames in X seconds. - static void startFrameCounting( - long bucketSizeInSeconds, - VoidCallback callback); - - // Ends frame counting in viz and return the collected data. - static void stopFrameCounting( - StopFrameCountingCallback callback); - - // Starts overdraw tracking for the display associated with - // `displayId` in viz. `bucketSizeInSeconds` decides the bucket size - // of the overdraw records. - // If it is X seconds, each record is the average overdraw of the - // frames presented on the display in X seconds. - static void startOverdrawTracking( - long bucketSizeInSeconds, - optional DOMString displayId, - VoidCallback callback - ); - - // Ends overdraw tracking in viz and return the collected data. - static void stopOverdrawTracking( - optional DOMString displayId, - StopOverdrawTrackingCallback callback - ); - - // Install a bruschetta VM. - static void installBruschetta( - DOMString vm_name, VoidCallback callback); - - // Delete a bruschetta VM. - static void removeBruschetta( - DOMString vm_name, VoidCallback callback); - - // Returns whether a base::Feature is enabled. The state may change because - // a Chrome uprev into ChromeOS changed the default feature state. - static void isFeatureEnabled( - DOMString feature_name, IsFeatureEnabledCallback callback); - - // Returns keyboard layout used for current input method. - static void getCurrentInputMethodDescriptor( - GetCurrentInputMethodDescriptorCallback callback); - - // Overrides the response from Lobster Fetcher and returns the boolean value - // that indicates if the overriding is successful or not. - static void overrideLobsterResponseForTesting( - OverrideLobsterResponseForTestingCallback callback); - - // Overrides the response from Orca Provider and returns the boolean value - // that indicates if the overriding is successful or not. - static void overrideOrcaResponseForTesting( - OrcaResponseArray array, - OverrideOrcaResponseForTestingCallback callback); - - // Overrides the response from Scanner Provider and returns the boolean - // value that indicates if the overriding is successful or not. - static void overrideScannerResponsesForTesting( - ScannerResponseArray array, - OverrideScannerResponsesForTestingCallback callback); - - // ARC set interactive enable/disable state. - // |enabled|: Enable ARC interactive. - // |callback|: Called when the operation sent to ARC by mojo. - static void setArcInteractiveState( - boolean enabled, VoidCallback callback); - - // Returns whether a field trial exists and has been activated. - static void isFieldTrialActive( - DOMString trial_name, - DOMString group_name, - IsFieldTrialActiveCallback callback); - - // ARC get wakefulness mode. - static void getArcWakefulnessMode( - WakefulnessModeCallback callback); - - // Sets the default device language. - // A restart is required for this change to take effect. - // |value|: the locale of the language. - static void setDeviceLanguage(DOMString locale, VoidCallback callback); - - // Gets the chrome://device-log entries for a given type or all types. - // |type|: A string like "printer" to fetch a specific type, or an empty - // string to fetch all entries. - // |callback|: Called with the logs as a single string. - static void getDeviceEventLog(DOMString type, DOMStringCallback callback); - }; - - interface Events { - // Fired when the data in ui::Clipboard is changed. - static void onClipboardDataChanged(); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/braille_display_private.idl b/tools/under-control/src/chrome/common/extensions/api/braille_display_private.idl deleted file mode 100755 index 68938d47a..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/braille_display_private.idl +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2013 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Braille display access private API. -namespace brailleDisplayPrivate { - // Braille display keyboard command. - enum KeyCommand { - line_up, - line_down, - pan_left, - pan_right, - top, - bottom, - routing, - secondary_routing, - dots, - chord, - standard_key - }; - - // A keyboard event. This is not a standard keyboard event because - // braille display keyboards look significantly different from standard - // keyboards. - dictionary KeyEvent { - KeyCommand command; - // 0-based display position for commands that involve a routing key. - long? displayPosition; - // Braille dot keys that were pressed, stored in the low-order bits. - // Dot 1 is stored in bit 0, dot2 in bit 1, etc. - long? brailleDots; - // DOM keyboard event code. This is present when command is standard_key - // and the braille display event represents a non-alphanumeric key such - // as an arrow key or function key. - // The value is as defined by the |code| property in - // http://www.w3.org/TR/uievents/#keyboard-event-interface - DOMString? standardKeyCode; - // DOM keyboard event character value. This is present if the - // braille key event corresponds to a character. - DOMString? standardKeyChar; - // Whether the space key was pressed. - boolean? spaceKey; - // Whether the alt key was pressed. - boolean? altKey; - // Whether the shift key was pressed. - boolean? shiftKey; - // Whether the ctrl key was pressed. - boolean? ctrlKey; - }; - - // The current braille display state. - dictionary DisplayState { - // Whether a braille display is currently available. - boolean available; - // Number of rows of braille cells on the currently connected display. - long? textRowCount; - // Number of columns of braille cells on the currently connected display. - long? textColumnCount; - // The number of dots in a braille cell on the currently connected display. - long? cellSize; - }; - - callback DisplayStateCallback = void(DisplayState result); - - interface Functions { - // Gets the current display state. - static void getDisplayState( - DisplayStateCallback callback); - - // Write the given dot patterns to the display. The buffer contains one - // byte for each braille cell on the display, starting from the leftmost - // cell. Each byte contains a bit pattern indicating which dots should be - // raised in the corresponding cell with the low-order bit representing - // dot 1 and so on until bit 7 which corresponds to dot 8. If the number - // of bytes in the buffer is not equal to the display size, the buffer - // will either be clipped or padded with blank cells on the right. The - // buffer is a 2D array compressed into 1D. The |columns| and |rows| - // parameters give the original 2D dimensions of the buffer. To access - // an element cells[r][c], simply access cells[r * columns + c]. - static void writeDots(ArrayBuffer cells, long columns, long rows); - - // Updates the single user-preferred braille device with the given bluetooth - // device address and starts or restarts the Brltty daemon. - static void updateBluetoothBrailleDisplayAddress(DOMString address); - }; - - interface Events { - // Fired when a braille display is connected or disconnected. - static void onDisplayStateChanged(DisplayState state); - // Fired when an input event is received from the display. - static void onKeyEvent(KeyEvent event); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/certificate_provider.idl b/tools/under-control/src/chrome/common/extensions/api/certificate_provider.idl deleted file mode 100755 index eac389315..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/certificate_provider.idl +++ /dev/null @@ -1,306 +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 this API to expose certificates to the platform which can use these -// certificates for TLS authentications. -namespace certificateProvider { - - // Types of supported cryptographic signature algorithms. - enum Algorithm { - // Specifies the RSASSA PKCS#1 v1.5 signature algorithm with the MD5-SHA-1 - // hashing. The extension must not prepend a DigestInfo prefix but only - // add PKCS#1 padding. This algorithm is deprecated and will never be requested - // by Chrome as of version 109. - RSASSA_PKCS1_v1_5_MD5_SHA1, - // Specifies the RSASSA PKCS#1 v1.5 signature algorithm - // with the SHA-1 hash function. - RSASSA_PKCS1_v1_5_SHA1, - // Specifies the RSASSA PKCS#1 v1.5 signature algorithm - // with the SHA-256 hashing function. - RSASSA_PKCS1_v1_5_SHA256, - // Specifies the RSASSA PKCS#1 v1.5 signature algorithm - // with the SHA-384 hashing function. - RSASSA_PKCS1_v1_5_SHA384, - // Specifies the RSASSA PKCS#1 v1.5 signature algorithm - // with the SHA-512 hashing function. - RSASSA_PKCS1_v1_5_SHA512, - // Specifies the RSASSA PSS signature algorithm with the SHA-256 hashing - // function, MGF1 mask generation function and the salt of the same size as - // the hash. - RSASSA_PSS_SHA256, - // Specifies the RSASSA PSS signature algorithm with the SHA-384 hashing - // function, MGF1 mask generation function and the salt of the same size as - // the hash. - RSASSA_PSS_SHA384, - // Specifies the RSASSA PSS signature algorithm with the SHA-512 hashing - // function, MGF1 mask generation function and the salt of the same size as - // the hash. - RSASSA_PSS_SHA512 - }; - - // Types of errors that the extension can report. - enum Error { - // General error that cannot be represented by other more specific - // error codes. - GENERAL_ERROR - }; - - // Information about a client certificate. - dictionary ClientCertificateInfo { - // The array must contain the DER encoding of the X.509 client certificate - // as its first element. - //

This must include exactly one certificate.

- ArrayBuffer[] certificateChain; - // All algorithms supported for this certificate. The extension will only be - // asked for signatures using one of these algorithms. - Algorithm[] supportedAlgorithms; - }; - - dictionary SetCertificatesDetails { - // When called in response to $(ref:onCertificatesUpdateRequested), should - // contain the received certificatesRequestId value. Otherwise, - // should be unset. - long? certificatesRequestId; - // Error that occurred while extracting the certificates, if any. This error - // will be surfaced to the user when appropriate. - Error? error; - // List of currently available client certificates. - ClientCertificateInfo[] clientCertificates; - }; - - dictionary CertificatesUpdateRequest { - // Request identifier to be passed to $(ref:setCertificates). - long certificatesRequestId; - }; - - dictionary SignatureRequest { - // Request identifier to be passed to $(ref:reportSignature). - long signRequestId; - // Data to be signed. Note that the data is not hashed. - ArrayBuffer input; - // Signature algorithm to be used. - Algorithm algorithm; - // The DER encoding of a X.509 certificate. The extension must sign - // input using the associated private key. - ArrayBuffer certificate; - }; - - dictionary ReportSignatureDetails { - // Request identifier that was received via the $(ref:onSignatureRequested) - // event. - long signRequestId; - // Error that occurred while generating the signature, if any. - Error? error; - // The signature, if successfully generated. - ArrayBuffer? signature; - }; - - // Deprecated. Replaced by $(ref:Algorithm). - enum Hash { - // Specifies the MD5 and SHA1 hashing algorithms. - MD5_SHA1, - // Specifies the SHA1 hashing algorithm. - SHA1, - // Specifies the SHA256 hashing algorithm. - SHA256, - // Specifies the SHA384 hashing algorithm. - SHA384, - // Specifies the SHA512 hashing algorithm. - SHA512 - }; - - // The type of code being requested by the extension with requestPin function. - enum PinRequestType { - // Specifies the requested code is a PIN. - PIN, - // Specifies the requested code is a PUK. - PUK - }; - - // The types of errors that can be presented to the user through the - // requestPin function. - enum PinRequestErrorType { - // Specifies the PIN is invalid. - INVALID_PIN, - // Specifies the PUK is invalid. - INVALID_PUK, - // Specifies the maximum attempt number has been exceeded. - MAX_ATTEMPTS_EXCEEDED, - // Specifies that the error cannot be represented by the above types. - UNKNOWN_ERROR - }; - - // Deprecated. Replaced by $(ref:ClientCertificateInfo). - dictionary CertificateInfo { - // Must be the DER encoding of a X.509 certificate. Currently, only - // certificates of RSA keys are supported. - ArrayBuffer certificate; - - // Must be set to all hashes supported for this certificate. This extension - // will only be asked for signatures of digests calculated with one of these - // hash algorithms. This should be in order of decreasing hash preference. - Hash[] supportedHashes; - }; - - // Deprecated. Replaced by $(ref:SignatureRequest). - dictionary SignRequest { - // The unique ID to be used by the extension should it need to call a method - // that requires it, e.g. requestPin. - long signRequestId; - - // The digest that must be signed. - ArrayBuffer digest; - - // Refers to the hash algorithm that was used to create digest. - Hash hash; - - // The DER encoding of a X.509 certificate. The extension must sign - // digest using the associated private key. - ArrayBuffer certificate; - }; - - dictionary RequestPinDetails { - // The ID given by Chrome in SignRequest. - long signRequestId; - - // The type of code requested. Default is PIN. - PinRequestType? requestType; - - // The error template displayed to the user. This should be set if the - // previous request failed, to notify the user of the failure reason. - PinRequestErrorType? errorType; - - // The number of attempts left. This is provided so that any UI can present - // this information to the user. Chrome is not expected to enforce this, - // instead stopPinRequest should be called by the extension with - // errorType = MAX_ATTEMPTS_EXCEEDED when the number of pin requests is - // exceeded. - long? attemptsLeft; - }; - - dictionary StopPinRequestDetails { - // The ID given by Chrome in SignRequest. - long signRequestId; - - // The error template. If present it is displayed to user. Intended to - // contain the reason for stopping the flow if it was caused by an error, - // e.g. MAX_ATTEMPTS_EXCEEDED. - PinRequestErrorType? errorType; - }; - - dictionary PinResponseDetails { - // The code provided by the user. Empty if user closed the dialog or some - // other error occurred. - DOMString? userInput; - }; - - callback RequestPinCallback = void (optional PinResponseDetails details); - - callback StopPinRequestCallback = void (); - - callback SetCertificatesCallback = void (); - - callback ReportSignatureCallback = void (); - - // The callback provided by the extension that Chrome uses to report back - // rejected certificates. See CertificatesCallback. - callback ResultCallback = void (ArrayBuffer[] rejectedCertificates); - - // If no error occurred, this function must be called with the signature of - // the digest using the private key of the requested certificate. - // For an RSA key, the signature must be a PKCS#1 signature. The extension - // is responsible for prepending the DigestInfo prefix and adding PKCS#1 - // padding. If an error occurred, this callback should be called without - // signature. - callback SignCallback = void (optional ArrayBuffer signature); - - // Call this exactly once with the list of certificates that this extension is - // providing. The list must only contain certificates for which the extension - // can sign data using the associated private key. If the list contains - // invalid certificates, these will be ignored. All valid certificates are - // still registered for the extension. Chrome will call back with the list of - // rejected certificates, which might be empty. - callback CertificatesCallback = - void (CertificateInfo[] certificates, ResultCallback callback); - - interface Events { - // This event fires if the certificates set via $(ref:setCertificates) - // are insufficient or the browser requests updated information. The - // extension must call $(ref:setCertificates) with the updated list of - // certificates and the received certificatesRequestId. - static void onCertificatesUpdateRequested( - CertificatesUpdateRequest request); - - // This event fires every time the browser needs to sign a message using a - // certificate provided by this extension via $(ref:setCertificates). - //

The extension must sign the input data from request using - // the appropriate algorithm and private key and return it by calling - // $(ref:reportSignature) with the received signRequestId.

- static void onSignatureRequested(SignatureRequest request); - - //

This event fires every time the browser requests the current list of - // certificates provided by this extension. The extension must call - // reportCallback exactly once with the current list of - // certificates.

- [deprecated="Use $(ref:onCertificatesUpdateRequested) instead."] - static void onCertificatesRequested(CertificatesCallback reportCallback); - - // This event fires every time the browser needs to sign a message using - // a certificate provided by this extension in reply to an - // $(ref:onCertificatesRequested) event. - // The extension must sign the data in request using the - // appropriate algorithm and private key and return it by calling - // reportCallback. reportCallback must be called - // exactly once. - // |request|: Contains the details about the sign request. - [deprecated="Use $(ref:onSignatureRequested) instead."] - static void onSignDigestRequested(SignRequest request, - SignCallback reportCallback); - }; - - interface Functions { - // Requests the PIN from the user. Only one ongoing request at a time is - // allowed. The requests issued while another flow is ongoing are rejected. - // It's the extension's responsibility to try again later if another flow is - // in progress. - // |details|: Contains the details about the requested dialog. - // |callback|: Returns a Promise which resolves when the PIN is provided by - // the user. Rejects with an error if the dialog request finishes - // unsuccessfully (e.g. the dialog was canceled by the user or was not - // allowed to be shown). - static void requestPin( - RequestPinDetails details, - RequestPinCallback callback); - - // Stops the pin request started by the $(ref:requestPin) function. - // |details|: Contains the details about the reason for stopping the - // request flow. - // |callback|: Returns a Promise which resolves when the request to close - // the PIN dialog is complete. - static void stopPinRequest( - StopPinRequestDetails details, - StopPinRequestCallback callback); - - // Sets a list of certificates to use in the browser. - //

The extension should call this function after initialization and on - // every change in the set of currently available certificates. The - // extension should also call this function in response to - // $(ref:onCertificatesUpdateRequested) every time this event is - // received.

- // |details|: The certificates to set. Invalid certificates will be ignored. - // |callback|: Returns a Promise which resolves upon completion. - static void setCertificates( - SetCertificatesDetails details, - optional SetCertificatesCallback callback); - - // Should be called as a response to $(ref:onSignatureRequested). - //

The extension must eventually call this function for every - // $(ref:onSignatureRequested) event; the API implementation will stop - // waiting for this call after some time and respond with a timeout - // error when this function is called.

- static void reportSignature( - ReportSignatureDetails details, - optional ReportSignatureCallback callback); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/certificate_provider_internal.idl b/tools/under-control/src/chrome/common/extensions/api/certificate_provider_internal.idl deleted file mode 100755 index 073a57bd8..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/certificate_provider_internal.idl +++ /dev/null @@ -1,34 +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. - -// Internal API backing the chrome.certificateProvider API events. -// The internal API associates events with replies to these events using request -// IDs. A custom binding is used to hide these IDs from the public API. -// Before an event hits the extension, the request ID is removed and instead a -// callback is added to the event arguments. On the way back, when the extension -// runs the callback to report its results, the callback magically prepends the -// request ID to the results and calls the respective internal report function -// (reportSignature or reportCertificates). -[implemented_in = "chrome/browser/extensions/api/certificate_provider/certificate_provider_api.h"] -namespace certificateProviderInternal { - callback DoneCallback = void (); - callback ResultCallback = void (ArrayBuffer[] rejectedCertificates); - - interface Functions { - // Matches certificateProvider.SignCallback. Must be called without the - // signature to report an error. - static void reportSignature( - long requestId, - optional ArrayBuffer signature, - optional DoneCallback callback); - - // Matches certificateProvider.CertificatesCallback. Must be called without - // the certificates argument to report an error. - static void reportCertificates( - long requestId, - optional certificateProvider.CertificateInfo[] certificates, - optional ResultCallback callback); - }; -}; - diff --git a/tools/under-control/src/chrome/common/extensions/api/crash_report_private.idl b/tools/under-control/src/chrome/common/extensions/api/crash_report_private.idl deleted file mode 100755 index 2575400ae..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/crash_report_private.idl +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2019 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Private API for Chrome component extensions to report errors. -[platforms=("chromeos")] -namespace crashReportPrivate { - // A dictionary containing additional context about the error. - dictionary ErrorInfo { - // The error message. - DOMString message; - - // URL where the error occurred. - // Must be the full URL, containing the protocol (e.g. - // http://www.example.com). - DOMString url; - - // Name of the product where the error occurred. - // Defaults to the product variant of Chrome that is hosting the extension. - // (e.g. "Chrome" or "Chrome_ChromeOS"). - DOMString? product; - - // Version of the product where the error occurred. - // Defaults to the version of Chrome that is hosting the extension (e.g. - // "73.0.3683.75"). - DOMString? version; - - // Line number where the error occurred. - long? lineNumber; - - // Column number where the error occurred. - long? columnNumber; - - // Used to map the obfuscated source code back to a source map. If present, - // must match the debug_id used to upload the source map. - DOMString? debugId; - - // String containing the stack trace for the error. - // Defaults to the empty string. - DOMString? stackTrace; - }; - - // Callback for |reportError|. - callback ReportCallback = void (); - - interface Functions { - // Report and upload an error to Crash. - // |info|: Information about the error. - // |callback|: Called when the error has been uploaded. - static void reportError( - ErrorInfo info, - ReportCallback callback); - }; -}; 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 deleted file mode 100755 index 29ebd9733..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/developer_private.idl +++ /dev/null @@ -1,834 +0,0 @@ -// Copyright 2012 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// developerPrivate API. -// This is a private API exposing developing and debugging functionalities for -// apps and extensions. -[implemented_in = "chrome/browser/extensions/api/developer_private/developer_private_functions.h"] -namespace developerPrivate { - // DEPRECATED: Use OpenDevTools. - dictionary InspectOptions { - DOMString extension_id; - (DOMString or long) render_process_id; - (DOMString or long) render_view_id; - boolean incognito; - }; - - enum ExtensionType { - HOSTED_APP, - PLATFORM_APP, - LEGACY_PACKAGED_APP, - EXTENSION, - THEME, - SHARED_MODULE - }; - - enum Location { - FROM_STORE, - UNPACKED, - THIRD_PARTY, - INSTALLED_BY_DEFAULT, - // "Unknown" includes crx's installed from chrome://extensions. - UNKNOWN - }; - - enum ViewType { - APP_WINDOW, - BACKGROUND_CONTENTS, - COMPONENT, - EXTENSION_BACKGROUND_PAGE, - EXTENSION_GUEST, - EXTENSION_POPUP, - EXTENSION_SERVICE_WORKER_BACKGROUND, - TAB_CONTENTS, - OFFSCREEN_DOCUMENT, - EXTENSION_SIDE_PANEL, - DEVELOPER_TOOLS - }; - - enum ErrorType { - MANIFEST, - RUNTIME - }; - - enum ErrorLevel { - LOG, - WARN, - ERROR - }; - - enum ExtensionState { - ENABLED, - DISABLED, - TERMINATED, - BLOCKLISTED - }; - - enum CommandScope { - GLOBAL, - CHROME - }; - - enum SafetyCheckWarningReason { - UNPUBLISHED, - POLICY, - MALWARE, - OFFSTORE, - UNWANTED, - NO_PRIVACY_PRACTICE - }; - - dictionary AccessModifier { - boolean isEnabled; - boolean isActive; - }; - - dictionary StackFrame { - long lineNumber; - long columnNumber; - DOMString url; - DOMString functionName; - }; - - dictionary ManifestError { - ErrorType type; - DOMString extensionId; - boolean fromIncognito; - DOMString source; - DOMString message; - long id; - DOMString manifestKey; - DOMString? manifestSpecific; - }; - - dictionary RuntimeError { - ErrorType type; - DOMString extensionId; - boolean fromIncognito; - DOMString source; - DOMString message; - long id; - ErrorLevel severity; - DOMString contextUrl; - long occurrences; - long renderViewId; - long renderProcessId; - boolean canInspect; - boolean isServiceWorker; - StackFrame[] stackTrace; - }; - - dictionary DisableReasons { - boolean suspiciousInstall; - boolean corruptInstall; - boolean updateRequired; - boolean publishedInStoreRequired; - boolean blockedByPolicy; - boolean reloading; - boolean custodianApprovalRequired; - boolean parentDisabledPermissions; - boolean unsupportedManifestVersion; - boolean unsupportedDeveloperExtension; - }; - - dictionary OptionsPage { - boolean openInTab; - DOMString url; - }; - - dictionary HomePage { - DOMString url; - boolean specified; - }; - - dictionary ExtensionView { - DOMString url; - long renderProcessId; - // This actually refers to a render frame. - long renderViewId; - boolean incognito; - boolean isIframe; - ViewType type; - }; - - enum HostAccess { - ON_CLICK, - ON_SPECIFIC_SITES, - ON_ALL_SITES - }; - - dictionary SafetyCheckStrings { - DOMString? panelString; - DOMString? detailString; - }; - - dictionary ControlledInfo { - DOMString text; - }; - - dictionary Command { - DOMString description; - DOMString keybinding; - DOMString name; - boolean isActive; - CommandScope scope; - boolean isExtensionAction; - }; - - dictionary DependentExtension { - DOMString id; - DOMString name; - }; - - dictionary Permission { - DOMString message; - DOMString[] submessages; - }; - - dictionary SiteControl { - // The host pattern for the site. - DOMString host; - // Whether the pattern has been granted. - boolean granted; - }; - - dictionary RuntimeHostPermissions { - // True if |hosts| contains an all hosts like pattern. - boolean hasAllHosts; - - // The current HostAccess setting for the extension. - HostAccess hostAccess; - - // The site controls for all granted and requested patterns. - SiteControl[] hosts; - }; - - dictionary Permissions { - Permission[] simplePermissions; - - // Only populated for extensions that can be affected by the runtime host - // permissions feature. - RuntimeHostPermissions? runtimeHostPermissions; - }; - - dictionary ExtensionInfo { - DOMString? blocklistText; - SafetyCheckStrings? safetyCheckText; - Command[] commands; - ControlledInfo? controlledInfo; - DependentExtension[] dependentExtensions; - DOMString description; - DisableReasons disableReasons; - AccessModifier errorCollection; - AccessModifier fileAccess; - boolean fileAccessPendingChange; - HomePage homePage; - DOMString iconUrl; - DOMString id; - AccessModifier incognitoAccess; - AccessModifier userScriptsAccess; - boolean incognitoAccessPendingChange; - DOMString[] installWarnings; - boolean isCommandRegistrationHandledExternally; - DOMString? launchUrl; - Location location; - DOMString? locationText; - ManifestError[] manifestErrors; - DOMString manifestHomePageUrl; - boolean mustRemainInstalled; - DOMString name; - boolean offlineEnabled; - OptionsPage? optionsPage; - DOMString? path; - Permissions permissions; - DOMString? prettifiedPath; - DOMString? recommendationsUrl; - RuntimeError[] runtimeErrors; - DOMString[] runtimeWarnings; - ExtensionState state; - ExtensionType type; - DOMString updateUrl; - boolean userMayModify; - DOMString version; - ExtensionView[] views; - DOMString webStoreUrl; - boolean showSafeBrowsingAllowlistWarning; - SafetyCheckWarningReason? safetyCheckWarningReason; - boolean showAccessRequestsInToolbar; - boolean? pinnedToToolbar; - boolean isAffectedByMV2Deprecation; - boolean didAcknowledgeMV2DeprecationNotice; - boolean canUploadAsAccountExtension; - }; - - dictionary ProfileInfo { - boolean canLoadUnpacked; - boolean inDeveloperMode; - boolean isDeveloperModeControlledByPolicy; - boolean isIncognitoAvailable; - boolean isChildAccount; - boolean isMv2DeprecationNoticeDismissed; - }; - - dictionary GetExtensionsInfoOptions { - boolean? includeDisabled; - boolean? includeTerminated; - }; - - dictionary ExtensionConfigurationUpdate { - DOMString extensionId; - boolean? fileAccess; - boolean? incognitoAccess; - boolean? userScriptsAccess; - boolean? errorCollection; - HostAccess? hostAccess; - boolean? showAccessRequestsInToolbar; - SafetyCheckWarningReason? acknowledgeSafetyCheckWarningReason; - boolean? acknowledgeSafetyCheckWarning; - boolean? pinnedToToolbar; - }; - - dictionary ProfileConfigurationUpdate { - boolean? inDeveloperMode; - boolean? isMv2DeprecationNoticeDismissed; - }; - - dictionary ExtensionCommandUpdate { - DOMString extensionId; - DOMString commandName; - CommandScope? scope; - DOMString? keybinding; - }; - - dictionary ReloadOptions { - // If false, an alert dialog will show in the event of a reload error. - // Defaults to false. - boolean? failQuietly; - - // If true, populates a LoadError for the response rather than setting - // lastError. Only relevant for unpacked extensions; it will be ignored for - // any other extension. - boolean? populateErrorForUnpacked; - }; - - dictionary LoadUnpackedOptions { - // If false, an alert dialog will show in the event of a reload error. - // Defaults to false. - boolean? failQuietly; - - // If true, populates a LoadError for the response rather than setting - // lastError. - boolean? populateError; - - // A unique identifier for retrying a previous failed load. This should be - // the identifier returned in the LoadError. If specified, the path - // associated with the identifier will be loaded, and the file chooser - // will be skipped. - DOMString? retryGuid; - - // True if the function should try to load an extension from the drop data - // of the page. notifyDragInstallInProgress() needs to be called prior to - // this being used. This cannot be used with |retryGuid|. - boolean? useDraggedPath; - }; - - // Describes which set of sites a given url/string is associated with. Note - // that a site can belong to multiple sets at the same time. - enum SiteSet { - // The site is specified by the user to automatically grant access to all - // extensions with matching host permissions. Mutually exclusive with - // USER_RESTRICTED but takes precedence over EXTENSION_SPECIFIED. - USER_PERMITTED, - // The site is specified by the user to disallow all extensions from running - // on it. Mutually exclusive with USER_PERMITTED but takes precedence over - // EXTENSION_SPECIFIED. - USER_RESTRICTED, - // The site is specified by one or more extensions' set of host permissions. - EXTENSION_SPECIFIED - }; - - dictionary UserSiteSettingsOptions { - // Specifies which set of user specified sites that the host will be added - // to or removed from. - SiteSet siteSet; - // The sites to add/remove. - DOMString[] hosts; - }; - - dictionary UserSiteSettings { - // The list of origins where the user has allowed all extensions to run on. - DOMString[] permittedSites; - // The list of origins where the user has blocked all extensions from - // running on. - DOMString[] restrictedSites; - }; - - dictionary SiteInfo { - // The site set that `site` belongs to. - SiteSet siteSet; - // The number of extensions with access to `site`. - // TODO(crbug.com/40227416): A tricky edge case is when one extension - // specifies something like *.foo.com and another specifies foo.com. - // Patterns which match all subdomains should be represented differently. - long numExtensions; - // The site itself. This could either be a user specified site or an - // extension host permission pattern. - DOMString site; - }; - - dictionary SiteGroup { - // The common effective top level domain plus one (eTLD+1) for all sites in - // `sites`. - DOMString etldPlusOne; - // The number of extensions that can run on at least one site inside `sites` - // for this eTLD+1. - long numExtensions; - // The list of user or extension specified sites that share the same eTLD+1. - SiteInfo[] sites; - }; - - dictionary MatchingExtensionInfo { - // The id of the matching extension. - DOMString id; - // Describes the extension's access to the queried site from - // getMatchingExtensionsForSite. Note that the meaning is different from the - // original enum: - // - ON_CLICK: The extension requested access to the site but its access is - // withheld. - // - ON_SPECIFIC_SITES: the extension is permitted to run on at least one - // site specified by the queried site but it does not request access to - // all sites or it has its access withheld on at least one site in its - // host permissions. - // - ON_ALL_SITES: the extension is permitted to run on all sites. - HostAccess siteAccess; - // Whether the matching extension requests access to all sites in its - // host permissions. - boolean canRequestAllSites; - }; - - dictionary ExtensionSiteAccessUpdate { - // The id of the extension to update its site access settings for. - DOMString id; - // Describes the update made to the extension's site access for a given site - // Note that this has a different meaning from the original enum: - // - ON_CLICK: Withholds the extension's access to the given site, - // - ON_SPECIFIC_SITES: Grants the extension access to the intersection of - // (given site, extension's specified host permissions.) - // - ON_ALL_SITES: Grants access to all of the extension's specified host - // permissions. - HostAccess siteAccess; - }; - - enum PackStatus { - SUCCESS, - ERROR, - WARNING - }; - - enum FileType { - LOAD, - PEM - }; - - enum SelectType { - FILE, - FOLDER - }; - - enum EventType { - INSTALLED, - UNINSTALLED, - LOADED, - UNLOADED, - // New window / view opened. - VIEW_REGISTERED, - // window / view closed. - VIEW_UNREGISTERED, - ERROR_ADDED, - ERRORS_REMOVED, - PREFS_CHANGED, - WARNINGS_CHANGED, - COMMAND_ADDED, - COMMAND_REMOVED, - PERMISSIONS_CHANGED, - SERVICE_WORKER_STARTED, - SERVICE_WORKER_STOPPED, - CONFIGURATION_CHANGED, - PINNED_ACTIONS_CHANGED - }; - - dictionary PackDirectoryResponse { - // The response message of success or error. - DOMString message; - - // Unpacked items's path. - DOMString item_path; - - // Permanent key path. - DOMString pem_path; - - long override_flags; - PackStatus status; - }; - - dictionary ProjectInfo { - DOMString name; - }; - - dictionary EventData { - EventType event_type; - DOMString item_id; - ExtensionInfo? extensionInfo; - }; - - dictionary ErrorFileSource { - // 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 of the code which threw the error, and should be highlighted. - DOMString highlight; - - // The region after the "highlight" portion. - DOMString afterHighlight; - }; - - dictionary LoadError { - // The error that occurred when trying to load the extension. - DOMString error; - - // The path to the extension. - DOMString path; - - // The file source for the error, if it could be retrieved. - ErrorFileSource? source; - - // A unique identifier to pass to developerPrivate.loadUnpacked to retry - // loading the extension at the same path. - DOMString retryGuid; - }; - - dictionary RequestFileSourceProperties { - // The ID of the extension owning the file. - DOMString extensionId; - - // The path of the file, relative to the extension; e.g., manifest.json, - // script.js, or main.html. - DOMString pathSuffix; - - // The error message which was thrown as a result of the error in the file. - DOMString message; - - // The key in the manifest which caused the error (e.g., "permissions"). - // (Required for "manifest.json" files) - DOMString? manifestKey; - - // The specific portion of the manifest key which caused the error (e.g., - // "foo" in the "permissions" key). (Optional for "manifest.json" file). - DOMString? manifestSpecific; - - // The line number which caused the error (optional for non-manifest files). - long? lineNumber; - }; - - dictionary RequestFileSourceResponse { - // 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; - - // The error message. - DOMString message; - }; - - dictionary OpenDevToolsProperties { - // The ID of the extension. This is only needed if opening its background - // page or its background service worker (where renderViewId and - // renderProcessId are -1). - DOMString? extensionId; - - // The ID of the render frame in which the error occurred. - // Despite being called renderViewId, this refers to a render frame. - long renderViewId; - - // The ID of the process in which the error occurred. - long renderProcessId; - - // Whether or not the background is service worker based. - boolean? isServiceWorker; - - boolean? incognito; - - // The URL in which the error occurred. - DOMString? url; - - // The line to focus the devtools at. - long? lineNumber; - - // The column to focus the devtools at. - long? columnNumber; - }; - - dictionary DeleteExtensionErrorsProperties { - DOMString extensionId; - long[]? errorIds; - ErrorType? type; - }; - - callback VoidCallback = void (); - callback ExtensionInfosCallback = void (ExtensionInfo[] result); - callback ExtensionInfoCallback = void (ExtensionInfo result); - callback ProfileInfoCallback = void (ProfileInfo info); - callback PackCallback = void (PackDirectoryResponse response); - callback StringCallback = void (DOMString string); - callback RequestFileSourceCallback = - void (RequestFileSourceResponse response); - callback LoadErrorCallback = void (optional LoadError error); - callback DragInstallInProgressCallback = void (DOMString loadGuid); - callback UserSiteSettingsCallback = void (UserSiteSettings settings); - callback UserAndExtensionSitesByEtldCallback = void (SiteGroup[] siteGroups); - callback GetMatchingExtensionsForSiteCallback = - void (MatchingExtensionInfo[] matchingExtensions); - callback BoolCallback = void(boolean result); - - interface Functions { - // Runs auto update for extensions and apps immediately. - // |callback| : Called after update check completes. - static void autoUpdate(optional VoidCallback callback); - - // Returns information of all the extensions and apps installed. - // |options| : Options to restrict the items returned. - // |callback| : Called with extensions info. - static void getExtensionsInfo( - optional GetExtensionsInfoOptions options, - optional ExtensionInfosCallback callback); - - // Returns information of a particular extension. - // |id| : The id of the extension. - // |callback| : Called with the result. - static void getExtensionInfo( - DOMString id, - optional ExtensionInfoCallback callback); - - // Returns the size of a particular extension on disk (already formatted). - // |id| : The id of the extension. - // |callback| : Called with the result. - static void getExtensionSize( - DOMString id, - StringCallback callback); - - // Returns the current profile's configuration. - static void getProfileConfiguration( - ProfileInfoCallback callback); - - // Updates the active profile. - // |update| : The parameters for updating the profile's configuration. Any - // properties omitted from |update| will not be changed. - static void updateProfileConfiguration( - ProfileConfigurationUpdate update, - optional VoidCallback callback); - - // Reloads a given extension. - // |extensionId| : The id of the extension to reload. - // |options| : Additional configuration parameters. - static void reload( - DOMString extensionId, - optional ReloadOptions options, - optional LoadErrorCallback callback); - - // Modifies an extension's current configuration. - // |update| : The parameters for updating the extension's configuration. - // Any properties omitted from |update| will not be changed. - static void updateExtensionConfiguration( - ExtensionConfigurationUpdate update, - optional VoidCallback callback); - - // Loads a user-selected unpacked item. - // |options| : Additional configuration parameters. - static void loadUnpacked( - optional LoadUnpackedOptions options, - optional LoadErrorCallback callback); - - // Installs the file that was dragged and dropped onto the associated - // page. - static void installDroppedFile( - optional VoidCallback callback); - - // Notifies the browser that a user began a drag in order to install an - // extension. - static void notifyDragInstallInProgress(); - - // Loads an extension / app. - // |directory| : The directory to load the extension from. - static void loadDirectory( - [instanceOf=DirectoryEntry] object directory, - StringCallback callback); - - // Open Dialog to browse to an entry. - // |selectType| : Select a file or a folder. - // |fileType| : Required file type. For example, pem type is for private - // key and load type is for an unpacked item. - // |callback| : called with selected item's path. - static void choosePath( - SelectType selectType, - FileType fileType, - StringCallback callback); - - // Pack an extension. - // |rootPath| : The path of the extension. - // |privateKeyPath| : The path of the private key, if one is given. - // |flags| : Special flags to apply to the loading process, if any. - // |callback| : called with the success result string. - static void packDirectory( - DOMString path, - optional DOMString privateKeyPath, - optional long flags, - optional PackCallback callback); - - // Reads and returns the contents of a file related to an extension which - // caused an error. - static void requestFileSource( - RequestFileSourceProperties properties, - RequestFileSourceCallback callback); - - // Open the developer tools to focus on a particular error. - static void openDevTools( - OpenDevToolsProperties properties, - optional VoidCallback callback); - - // Delete reported extension errors. - // |properties| : The properties specifying the errors to remove. - static void deleteExtensionErrors( - DeleteExtensionErrorsProperties properties, - optional VoidCallback callback); - - // Repairs the extension specified. - // |extensionId| : The id of the extension to repair. - static void repairExtension( - DOMString extensionId, - optional VoidCallback callback); - - // Shows the options page for the extension specified. - // |extensionId| : The id of the extension to show the options page for. - static void showOptions( - DOMString extensionId, - optional VoidCallback callback); - - // Shows the path of the extension specified. - // |extensionId| : The id of the extension to show the path for. - static void showPath( - DOMString extensionId, - optional VoidCallback callback); - - // (Un)suspends global shortcut handling. - // |isSuspended| : Whether or not shortcut handling should be suspended. - static void setShortcutHandlingSuspended( - boolean isSuspended, - optional VoidCallback callback); - - // Updates an extension command. - // |update| : The parameters for updating the extension command. - static void updateExtensionCommand( - ExtensionCommandUpdate update, - optional VoidCallback callback); - - // Adds a new host permission to the extension. The extension will only - // have access to the host if it is within the requested permissions. - // |extensionId|: The id of the extension to modify. - // |host|: The host to add. - static void addHostPermission( - DOMString extensionId, - DOMString host, - optional VoidCallback callback); - - // Removes a host permission from the extension. This should only be called - // with a host that the extension has access to. - // |extensionId|: The id of the extension to modify. - // |host|: The host to remove. - static void removeHostPermission( - DOMString extensionId, - DOMString host, - optional VoidCallback callback); - - // Returns the user specified site settings (which origins can extensions - // always/never run on) for the current profile. - static void getUserSiteSettings( - UserSiteSettingsCallback callback); - - // Adds hosts to the set of user permitted or restricted sites. If any hosts - // are in the other set than what's specified in `options`, then they are - // removed from that set. - static void addUserSpecifiedSites( - UserSiteSettingsOptions options, - optional VoidCallback callback); - - // Removes hosts from the specified set of user permitted or restricted - // sites. - static void removeUserSpecifiedSites( - UserSiteSettingsOptions options, - optional VoidCallback callback); - - // Returns all hosts specified by user site settings, grouped by each host's - // eTLD+1. - static void getUserAndExtensionSitesByEtld( - UserAndExtensionSitesByEtldCallback callback); - - // Returns a list of extensions which have at least one matching site in - // common between its set of host permissions and `site`. - static void getMatchingExtensionsForSite( - DOMString site, - GetMatchingExtensionsForSiteCallback callback); - - // Updates the site access settings for multiple extensions for the given - // `site` and calls `callback` once all updates have been finished. - // Each update species an extension id an a new HostAccess setting. - static void updateSiteAccess( - DOMString site, - ExtensionSiteAccessUpdate[] updates, - optional VoidCallback callback); - - // Removes multiple installed extensions. - static void removeMultipleExtensions( - DOMString[] extensionIds, - optional VoidCallback callback); - - // Dismisses the menu notification for the extensions module in Safety Hub - // if one is active. - static void dismissSafetyHubExtensionsMenuNotification(); - - // Triggers the dismissal of the mv2 deprecation notice for `extensionId`. - static void dismissMv2DeprecationNoticeForExtension(DOMString extensionId); - - // Uploads an extension to the signed in user's account and returns whether - // the extension is actually uploaded in `callback`. If the extension is not - // eligible for upload or if there is no signed in user, returns an error. - static void uploadExtensionToAccount(DOMString extensionId, - BoolCallback callback); - - // Shows the site settings for the extension. - [platforms=("desktop_android")] - static void showSiteSettings( - DOMString extensionId - ); - - [nocompile, deprecated="Use openDevTools"] - static void inspect(InspectOptions options, - optional VoidCallback callback); - }; - - interface Events { - // Fired when a item state is changed. - static void onItemStateChanged(EventData response); - - // Fired when the profile's state has changed. - static void onProfileStateChanged(ProfileInfo info); - - // Fired when the lists of sites in the user's site settings have changed. - static void onUserSiteSettingsChanged(UserSiteSettings settings); - }; - -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/document_scan.idl b/tools/under-control/src/chrome/common/extensions/api/document_scan.idl deleted file mode 100755 index 58ecb02b6..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/document_scan.idl +++ /dev/null @@ -1,655 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Use the chrome.documentScan API to discover and retrieve -// images from attached document scanners. -[platforms=("chromeos"), -implemented_in="chrome/browser/extensions/api/document_scan/document_scan_api.h"] -namespace documentScan { - dictionary ScanOptions { - // The MIME types that are accepted by the caller. - DOMString[]? mimeTypes; - - // The number of scanned images allowed. The default is 1. - long? maxImages; - }; - - dictionary ScanResults { - // An array of data image URLs in a form that can be passed as the "src" - // value to an image tag. - DOMString[] dataUrls; - - // The MIME type of the dataUrls. - DOMString mimeType; - }; - - // An enum that indicates the result of each operation. - enum OperationResult { - // An unknown or generic failure occurred. - UNKNOWN, - - // The operation succeeded. - SUCCESS, - - // The operation is not supported. - UNSUPPORTED, - - // The operation was cancelled. - CANCELLED, - - // The device is busy. - DEVICE_BUSY, - - // Either the data or an argument passed to the method is not valid. - INVALID, - - // The supplied value is the wrong data type for the underlying option. - WRONG_TYPE, - - // No more data is available. - EOF, - - // The document feeder is jammed. - ADF_JAMMED, - - // The document feeder is empty. - ADF_EMPTY, - - // The flatbed cover is open. - COVER_OPEN, - - // An error occurred while communicating with the device. - IO_ERROR, - - // The device requires authentication. - ACCESS_DENIED, - - // Not enough memory is available on the Chromebook to complete the - // operation. - NO_MEMORY, - - // The device is not reachable. - UNREACHABLE, - - // The device is disconnected. - MISSING, - - // An error has occurred somewhere other than the calling application. - INTERNAL_ERROR - }; - - // Indicates how the scanner is connected to the computer. - enum ConnectionType { - UNSPECIFIED, - USB, - NETWORK - }; - - // Contains general information about a scanner. It is - // intended for filtering and constructing user-facing information. to - // configure a scan, use $(ref:StartScanOptions). - dictionary ScannerInfo { - // The ID of a specific scanner. - DOMString scannerId; - - // A human-readable name for the scanner to display in the UI. - DOMString name; - - // The scanner manufacturer. - DOMString manufacturer; - - // The scanner model if it is available, or a generic description. - DOMString model; - - // For matching against other ScannerInfo entries that point - // to the same physical device. - DOMString deviceUuid; - - // Indicates how the scanner is connected to the computer. - ConnectionType connectionType; - - // If true, the scanner connection's transport cannot be intercepted by a - // passive listener, such as TLS or USB. - boolean secure; - - // An array of MIME types that can be requested for returned scans. - DOMString[] imageFormats; - - // A human-readable description of the protocol or driver used to - // access the scanner, such as Mopria, WSD, or epsonds. This is primarily - // useful for allowing a user to choose between protocols if a device - // supports multiple protocols. - DOMString protocolType; - }; - - // The data type of an option. - enum OptionType { - // The option's data type is unknown. The value property - // will be unset. - UNKNOWN, - - // The value property will be one of truefalse. - BOOL, - - // A signed 32-bit integer. The value property will be long or - // long[], depending on whether the option takes more than one value. - INT, - - // A double in the range -32768-32767.9999 with a resolution of 1/65535. - // The value property will be double or double[] depending - // on whether the option takes more than one value. Double values that - // can't be exactly represented will be rounded to the available range - // and precision. - FIXED, - - // A sequence of any bytes except NUL ('\0'). The value - // property will be a DOMString. - STRING, - - // An option of this type has no value. Instead, setting an option of - // this type causes an option-specific side effect in the scanner - // driver. For example, a button-typed option could be used by a - // scanner driver to provide a means to select default values or to - // tell an automatic document feeder to advance to the next sheet of - // paper. - BUTTON, - - // Grouping option. No value. This is included for compatibility, but - // will not normally be returned in ScannerOption values. Use - // getOptionGroups() to retrieve the list of groups with their - // member options. - GROUP - }; - - // Indicates the data type for $(ref:ScannerOption.unit). - enum OptionUnit { - // The value is a unitless number. For example, it can be a threshold. - UNITLESS, - - // The value is a number of pixels, for example, scan dimensions. - PIXEL, - - // The value is the number of bits, for example, color depth. - BIT, - - // The value is measured in millimeters, for example, scan dimensions. - MM, - - // The value is measured in dots per inch, for example, resolution. - DPI, - - // The value is a percent, for example, brightness. - PERCENT, - - // The value is measured in microseconds, for example, exposure time. - MICROSECOND - }; - - // The data type of constraint represented by an $(ref:OptionConstraint). - enum ConstraintType { - // The constraint on a range of OptionType.INT values. - // The min, max, and quant properties - // of OptionConstraint will be long, and its - // list propety will be unset. - INT_RANGE, - - // The constraint on a range of OptionType.FIXED values. - // The min, max, and quant properties - // of OptionConstraint will be double, and its - // list property will be unset. - FIXED_RANGE, - - // The constraint on a specific list of OptionType.INT - // values. The OptionConstraint.list property will contain - // long values, and the other properties will be unset. - INT_LIST, - - // The constraint on a specific list of OptionType.FIXED - // values. The OptionConstraint.list property will contain - // double values, and the other properties will be unset. - FIXED_LIST, - - // The constraint on a specific list of OptionType.STRING - // values. The OptionConstraint.list property will contain - // DOMString values, and the other properties will be unset. - STRING_LIST - }; - - // The specific values for the $(ref:ConstraintType) structure. - // An unconstrained value is represented by a lack of constraints; - // there is no separate ConstraintType value to indicate an - // unconstrained value. - dictionary OptionConstraint { - ConstraintType type; - (long or double)? min; - (long or double)? max; - (long or double)? quant; - (double[] or long[] or DOMString[])? list; - }; - - // How an option can be changed. - enum Configurability { - // The option is read-only. - NOT_CONFIGURABLE, - - // The option can be set in software. - SOFTWARE_CONFIGURABLE, - - // The option can be set by the user toggling or pushing a button on - // the scanner. - HARDWARE_CONFIGURABLE - }; - - // A self-describing configurable scanner option and its current value. - dictionary ScannerOption { - // The option name using lowercase ASCII letters, numbers, and dashes. - // Diacritics are not allowed. - DOMString name; - - // A printable one-line title. - DOMString title; - - // A longer description of the option. - DOMString description; - - // The data type contained in the value property, which - // is needed for setting this option. - OptionType type; - - // The unit of measurement for this option. - OptionUnit unit; - - // The current value of the option, if relevant. Note that the data - // type of this property must match the data type specified in - // type. - (boolean or double or double[] or long or long[] or DOMString)? value; - - // Defines $(ref:OptionConstraint) on the current scanner option. - OptionConstraint? constraint; - - // Indicates that this option can be detected from software. - boolean isDetectable; - - // Indicates whether and how the option can be changed. - Configurability configurability; - - // Can be automatically set by the scanner driver. - boolean isAutoSettable; - - // Emulated by the scanner driver if true. - boolean isEmulated; - - // Indicates the option is active and can be set or retrieved. If false, - // the value property will not be set. - boolean isActive; - - // Indicates that the UI should not display this option by default. - boolean isAdvanced; - - // Indicates that the option is used for internal configuration and - // should never be displayed in the UI. - boolean isInternal; - }; - - // A set of criteria passed to getScannerList(). Only devices - // that match all of the criteria will be returned. - dictionary DeviceFilter { - // Only return scanners that are directly attached to the computer. - boolean? local; - - // Only return scanners that use a secure transport, such as USB or TLS. - boolean? secure; - }; - - // Contains a list of option names. The groups and their contents are - // determined by the scanner driver and do not have any defined semantics - // or consistent membership. This structure is primarily intended - // for UI layout assistance; it does not affect individual option - // behaviors. - dictionary OptionGroup { - // Provides a printable title, for example "Geometry options". - DOMString title; - - // An array of option names in driver-provided order. - DOMString[] members; - }; - - // The response from $(ref:getScannerList). - dictionary GetScannerListResponse { - // The enumeration result. Note that partial results could be - // returned even if this indicates an error. - OperationResult result; - - // A possibly-empty list of scanners that match the provided - // $(ref:DeviceFilter). - ScannerInfo[] scanners; - }; - - // The response from $(ref:openScanner). - dictionary OpenScannerResponse { - // The scanner ID passed to openScanner(). - DOMString scannerId; - - // The result of opening the scanner. If the value of this is - // SUCCESS, the scannerHandle and - // options properties will be populated. - OperationResult result; - - // If result is SUCCESS, a - // handle to the scanner that can be used for further operations. - DOMString? scannerHandle; - - // If result is SUCCESS, - // provides a key-value mapping where the key is a device-specific - // option and the value is an instance of $(ref:ScannerOption). - object? options; - }; - - // The response from $(ref:getOptionGroups). - dictionary GetOptionGroupsResponse { - // The same scanner handle as was passed to $(ref:getOptionGroups). - DOMString scannerHandle; - - // The result of getting the option groups. If the value of this is - // SUCCESS, the groups property will be - // populated. - OperationResult result; - - // If result is SUCCESS, provides a - // list of option groups in the order supplied by the scanner driver. - OptionGroup[]? groups; - }; - - // The response from closeScanner(). - dictionary CloseScannerResponse { - // The same scanner handle as was passed to $(ref:closeScanner). - DOMString scannerHandle; - - // The result of closing the scanner. Even if this value is not - // SUCCESS, the handle will be invalid and - // should not be used for any further operations. - OperationResult result; - }; - - // Passed to $(ref:setOptions) to set an option to $(ref:ScannerOption) to - // a new value. - dictionary OptionSetting { - // Indicates the name of the option to set. - DOMString name; - - // Indicates the data type of the option. The requested data type must - // match the real data type of the underlying option. - OptionType type; - - // Indicates the value to set. Leave unset to request automatic setting for - // options that have autoSettable enabled. The data type - // supplied for value must match type. - (boolean or double or double[] or long or long[] or DOMString)? value; - }; - - // The result of setting an individual option. Each individual option - // supplied to setOptions() produces a separate result - // due to things like rounding and constraints. - dictionary SetOptionResult { - // Indicates the name of the option that was set. - DOMString name; - - // Indicates the result of setting the option. - OperationResult result; - }; - - // The response from a call to $(ref:setOptions). - dictionary SetOptionsResponse { - // Provides the scanner handle passed to setOptions(). - DOMString scannerHandle; - - // An array of results, one each for every passed-in - // OptionSetting. - SetOptionResult[] results; - - // An updated key-value mapping from option names to - // $(ref:ScannerOption) values containing the new configuration after - // attempting to set all supplied options. This has the same structure as - // the options property in $(ref:OpenScannerResponse). - // - // This property will be set even if some options were not set successfully, - // but will be unset if retrieving the updated configuration fails (for - // example, if the scanner is disconnected in the middle of scanning). - object? options; - }; - - // Specifies options for $(ref:startScan). - dictionary StartScanOptions { - // Specifies the MIME type to return scanned data in. - DOMString format; - - // If a non-zero value is specified, limits the maximum scanned bytes - // returned in a single $(ref:readScanData) response to that value. The - // smallest allowed value is 32768 (32 KB). If this property is not - // specified, the size of a returned chunk may be as large as the entire - // scanned image. - long? maxReadSize; - }; - - // The response from startScan(). - dictionary StartScanResponse { - // Provides the same scanner handle that was passed to - // startScan(). - DOMString scannerHandle; - - // The result of starting a scan. If the value of this is - // SUCCESS, the job property will be populated. - OperationResult result; - - // If result is SUCCESS, provides a - // handle that can be used to read scan data or cancel the job. - DOMString? job; - }; - - // The response from cancelScan(). - dictionary CancelScanResponse { - // Provides the same job handle that was passed to - // cancelScan(). - DOMString job; - - // The backend's cancel scan result. If the result is - // OperationResult.SUCCESS or - // OperationResult.CANCELLED, the scan has been cancelled and - // the scanner is ready to start a new scan. If the result is - // OperationResult.DEVICE_BUSY , the scanner is still - // processing the requested cancellation; the caller should wait a short - // time and try the request again. Other result values indicate a permanent - // error that should not be retried. - OperationResult result; - }; - - // The response from $(ref:readScanData). - dictionary ReadScanDataResponse { - // Provides the job handle passed to readScanData(). - DOMString job; - - // The result of reading data. If its value is - // SUCCESS, then data contains the - // next (possibly zero-length) chunk of image data that is ready - // for reading. If its value is EOF, the data - // contains the last chunk of image data. - OperationResult result; - - // If result is SUCCESS, contains - // the next chunk of scanned image data. If result is - // EOF, contains the last chunk of - // scanned image data. - ArrayBuffer? data; - - // If result is SUCCESS, an estimate of - // how much of the total scan data has been delivered so far, in the range - // 0 to 100. - long? estimatedCompletion; - }; - - // Callback from the $(ref:scan) method. - // |result| Provides the results from the scan, if successful. - // Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback ScanCallback = void (ScanResults result); - - // Callback from the $(ref:getScannerList) method. - // |response| The response from enumeration, if the call was valid. - // Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback GetScannerListCallback = void (GetScannerListResponse response); - - // Callback from the $(ref:openScanner) method. - // |response| The response from opening the scanner, if the call was valid. - // Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback OpenScannerCallback = void (OpenScannerResponse response); - - // Callback from the $(ref:getOptionGroups) method. - // |response| The response from getting the option groups, if the call was - // valid. Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback GetOptionGroupsCallback = - void (GetOptionGroupsResponse response); - - // Callback from the $(ref:closeScanner) method. - // |response| The response from closing the scanner, if the call was valid. - // Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback CloseScannerCallback = void (CloseScannerResponse response); - - // Callback from the $(ref:setOptions) method. - // |response| The response from setting the options, if the call was valid. - // Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback SetOptionsCallback = void (SetOptionsResponse response); - - // Callback from the $(ref:startScan) method. - // |response| The response from starting the scan, if the call was valid. - // Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback StartScanCallback = void (StartScanResponse response); - - // Callback from the $(ref:cancelScan) method. - // |response| The response from canceling the scan, if the call was valid. - // Otherwise, this value will be null and $(ref:runtime.lastError) - // will be set. - callback CancelScanCallback = void (CancelScanResponse response); - - // Callback from the $(ref:readScanData) method. - // |response| The response from reading the next chunk of scanned image data, - // if the call was valid. Otherwise, this value will be null and - // $(ref:runtime.lastError) will be set. - callback ReadScanDataCallback = void (ReadScanDataResponse response); - - interface Functions { - // Performs a document scan and returns a Promise that resolves - // with a $(ref:ScanResults) object. If a callback is passed to - // this function, the returned data is passed to it instead. - // |options| : An object containing scan parameters. - // |callback| : Returns a Promise which resolves with the scan results. - static void scan( - ScanOptions options, - ScanCallback callback); - - // Gets the list of available scanners and returns a Promise that - // resolves with a $(ref:GetScannerListResponse) object. If a callback - // is passed to this function, returned data is passed to it instead. - // |filter| : A $(ref:DeviceFilter) indicating which types of scanners - // should be returned. - // |callback| : Returns a Promise which resolves with the result and list of - // scanners. - static void getScannerList( - DeviceFilter filter, GetScannerListCallback callback); - - // Opens a scanner for exclusive access and returns a Promise that - // resolves with an $(ref:OpenScannerResponse) object. If a callback - // is passed to this function, returned data is passed to it instead. - // |scannerId| : The ID of a scanner to be opened. This value is one - // returned from a previous call to $(ref:getScannerList). - // |callback| : Returns a Promise which resolves with the result. - static void openScanner( - DOMString scannerId, OpenScannerCallback callback); - - // Gets the group names and member options from a scanner previously - // opened by $(ref:openScanner). This method returns a Promise that - // resolves with a $(ref:GetOptionGroupsResponse) object. If a callback - // is passed to this function, returned data is passed to it instead. - // |scannerHandle| : The handle of an open scanner returned from a call - // to $(ref:openScanner). - // |callback| : Returns a Promise which resolves with the result. - static void getOptionGroups( - DOMString scannerHandle, GetOptionGroupsCallback callback); - - // Closes the scanner with the passed in handle and returns a Promise - // that resolves with a $(ref:CloseScannerResponse) object. If a callback - // is used, the object is passed to it instead. Even if the response is - // not a success, the supplied handle becomes invalid and should not be - // used for further operations. - // |scannerHandle| : Specifies the handle of an open scanner that was - // previously returned from a call to $(ref:openScanner). - // |callback| : Returns a Promise which resolves with the result. - static void closeScanner( - DOMString scannerHandle, CloseScannerCallback callback); - - // Sets options on the specified scanner and returns a Promise that - // resolves with a $(ref:SetOptionsResponse) object containing the - // result of trying to set every value in the order of the passed-in - // $(ref:OptionSetting) object. If a callback is used, the object is - // passed to it instead. - // |scannerHandle| : The handle of the scanner to set options on. This - // should be a value previously returned from a call to $(ref:openScanner). - // |options| : A list of OptionSetting objects to be applied to - // the scanner. - // |callback| : Returns a Promise which resolves with the result. - static void setOptions( - DOMString scannerHandle, OptionSetting[] options, - SetOptionsCallback callback); - - // Starts a scan on the specified scanner and returns a Promise that - // resolves with a $(ref:StartScanResponse). If a callback is used, - // the object is passed to it instead. If the call was successful, the - // response includes a job handle that can be used in subsequent calls - // to read scan data or cancel a scan. - // |scannerHandle| : The handle of an open scanner. This should be a value - // previously returned from a call to $(ref:openScanner). - // |options| : A $(ref:StartScanOptions) object indicating the options to - // be used for the scan. The StartScanOptions.format property - // must match one of the entries returned in the scanner's - // ScannerInfo. - // |callback| : Returns a Promise which resolves with the result. - static void startScan( - DOMString scannerHandle, StartScanOptions options, - StartScanCallback callback); - - // Cancels a started scan and returns a Promise that resolves with a - // $(ref:CancelScanResponse) object. If a callback is used, the object - // is passed to it instead. - // |job| : The handle of an active scan job previously returned from a - // call to $(ref:startScan). - // |callback| : Returns a Promise which resolves with the result. - static void cancelScan( - DOMString job, CancelScanCallback callback); - - // Reads the next chunk of available image data from an active job handle, - // and returns a Promise that resolves with a $(ref:ReadScanDataResponse) - // object. If a callback is used, the object is passed to it instead. - // - // - // - // |job| : Active job handle previously returned from - // $(ref:startScan). - // |callback| : Returns a Promise which resolves with the result. - static void readScanData( - DOMString job, ReadScanDataCallback callback); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/downloads.idl b/tools/under-control/src/chrome/common/extensions/api/downloads.idl deleted file mode 100755 index 295aaddc4..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/downloads.idl +++ /dev/null @@ -1,648 +0,0 @@ -// Copyright 2012 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.downloads API to programmatically initiate, -// monitor, manipulate, and search for downloads. -[permissions=downloads] -namespace downloads { - [inline_doc] dictionary HeaderNameValuePair { - // Name of the HTTP header. - DOMString name; - - // Value of the HTTP header. - DOMString value; - }; - - //
uniquify
- //
To avoid duplication, the filename is changed to - // include a counter before the filename extension.
- //
overwrite
- //
The existing file will be overwritten with the new file.
- //
prompt
- //
The user will be prompted with a file chooser dialog.
- //
- enum FilenameConflictAction {uniquify, overwrite, prompt}; - - [inline_doc] dictionary FilenameSuggestion { - // The $(ref:DownloadItem)'s new target $(ref:DownloadItem.filename), as a path - // relative to the user's default Downloads directory, possibly containing - // subdirectories. Absolute paths, empty paths, and paths containing - // back-references ".." will be ignored. filename is ignored if - // there are any $(ref:onDeterminingFilename) listeners registered by any - // extensions. - DOMString filename; - - // The action to take if filename already exists. - FilenameConflictAction? conflictAction; - }; - - [inline_doc] enum HttpMethod {GET, POST}; - - enum InterruptReason { - FILE_FAILED, - FILE_ACCESS_DENIED, - FILE_NO_SPACE, - FILE_NAME_TOO_LONG, - FILE_TOO_LARGE, - FILE_VIRUS_INFECTED, - FILE_TRANSIENT_ERROR, - FILE_BLOCKED, - FILE_SECURITY_CHECK_FAILED, - FILE_TOO_SHORT, - FILE_HASH_MISMATCH, - FILE_SAME_AS_SOURCE, - NETWORK_FAILED, - NETWORK_TIMEOUT, - NETWORK_DISCONNECTED, - NETWORK_SERVER_DOWN, - NETWORK_INVALID_REQUEST, - SERVER_FAILED, - SERVER_NO_RANGE, - SERVER_BAD_CONTENT, - SERVER_UNAUTHORIZED, - SERVER_CERT_PROBLEM, - SERVER_FORBIDDEN, - SERVER_UNREACHABLE, - SERVER_CONTENT_LENGTH_MISMATCH, - SERVER_CROSS_ORIGIN_REDIRECT, - USER_CANCELED, - USER_SHUTDOWN, - CRASH}; - - [inline_doc] dictionary DownloadOptions { - // The URL to download. - DOMString url; - - // A file path relative to the Downloads directory to contain the downloaded - // file, possibly containing subdirectories. Absolute paths, empty paths, - // and paths containing back-references ".." will cause an error. - // $(ref:onDeterminingFilename) allows suggesting a filename after the file's - // MIME type and a tentative filename have been determined. - DOMString? filename; - - // The action to take if filename already exists. - FilenameConflictAction? conflictAction; - - // Use a file-chooser to allow the user to select a filename regardless of - // whether filename is set or already exists. - boolean? saveAs; - - // The HTTP method to use if the URL uses the HTTP[S] protocol. - HttpMethod? method; - - // Extra HTTP headers to send with the request if the URL uses the HTTP[s] - // protocol. Each header is represented as a dictionary containing the keys - // name and either value or - // binaryValue, restricted to those allowed by XMLHttpRequest. - HeaderNameValuePair[]? headers; - - // Post body. - DOMString? body; - }; - - enum DangerType { - // The download's filename is suspicious. - file, - - // The download's URL is known to be malicious. - url, - - // The downloaded file is known to be malicious. - content, - - - // The download's URL is not commonly downloaded and could be dangerous. - uncommon, - - // The download came from a host known to distribute malicious binaries and - // is likely dangerous. - host, - - // The download is potentially unwanted or unsafe. E.g. it could make - // changes to browser or computer settings. - unwanted, - - - // The download presents no known danger to the user's computer. - safe, - - // The user has accepted the dangerous download. - accepted, - - // Enterprise-related values. - allowlistedByPolicy, - asyncScanning, - asyncLocalPasswordScanning, - passwordProtected, - blockedTooLarge, - sensitiveContentWarning, - sensitiveContentBlock, - deepScannedFailed, - deepScannedSafe, - deepScannedOpenedDangerous, - promptForScanning, - promptForLocalPasswordScanning, - accountCompromise, - blockedScanFailed, - - // For use by the Secure Enterprise Browser extension. When required, Chrome - // will block the download to disc and download the file directly to Google - // Drive. - forceSaveToGdrive, - - // For use by the Secure Enterprise Browser extension. When required, Chrome - // will block the download to disc and download the file directly to - // OneDrive. - forceSaveToOnedrive - }; - - //
in_progress
- //
The download is currently receiving data from the server.
- //
interrupted
- //
An error broke the connection with the file host.
- //
complete
- //
The download completed successfully.
- //
- enum State {in_progress, interrupted, complete}; - - // The state of the process of downloading a file. - dictionary DownloadItem { - // An identifier that is persistent across browser sessions. - long id; - - // The absolute URL that this download initiated from, before any - // redirects. - DOMString url; - - // The absolute URL that this download is being made from, after all - // redirects. - DOMString finalUrl; - - // Absolute URL. - DOMString referrer; - - // Absolute local path. - DOMString filename; - - // False if this download is recorded in the history, true if it is not - // recorded. - boolean incognito; - - // Indication of whether this download is thought to be safe or known to be - // suspicious. - DangerType danger; - - // The file's MIME type. - DOMString mime; - - // The time when the download began in ISO 8601 format. May be passed - // directly to the Date constructor: chrome.downloads.search({}, - // function(items){items.forEach(function(item){console.log(new - // Date(item.startTime))})}) - DOMString startTime; - - // The time when the download ended in ISO 8601 format. May be passed - // directly to the Date constructor: chrome.downloads.search({}, - // function(items){items.forEach(function(item){if (item.endTime) - // console.log(new Date(item.endTime))})}) - DOMString? endTime; - - // Estimated time when the download will complete in ISO 8601 format. May be - // passed directly to the Date constructor: - // chrome.downloads.search({}, - // function(items){items.forEach(function(item){if (item.estimatedEndTime) - // console.log(new Date(item.estimatedEndTime))})}) - DOMString? estimatedEndTime; - - // Indicates whether the download is progressing, interrupted, or complete. - State state; - - // True if the download has stopped reading data from the host, but kept the - // connection open. - boolean paused; - - // True if the download is in progress and paused, or else if it is - // interrupted and can be resumed starting from where it was interrupted. - boolean canResume; - - // Why the download was interrupted. Several kinds of HTTP errors may be - // grouped under one of the errors beginning with SERVER_. - // Errors relating to the network begin with NETWORK_, errors - // relating to the process of writing the file to the file system begin with - // FILE_, and interruptions initiated by the user begin with - // USER_. - InterruptReason? error; - - // Number of bytes received so far from the host, without considering file - // compression. - double bytesReceived; - - // Number of bytes in the whole file, without considering file compression, - // or -1 if unknown. - double totalBytes; - - // Number of bytes in the whole file post-decompression, or -1 if unknown. - double fileSize; - - // Whether the downloaded file still exists. This information may be out of - // date because Chrome does not automatically watch for file removal. Call - // $(ref:search)() in order to trigger the check for file existence. When the - // existence check completes, if the file has been deleted, then an - // $(ref:onChanged) event will fire. Note that $(ref:search)() does not wait - // for the existence check to finish before returning, so results from - // $(ref:search)() may not accurately reflect the file system. Also, - // $(ref:search)() may be called as often as necessary, but will not check for - // file existence any more frequently than once every 10 seconds. - boolean exists; - - // The identifier for the extension that initiated this download if this - // download was initiated by an extension. Does not change once it is set. - DOMString? byExtensionId; - - // The localized name of the extension that initiated this download if this - // download was initiated by an extension. May change if the extension - // changes its name or if the user changes their locale. - DOMString? byExtensionName; - }; - - [inline_doc] dictionary DownloadQuery { - // This array of search terms limits results to $(ref:DownloadItem) whose - // filename or url or finalUrl - // contain all of the search terms that do not begin with a dash '-' and - // none of the search terms that do begin with a dash. - DOMString[]? query; - - // Limits results to $(ref:DownloadItem) that - // started before the given ms in ISO 8601 format. - DOMString? startedBefore; - - // Limits results to $(ref:DownloadItem) that - // started after the given ms in ISO 8601 format. - DOMString? startedAfter; - - // Limits results to $(ref:DownloadItem) that ended before the given ms in - // ISO 8601 format. - DOMString? endedBefore; - - // Limits results to $(ref:DownloadItem) that ended after the given ms in - // ISO 8601 format - DOMString? endedAfter; - - // Limits results to $(ref:DownloadItem) whose - // totalBytes is greater than the given integer. - double? totalBytesGreater; - - // Limits results to $(ref:DownloadItem) whose - // totalBytes is less than the given integer. - double? totalBytesLess; - - // Limits results to $(ref:DownloadItem) whose - // filename matches the given regular expression. - DOMString? filenameRegex; - - // Limits results to $(ref:DownloadItem) whose - // url matches the given regular expression. - DOMString? urlRegex; - - // Limits results to $(ref:DownloadItem) whose - // finalUrl matches the given regular expression. - DOMString? finalUrlRegex; - - // The maximum number of matching $(ref:DownloadItem) returned. Defaults to - // 1000. Set to 0 in order to return all matching $(ref:DownloadItem). See - // $(ref:search) for how to page through results. - long? limit; - - // Set elements of this array to $(ref:DownloadItem) properties in order to - // sort search results. For example, setting - // orderBy=['startTime'] sorts the $(ref:DownloadItem) by their - // start time in ascending order. To specify descending order, prefix with a - // hyphen: '-startTime'. - DOMString[]? orderBy; - - // The id of the $(ref:DownloadItem) to query. - long? id; - - // The absolute URL that this download initiated from, before any - // redirects. - DOMString? url; - - // The absolute URL that this download is being made from, after all - // redirects. - DOMString? finalUrl; - - // Absolute local path. - DOMString? filename; - - // Indication of whether this download is thought to be safe or known to be - // suspicious. - DangerType? danger; - - // The file's MIME type. - DOMString? mime; - - // The time when the download began in ISO 8601 format. - DOMString? startTime; - - // The time when the download ended in ISO 8601 format. - DOMString? endTime; - - // Indicates whether the download is progressing, interrupted, or complete. - State? state; - - // True if the download has stopped reading data from the host, but kept the - // connection open. - boolean? paused; - - // Why a download was interrupted. - InterruptReason? error; - - // Number of bytes received so far from the host, without considering file - // compression. - double? bytesReceived; - - // Number of bytes in the whole file, without considering file compression, - // or -1 if unknown. - double? totalBytes; - - // Number of bytes in the whole file post-decompression, or -1 if unknown. - double? fileSize; - - // Whether the downloaded file exists; - boolean? exists; - }; - - dictionary StringDelta { - DOMString? previous; - DOMString? current; - }; - - dictionary DoubleDelta { - double? previous; - double? current; - }; - - dictionary BooleanDelta { - boolean? previous; - boolean? current; - }; - - // Encapsulates a change in a DownloadItem. - [inline_doc] dictionary DownloadDelta { - // The id of the $(ref:DownloadItem) - // that changed. - long id; - - // The change in url, if any. - StringDelta? url; - - // The change in finalUrl, if any. - StringDelta? finalUrl; - - // The change in filename, if any. - StringDelta? filename; - - // The change in danger, if any. - StringDelta? danger; - - // The change in mime, if any. - StringDelta? mime; - - // The change in startTime, if any. - StringDelta? startTime; - - // The change in endTime, if any. - StringDelta? endTime; - - // The change in state, if any. - StringDelta? state; - - // The change in canResume, if any. - BooleanDelta? canResume; - - // The change in paused, if any. - BooleanDelta? paused; - - // The change in error, if any. - StringDelta? error; - - // The change in totalBytes, if any. - DoubleDelta? totalBytes; - - // The change in fileSize, if any. - DoubleDelta? fileSize; - - // The change in exists, if any. - BooleanDelta? exists; - }; - - [inline_doc] dictionary GetFileIconOptions { - // The size of the returned icon. The icon will be square with dimensions - // size * size pixels. The default and largest size for the icon is 32x32 - // pixels. The only supported sizes are 16 and 32. It is an error to specify - // any other size. - long? size; - }; - - // Encapsulates a change in the download UI. - [inline_doc] dictionary UiOptions { - // Enable or disable the download UI. - boolean enabled; - }; - - callback DownloadCallback = void(long downloadId); - callback SearchCallback = void(DownloadItem[] results); - callback EraseCallback = void(long[] erasedIds); - callback NullCallback = void(); - callback GetFileIconCallback = void(optional DOMString iconURL); - callback SuggestFilenameCallback = void( - optional FilenameSuggestion suggestion); - - interface Functions { - // Download a URL. If the URL uses the HTTP[S] protocol, then the request - // will include all cookies currently set for its hostname. If both - // filename and saveAs are specified, then the - // Save As dialog will be displayed, pre-populated with the specified - // filename. If the download started successfully, - // callback will be called with the new $(ref:DownloadItem)'s - // downloadId. If there was an error starting the download, - // then callback will be called with - // downloadId=undefined and $(ref:runtime.lastError) will contain - // a descriptive string. The error strings are not guaranteed to remain - // backwards compatible between releases. Extensions must not parse it. - // |options|: What to download and how. - // |callback|: Returns a Promise which resolves with the id of the new - // $(ref:DownloadItem). - static void download( - DownloadOptions options, - optional DownloadCallback callback); - - // Find $(ref:DownloadItem). Set query to the empty object to get - // all $(ref:DownloadItem). To get a specific $(ref:DownloadItem), set only the - // id field. To page through a large number of items, set - // orderBy: ['-startTime'], set limit to the - // number of items per page, and set startedAfter to the - // startTime of the last item from the last page. - static void search( - DownloadQuery query, - SearchCallback callback); - - // Pause the download. If the request was successful the download is in a - // paused state. Otherwise $(ref:runtime.lastError) contains an error message. - // The request will fail if the download is not active. - // |downloadId|: The id of the download to pause. - // |callback|: Returns a Promise which resolves when the pause request is - // completed. - static void pause( - long downloadId, - optional NullCallback callback); - - // Resume a paused download. If the request was successful the download is - // in progress and unpaused. Otherwise $(ref:runtime.lastError) contains an - // error message. The request will fail if the download is not active. - // |downloadId|: The id of the download to resume. - // |callback|: Returns a Promise which resolves when the resume request is - // completed. - static void resume( - long downloadId, - optional NullCallback callback); - - // Cancel a download. When callback is run, the download is - // cancelled, completed, interrupted or doesn't exist anymore. - // |downloadId|: The id of the download to cancel. - // |callback|: Returns a Promise which resolves when the cancel request is - // completed. - static void cancel( - long downloadId, - optional NullCallback callback); - - // Retrieve an icon for the specified download. For new downloads, file - // icons are available after the $(ref:onCreated) event has been received. The - // image returned by this function while a download is in progress may be - // different from the image returned after the download is complete. Icon - // retrieval is done by querying the underlying operating system or toolkit - // depending on the platform. The icon that is returned will therefore - // depend on a number of factors including state of the download, platform, - // registered file types and visual theme. If a file icon cannot be - // determined, $(ref:runtime.lastError) will contain an error message. - // |downloadId|: The identifier for the download. - // |callback|: Returns a Promise which resolves with a URL to an image that - // represents the download. - static void getFileIcon( - long downloadId, - optional GetFileIconOptions options, - GetFileIconCallback callback); - - // Opens the downloaded file now if the $(ref:DownloadItem) is complete; - // otherwise returns an error through $(ref:runtime.lastError). This method - // requires the "downloads.open" permission in addition to the - // "downloads" permission. An $(ref:onChanged) event fires - // when the item is opened for the first time. This method can only be called - // in response to a user gesture. - // |downloadId|: The identifier for the downloaded file. - static void open(long downloadId, - optional NullCallback callback); - - // Show the downloaded file in its folder in a file manager. - // |downloadId|: The identifier for the downloaded file. - static void show(long downloadId); - - // Show the default Downloads folder in a file manager. - static void showDefaultFolder(); - - // Erase matching $(ref:DownloadItem) from history without deleting the - // downloaded file. An $(ref:onErased) event will fire for each - // $(ref:DownloadItem) that matches query, then - // callback will be called. - static void erase( - DownloadQuery query, - optional EraseCallback callback); - - // Remove the downloaded file if it exists and the $(ref:DownloadItem) is - // complete; otherwise return an error through $(ref:runtime.lastError). - static void removeFile( - long downloadId, - optional NullCallback callback); - - // Prompt the user to accept a dangerous download. Can only be called from a - // visible context (tab, window, or page/browser action popup). Does not - // automatically accept dangerous downloads. If the download is accepted, - // then an $(ref:onChanged) event will fire, otherwise nothing will happen. - // When all the data is fetched into a temporary file and either the - // download is not dangerous or the danger has been accepted, then the - // temporary file is renamed to the target filename, the |state| changes to - // 'complete', and $(ref:onChanged) fires. - // |downloadId|: The identifier for the $(ref:DownloadItem). - // |callback|: Returns a Promise which resolves when the danger prompt - // dialog closes. - static void acceptDanger( - long downloadId, - optional NullCallback callback); - - // Enable or disable the gray shelf at the bottom of every window associated - // with the current browser profile. The shelf will be disabled as long as - // at least one extension has disabled it. Enabling the shelf while at least - // one other extension has disabled it will return an error through - // $(ref:runtime.lastError). Requires the "downloads.shelf" - // permission in addition to the "downloads" permission. - [deprecated="Use $(ref:setUiOptions) instead."] - static void setShelfEnabled(boolean enabled); - - // Change the download UI of every window associated with the current - // browser profile. As long as at least one extension has set - // $(ref:UiOptions.enabled) to false, the download UI will be hidden. - // Setting $(ref:UiOptions.enabled) to true while at least one other - // extension has disabled it will return an error through - // $(ref:runtime.lastError). Requires the "downloads.ui" - // permission in addition to the "downloads" permission. - // |options|: Encapsulate a change to the download UI. - // |callback|: Returns a Promise which resolves when the UI update is - // completed. - static void setUiOptions( - UiOptions options, - optional NullCallback callback); - }; - - interface Events { - // This event fires with the $(ref:DownloadItem) object when a download - // begins. - static void onCreated(DownloadItem downloadItem); - - // Fires with the downloadId when a download is erased from - // history. - // |downloadId|: The id of the $(ref:DownloadItem) that was - // erased. - static void onErased(long downloadId); - - // When any of a $(ref:DownloadItem)'s properties except - // bytesReceived and estimatedEndTime changes, - // this event fires with the downloadId and an object - // containing the properties that changed. - static void onChanged(DownloadDelta downloadDelta); - - // During the filename determination process, extensions will be given the - // opportunity to override the target $(ref:DownloadItem.filename). Each - // extension may not register more than one listener for this event. Each - // listener must call suggest exactly once, either - // synchronously or asynchronously. If the listener calls - // suggest asynchronously, then it must return - // true. If the listener neither calls suggest - // synchronously nor returns true, then suggest - // will be called automatically. The $(ref:DownloadItem) will not complete - // until all listeners have called suggest. Listeners may call - // suggest without any arguments in order to allow the download - // to use downloadItem.filename for its filename, or pass a - // suggestion object to suggest in order to - // override the target filename. If more than one extension overrides the - // filename, then the last extension installed whose listener passes a - // suggestion object to suggest wins. In order to - // avoid confusion regarding which extension will win, users should not - // install extensions that may conflict. If the download is initiated by - // $(ref:download) and the target filename is known before the MIME type and - // tentative filename have been determined, pass filename to - // $(ref:download) instead. - [maxListeners=1] static void onDeterminingFilename( - DownloadItem downloadItem, SuggestFilenameCallback suggest); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/downloads_internal.idl b/tools/under-control/src/chrome/common/extensions/api/downloads_internal.idl deleted file mode 100755 index aa75a073d..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/downloads_internal.idl +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2012 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// downloadsInternal -[nodoc=true] -namespace downloadsInternal { - interface Functions { - // Secretly called when onDeterminingFilename handlers return. - static void determineFilename(long downloadId, - DOMString filename, - DOMString conflict_action); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl deleted file mode 100755 index fcbda81dc..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl +++ /dev/null @@ -1,65 +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.enterprise.deviceAttributes API to read device -// attributes. -// Note: This API is only available to extensions force-installed by enterprise -// policy. -namespace enterprise.deviceAttributes { - callback GetDirectoryDeviceIdCallback = void (DOMString deviceId); - - callback GetDeviceSerialNumberCallback = void (DOMString serialNumber); - - callback GetDeviceAssetIdCallback = void (DOMString assetId); - - callback GetDeviceAnnotatedLocationCallback = void (DOMString annotatedLocation); - - callback GetDeviceHostnameCallback = void (DOMString hostname); - - interface Functions { - // Fetches the value of - // the device identifier of the directory API, - // that is generated by the server and identifies the cloud record of the - // device for querying in the cloud directory API. - // If the current user is not affiliated, returns an empty string. - // |callback| : Returns a Promise which resolves with the device identifier - // of the directory API. - void getDirectoryDeviceId( - GetDirectoryDeviceIdCallback callback); - - // Fetches the device's serial number. Please note the purpose of this API - // is to administrate the device (e.g. generating Certificate Sign Requests - // for device-wide certificates). This API may not be used for tracking - // devices without the consent of the device's administrator. - // If the current user is not affiliated, returns an empty string. - // |callback| : Returns a Promise which resolves with the serial number of - // the device. - void getDeviceSerialNumber( - GetDeviceSerialNumberCallback callback); - - // Fetches the administrator-annotated Asset Id. - // If the current user is not affiliated or no Asset Id has been set by the - // administrator, returns an empty string. - // |callback| : Returns a Promise which resolves with the Asset ID of the - // device. - void getDeviceAssetId(GetDeviceAssetIdCallback callback); - - // Fetches the administrator-annotated Location. - // If the current user is not affiliated or no Annotated Location has been - // set by the administrator, returns an empty string. - // |callback| : Returns a Promise which resolves with the Annotated - // Location of the device. - void getDeviceAnnotatedLocation( - GetDeviceAnnotatedLocationCallback callback); - - // Fetches the device's hostname as set by DeviceHostnameTemplate policy. - // If the current user is not affiliated or no hostname has been set by the - // enterprise policy, returns an empty string. - // |callback| : Returns a Promise which resolves with the hostname of the - // device. - void getDeviceHostname( - GetDeviceHostnameCallback callback); - }; - -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl deleted file mode 100755 index 3b3772f81..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl +++ /dev/null @@ -1,25 +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. - -// Use the chrome.enterprise.hardwarePlatform API to get the -// manufacturer and model of the hardware platform where the browser runs. -// Note: This API is only available to extensions installed by enterprise -// policy. -namespace enterprise.hardwarePlatform { - dictionary HardwarePlatformInfo { - DOMString model; - DOMString manufacturer; - }; - - callback HardwarePlatformInfoCallback = void(HardwarePlatformInfo info); - - interface Functions { - // Obtains the manufacturer and model for the hardware platform and, if - // the extension is authorized, returns it via |callback|. - // |callback|: Returns a Promise which resolves with the hardware platform - // info. - static void getHardwarePlatformInfo( - HardwarePlatformInfoCallback callback); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.idl deleted file mode 100755 index a6d2dc088..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.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. - -// Use the chrome.enterprise.kioskInput API to change input -// settings for Kiosk sessions. -// Note: This API is only available to extensions installed by enterprise -// policy in ChromeOS Kiosk sessions. -[platforms = ("chromeos"), - implemented_in = "chrome/browser/extensions/api/enterprise_kiosk_input/enterprise_kiosk_input_api.h"] -namespace enterprise.kioskInput { - dictionary SetCurrentInputMethodOptions { - // The input method ID to set as current input method. This input - // method has to be enabled by enterprise policies. Supported IDs - // are located in https://crsrc.org/c/chrome/browser/resources/chromeos/input_method. - DOMString inputMethodId; - }; - - callback SetCurrentInputMethodCallback = void(); - - interface Functions { - // Sets the current input method. This function only changes - // the current input method to an enabled input method. - // Input methods can be enabled by enterprise polices. - // If the input method ID is invalid, or not enabled, - // $(ref:runtime.lastError) will be set with a failure reason. - // |options|: Object containing the fields defined in - // $(ref:SetCurrentInputMethodOptions). - // |callback|: Returns a Promise which resolves when the input method is - // changed, or rejects if there is an error. - static void setCurrentInputMethod( - SetCurrentInputMethodOptions options, - SetCurrentInputMethodCallback callback); -}; - -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_login.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_login.idl deleted file mode 100755 index 5d4a40b57..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_login.idl +++ /dev/null @@ -1,17 +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. - -// Use the chrome.enterprise.login API to exit Managed Guest -// sessions. Note: This API is only available to extensions installed by -// enterprise policy in ChromeOS Managed Guest sessions. -[platforms = ("chromeos"), - implemented_in = "chrome/browser/extensions/api/enterprise_login/enterprise_login_api.h"] -namespace enterprise.login { - callback VoidCallback = void (); - interface Functions { - // Exits the current managed guest session. - static void exitCurrentManagedGuestSession( - optional VoidCallback callback); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl deleted file mode 100755 index 5b1cdccd3..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl +++ /dev/null @@ -1,34 +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. - -// Use the chrome.enterprise.networkingAttributes API to read -// information about your current network. -// Note: This API is only available to extensions force-installed by enterprise -// policy. -[platforms = ("chromeos"), - implemented_in = "chrome/browser/extensions/api/enterprise_networking_attributes/enterprise_networking_attributes_api.h"] -namespace enterprise.networkingAttributes { - [noinline_doc] dictionary NetworkDetails { - // The device's MAC address. - DOMString macAddress; - - // The device's local IPv4 address (undefined if not configured). - DOMString? ipv4; - - // The device's local IPv6 address (undefined if not configured). - DOMString? ipv6; - }; - - callback GetNetworkDetailsCallback = void(NetworkDetails networkAddresses); - - interface Functions { - // Retrieves the network details of the device's default network. - // If the user is not affiliated or the device is not connected to a - // network, $(ref:runtime.lastError) will be set with a failure reason. - // |callback| : Returns a Promise which resolves with the device's default - // network's $(ref:NetworkDetails). - void getNetworkDetails( - GetNetworkDetailsCallback callback); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl deleted file mode 100755 index 5e08574c0..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Use the chrome.enterprise.platformKeys API to generate keys and -// install certificates for these keys. The certificates will be managed by the -// platform and can be used for TLS authentication, network access or by other -// extension through $(ref:platformKeys chrome.platformKeys). -[platforms = ("chromeos")] -namespace enterprise.platformKeys { - [nocompile] dictionary Token { - // Uniquely identifies this Token. - //

Static IDs are "user" and "system", - // referring to the platform's user-specific and the system-wide hardware - // token, respectively. Any other tokens (with other identifiers) might be - // returned by $(ref:enterprise.platformKeys.getTokens).

- DOMString id; - - // Implements the WebCrypto's - // SubtleCrypto - // 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 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.

- //

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 - // created with window.crypto.subtle cannot be used with this - // interface.

- [instanceOf = SubtleCrypto] object subtleCrypto; - - // Implements the WebCrypto's - // SubtleCrypto - // interface. The cryptographic operations, including key generation, are - // 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 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.

- //

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 - // created with window.crypto.subtle cannot be used with this - // interface.

- [instanceOf = SubtleCrypto] object softwareBackedSubtleCrypto; - }; - - // Whether to use the Enterprise User Key or the Enterprise Machine Key. - enum Scope { USER, MACHINE }; - - // Type of key to generate. - enum Algorithm { RSA, ECDSA }; - - // Invoked by getTokens with the list of available Tokens. - // |tokens|: The list of available tokens. - callback GetTokensCallback = void(Token[] tokens); - - // Callback to which the certificates are passed. - // |certificates|: The list of certificates, each in DER encoding of a X.509 - // certificate. - callback GetCertificatesCallback = void(ArrayBuffer[] certificates); - - // Invoked by importCertificate or removeCertificate when the respective - // operation is finished. - callback DoneCallback = void(); - - // Invoked by challengeMachineKey or - // challengeUserKey with the challenge response. - // |response|: The challenge response. - callback ChallengeCallback = void(ArrayBuffer response); - - dictionary RegisterKeyOptions { - // Which algorithm the registered key should use. - Algorithm algorithm; - }; - - dictionary ChallengeKeyOptions { - // A challenge as emitted by the Verified Access Web API. - ArrayBuffer challenge; - // If present, registers the challenged key with the specified - // scope's token. The key can then be associated with a - // certificate and used like any other signing key. Subsequent calls to - // this function will then generate a new Enterprise Key in the specified - // scope. - RegisterKeyOptions? registerKey; - // Which Enterprise Key to challenge. - Scope scope; - }; - - interface Functions { - // Returns the available Tokens. In a regular user's session the list will - // always contain the user's token with id "user". - // If a system-wide TPM token is available, the returned list will also - // contain the system-wide token with id "system". - // The system-wide token will be the same for all sessions on this device - // (device in the sense of e.g. a Chromebook). - [nocompile] static void getTokens(GetTokensCallback callback); - - // Returns the list of all client certificates available from the given - // token. Can be used to check for the existence and expiration of client - // certificates that are usable for a certain authentication. - // |tokenId|: The id of a Token returned by getTokens. - // |callback|: Returns a Promise which resolves with the list of the - // available certificates. - static void getCertificates(DOMString tokenId, - GetCertificatesCallback callback); - - // Imports certificate to the given token if the certified key - // is already stored in this token. - // After a successful certification request, this function should be used to - // store the obtained certificate and to make it available to the operating - // system and browser for authentication. - // |tokenId|: The id of a Token returned by getTokens. - // |certificate|: The DER encoding of a X.509 certificate. - // |callback|: Returns a Promise which resolves when this operation is - // finished. - static void importCertificate(DOMString tokenId, - ArrayBuffer certificate, - optional DoneCallback callback); - - // Removes certificate from the given token if present. - // Should be used to remove obsolete certificates so that they are not - // considered during authentication and do not clutter the certificate - // choice. Should be used to free storage in the certificate store. - // |tokenId|: The id of a Token returned by getTokens. - // |certificate|: The DER encoding of a X.509 certificate. - // |callback|: Returns a Promise which resolves when this operation is - // finished. - static void removeCertificate(DOMString tokenId, - ArrayBuffer certificate, - optional DoneCallback callback); - - // Similar to challengeMachineKey and - // challengeUserKey, but allows specifying the algorithm of a - // registered key. Challenges a hardware-backed Enterprise Machine Key and - // emits the response as part of a remote attestation protocol. Only useful - // on ChromeOS and in conjunction with the Verified Access Web API which - // both issues challenges and verifies responses. - // - // A successful verification by the Verified Access Web API is a strong - // signal that the current device is a legitimate ChromeOS device, the - // current device is managed by the domain specified during verification, - // the current signed-in user is managed by the domain specified during - // verification, and the current device state complies with enterprise - // device policy. For example, a policy may specify that the device must not - // be in developer mode. Any device identity emitted by the verification is - // tightly bound to the hardware of the current device. If - // "user" Scope is specified, the identity is also tightly - // bound to the current signed-in user. - // - // This function is highly restricted and will fail if the current device is - // not managed, the current user is not managed, or if this operation has - // not explicitly been enabled for the caller by enterprise device policy. - // The challenged key does not reside in the "system" or - // "user" token and is not accessible by any other API. - // |options|: Object containing the fields defined in - // $(ref:ChallengeKeyOptions). - // |callback|: Returns a Promise which resolves with the challenge response. - static void challengeKey(ChallengeKeyOptions options, - ChallengeCallback callback); - - // Challenges a hardware-backed Enterprise Machine Key and emits the - // response as part of a remote attestation protocol. Only useful on - // ChromeOS and in conjunction with the Verified Access Web API which both - // issues challenges and verifies responses. A successful verification by - // the Verified Access Web API is a strong signal of all of the following: - // * The current device is a legitimate ChromeOS device. - // * The current device is managed by the domain specified during - // verification. - // * The current signed-in user is managed by the domain specified during - // verification. - // * The current device state complies with enterprise device policy. For - // example, a policy may specify that the device must not be in developer - // mode. - // * Any device identity emitted by the verification is tightly bound to the - // hardware of the current device. - // This function is highly restricted and will fail if the current device - // is not managed, the current user is not managed, or if this operation - // has not explicitly been enabled for the caller by enterprise device - // policy. The Enterprise Machine Key does not reside in the - // "system" token and is not accessible by any other API. - // |challenge|: A challenge as emitted by the Verified Access Web API. - // |registerKey|: If set, the current Enterprise Machine Key is registered - // with the "system" token and relinquishes the - // Enterprise Machine Key role. The key can then be - // associated with a certificate and used like any other - // signing key. This key is 2048-bit RSA. Subsequent calls - // to this function will then generate a new Enterprise - // Machine Key. - // |callback|: Returns a Promise which resolves with the challenge response. - [deprecated="Use $(ref:challengeKey) instead."] - static void challengeMachineKey(ArrayBuffer challenge, - optional boolean registerKey, - ChallengeCallback callback); - - // Challenges a hardware-backed Enterprise User Key and emits the response - // as part of a remote attestation protocol. Only useful on ChromeOS and in - // conjunction with the Verified Access Web API which both issues challenges - // and verifies responses. A successful verification by the Verified Access - // Web API is a strong signal of all of the following: - // * The current device is a legitimate ChromeOS device. - // * The current device is managed by the domain specified during - // verification. - // * The current signed-in user is managed by the domain specified during - // verification. - // * The current device state complies with enterprise user policy. For - // example, a policy may specify that the device must not be in developer - // mode. - // * The public key emitted by the verification is tightly bound to the - // hardware of the current device and to the current signed-in user. - // This function is highly restricted and will fail if the current device is - // not managed, the current user is not managed, or if this operation has - // not explicitly been enabled for the caller by enterprise user policy. - // The Enterprise User Key does not reside in the "user" token - // and is not accessible by any other API. - // |challenge|: A challenge as emitted by the Verified Access Web API. - // |registerKey|: If set, the current Enterprise User Key is registered with - // the "user" token and relinquishes the - // Enterprise User Key role. The key can then be associated - // with a certificate and used like any other signing key. - // This key is 2048-bit RSA. Subsequent calls to this - // function will then generate a new Enterprise User Key. - // |callback|: Returns a Promise which resolves with the challenge response. - [deprecated="Use $(ref:challengeKey) instead."] - static void challengeUserKey(ArrayBuffer challenge, - boolean registerKey, - ChallengeCallback callback); - }; -}; 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 deleted file mode 100755 index 2eb3c5e35..000000000 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys_internal.idl +++ /dev/null @@ -1,60 +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. - -// Internal API for platform keys and certificate management. -[ platforms = ("chromeos"), - implemented_in = "chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.h" ] -namespace enterprise.platformKeysInternal { - dictionary Hash { - DOMString name; - }; - - // For more information about the RSA key generation parameters, please refer - // to: https://www.w3.org/TR/WebCryptoAPI/#RsaHashedKeyGenParams-dictionary - // For more information about the ECDSA key generation parameters, please - // refer to: https://www.w3.org/TR/WebCryptoAPI/#dfn-EcdsaParams - // Note: |hash| is not used by generateKey() but is added to completely - // mirror WebCrypto in using RsaHashedKeyAlgorithm to be able to wrap all - // parameters in one structure. - dictionary Algorithm { - // Provided for all algorithms. - DOMString name; - - // Provided in case the algorithm is RSASSA-PKCS1-v1_5. - long? modulusLength; - ArrayBuffer? publicExponent; - Hash? hash; - - // Provided in case the algorithm is ECDSA. - DOMString? namedCurve; - }; - - // Invoked by getTokens. - // |tokenIds| The list of IDs of the available Tokens. - callback GetTokensCallback = void(DOMString[] tokenIds); - - // Invoked by generateKey. - // |publicKey| The Subject Public Key Info (see X.509) of the generated key - // in DER encoding. - callback GenerateKeyCallback = void(ArrayBuffer publicKey); - - interface Functions { - // Internal version of enterprise.platformKeys.getTokens. Returns a list of - // token IDs instead of token objects. - static void getTokens(GetTokensCallback callback); - - // Internal version of SubtleCrypto.generateKey, currently supporting only - // 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 - // software. - // |callback| Called back with the Subject Public Key Info of the generated - // key. - static void generateKey(DOMString tokenId, - Algorithm algorithm, - boolean softwareBacked, - GenerateKeyCallback callback); - }; -}; diff --git a/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl b/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl index dde3cbcef..8b05f661f 100755 --- a/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl +++ b/tools/under-control/src/chrome/common/extensions/api/passwords_private.idl @@ -127,6 +127,16 @@ namespace passwordsPrivate { SUCCESS }; + enum PasswordManagerActionableError { + NO_ERROR, + INACTIONABLE, + INACTIONABLE_TEMPORARY_ERROR, + SIGN_IN_NEEDED, + KEYCHAIN_ERROR, + TRUSTED_VAULT_KEY_NEEDED, + NEEDS_PASSPHRASE + }; + dictionary PublicKey { // The value of the public key. DOMString value; @@ -372,20 +382,14 @@ namespace passwordsPrivate { callback ExceptionListCallback = void(ExceptionEntry[] exceptions); callback ExportProgressStatusCallback = void(ExportProgressStatus status); callback VoidCallback = void(); - callback IsAccountStorageActiveCallback = void(boolean enabled); - callback ShouldShowAccountStorageSettingToggleCallback = void(boolean show); callback PasswordCheckStatusCallback = void(PasswordCheckStatus status); callback ImportPasswordsCallback = void(ImportResults results); callback FetchFamilyResultsCallback = void(FamilyFetchResults results); callback GetUrlCollectionCallback = void(UrlCollection urlCollection); callback CredentialsWithReusedPasswordCallback = void(PasswordUiEntryList[] entries); - callback PasswordManagerPinAvailableCallback = void(boolean available); - callback PasswordManagerPinChangedCallback = void(boolean success); callback DisconnectCloudAuthenticatorCallback = void(boolean success); callback IsConnectedToCloudAuthenticatorCallback = void(boolean connected); - callback DeleteAllPasswordManagerDataCallback = void(boolean success); - callback AuthenticationResultCallback = void(boolean result); interface Functions { // Function that logs that the Passwords page was accessed from the Chrome @@ -508,18 +512,6 @@ namespace passwordsPrivate { static void requestExportProgressStatus( ExportProgressStatusCallback callback); - // Requests the account-storage active state of the current user. - static void isAccountStorageActive( - IsAccountStorageActiveCallback callback); - - // Triggers the enabling / disabling flow for the account storage. - static void setAccountStorageEnabled(boolean enabled); - - // Requests whether the account-storage settings toggle should be - // shown. - static void shouldShowAccountStorageSettingToggle( - ShouldShowAccountStorageSettingToggleCallback callback); - // Requests the latest insecure credentials. static void getInsecureCredentials( PasswordListCallback callback); @@ -563,33 +555,9 @@ namespace passwordsPrivate { AddPasswordOptions options, optional VoidCallback callback); - // Restarts the authentication timeout timer if the user is authenticated. - // |callback|: The callback that gets invoked on success. - static void extendAuthValidity( - optional VoidCallback callback); - - // Switches Biometric authentication before filling state after - // successful authentication. - // |callback|: The callback that gets invoked with the authentication - // result. - [platforms = ("win", "mac", "chromeos")] static void - switchBiometricAuthBeforeFillingState( - AuthenticationResultCallback callback); - - // Shows a dialog for creating a shortcut for the Password Manager page. - static void showAddShortcutDialog(); - // Opens a file with exported passwords in the OS shell. static void showExportedFileInShell(DOMString file_path); - // Shows a dialog for changing the Password Manager PIN. - static void changePasswordManagerPin( - optional PasswordManagerPinChangedCallback callback); - - // Checks whether changing Password Manager PIN is possible. - static void isPasswordManagerPinAvailable( - PasswordManagerPinAvailableCallback callback); - // Disconnects the Chrome client from the cloud authenticator. static void disconnectCloudAuthenticator( DisconnectCloudAuthenticatorCallback callback); @@ -598,12 +566,6 @@ namespace passwordsPrivate { // the cloud authenticator. static void isConnectedToCloudAuthenticator( IsConnectedToCloudAuthenticatorCallback callback); - - // Deletes all password manager data (passwords, passkeys, etc.) - // |callback|: The callback that gets invoked with true on successful - // deletion and false on failure (e.g. not all data was deleted). - static void deleteAllPasswordManagerData( - DeleteAllPasswordManagerDataCallback callback); }; interface Events { @@ -641,5 +603,9 @@ namespace passwordsPrivate { // Fired when the password manager access timed out. static void onPasswordManagerAuthTimeout(); + + // Fired when the password manager actionable error changed. + static void onPasswordManagerActionableErrorChanged( + PasswordManagerActionableError error); }; }; diff --git a/tools/under-control/src/chrome/common/extensions/api/platform_keys_internal.idl b/tools/under-control/src/chrome/common/extensions/api/platform_keys_internal.idl index ba8568e8f..c6b06ccf3 100755 --- a/tools/under-control/src/chrome/common/extensions/api/platform_keys_internal.idl +++ b/tools/under-control/src/chrome/common/extensions/api/platform_keys_internal.idl @@ -2,8 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Internal API for to implement the platformKeys and enterprise.platformKeys -// APIs. +// Internal API to implement the platformKeys and enterprise.platformKeys APIs. [implemented_in = "chrome/browser/extensions/api/platform_keys/platform_keys_api.h"] namespace platformKeysInternal { callback SelectCallback = void (platformKeys.Match[] certs); 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 dcc668412..347d6c4d5 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 @@ -197,6 +197,7 @@ #include "components/feed/feed_feature_list.h" #else #include "chrome/common/record_replay/record_replay_features.h" +#include "chrome/renderer/indigo/indigo_agent.h" #include "chrome/renderer/record_replay/record_replay_agent.h" #include "chrome/renderer/searchbox/searchbox.h" #include "chrome/renderer/searchbox/searchbox_extension.h" @@ -327,9 +328,9 @@ void AppendParams( } for (size_t i = 0; i < additional_params.size(); ++i) { - names[existing_size + i] = WebString::FromUTF16(additional_params[i].name); + names[existing_size + i] = WebString::FromUtf16(additional_params[i].name); values[existing_size + i] = - WebString::FromUTF16(additional_params[i].value); + WebString::FromUtf16(additional_params[i].value); } existing_names->swap(names); @@ -426,15 +427,15 @@ void ChromeContentRendererClient::RenderThreadStarted() { extensions_renderer_client->RenderThreadStarted(); WebSecurityPolicy::RegisterURLSchemeAsExtension( - WebString::FromASCII(extensions::kExtensionScheme)); + WebString::FromAscii(extensions::kExtensionScheme)); #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) WebSecurityPolicy::RegisterURLSchemeAsIsolatedApp( - WebString::FromASCII(webapps::kIsolatedAppScheme)); + WebString::FromAscii(webapps::kIsolatedAppScheme)); #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) WebSecurityPolicy::RegisterURLSchemeAsCodeCacheWithHashing( - WebString::FromASCII(extensions::kExtensionScheme)); + WebString::FromAscii(extensions::kExtensionScheme)); #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) #if BUILDFLAG(ENABLE_SPELLCHECK) @@ -474,7 +475,7 @@ void ChromeContentRendererClient::RenderThreadStarted() { // treated as first-party. // See // ChromeContentBrowserClient::ShouldTreatURLSchemeAsFirstPartyWhenTopLevel - WebString chrome_scheme(WebString::FromASCII(content::kChromeUIScheme)); + WebString chrome_scheme(WebString::FromAscii(content::kChromeUIScheme)); WebSecurityPolicy::RegisterURLSchemeAsFirstPartyWhenTopLevelEmbeddingSecure( chrome_scheme); @@ -485,7 +486,7 @@ void ChromeContentRendererClient::RenderThreadStarted() { // URLs since it should never be visible to the user. // See also ChromeContentClient::AddAdditionalSchemes that adds it as an // empty document scheme. - WebString native_scheme(WebString::FromASCII(chrome::kChromeNativeScheme)); + WebString native_scheme(WebString::FromAscii(chrome::kChromeNativeScheme)); WebSecurityPolicy::RegisterURLSchemeAsDisplayIsolated(native_scheme); WebSecurityPolicy::RegisterURLSchemeAsNotAllowingJavascriptURLs( native_scheme); @@ -494,7 +495,7 @@ void ChromeContentRendererClient::RenderThreadStarted() { // normal content, and should also be unable to script anything but themselves // (to help limit the damage that a corrupt page could cause). WebString chrome_search_scheme( - WebString::FromASCII(chrome::kChromeSearchScheme)); + WebString::FromAscii(chrome::kChromeSearchScheme)); #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) @@ -506,7 +507,7 @@ void ChromeContentRendererClient::RenderThreadStarted() { // isolated-app: is the scheme used for Isolated Web Apps, which are web // applications packaged in Signed Web Bundles. WebString isolated_app_scheme( - WebString::FromASCII(webapps::kIsolatedAppScheme)); + WebString::FromAscii(webapps::kIsolatedAppScheme)); // Resources contained in Isolated Web Apps are HTTP-like and safe to expose // to the fetch API. WebSecurityPolicy::RegisterURLSchemeAsSupportingFetchAPI( @@ -546,7 +547,7 @@ void ChromeContentRendererClient::RenderThreadStarted() { } WebString dom_distiller_scheme( - WebString::FromASCII(dom_distiller::kDomDistillerScheme)); + WebString::FromAscii(dom_distiller::kDomDistillerScheme)); // TODO(nyquist): Add test to ensure this happens when the flag is set. WebSecurityPolicy::RegisterURLSchemeAsDisplayIsolated(dom_distiller_scheme); @@ -563,7 +564,7 @@ void ChromeContentRendererClient::RenderThreadStarted() { for (auto& scheme : secure_origin_allowlist::GetSchemesBypassingSecureContextCheck()) { WebSecurityPolicy::AddSchemeToSecureContextSafelist( - WebString::FromASCII(scheme)); + WebString::FromAscii(scheme)); } // This doesn't work in single-process mode. @@ -705,6 +706,7 @@ void ChromeContentRendererClient::RenderFrameCreated( record_replay::features::kRecordReplayBase)) { new record_replay::RecordReplayAgent(render_frame, associated_interfaces); } + indigo::IndigoAgent::MaybeCreate(render_frame, associated_interfaces); #endif if (content_capture::features::IsContentCaptureEnabled()) { @@ -1453,13 +1455,13 @@ void ChromeContentRendererClient:: blink::WebRuntimeFeatures::EnableAIPromptAPI(true); } blink::WebRuntimeFeatures::EnableAIPromptAPIForWorkers(true); + blink::WebRuntimeFeatures::EnableAIPromptAPILegacyIdentifiers(true); + blink::WebRuntimeFeatures::EnableAIPromptAPILegacyParams(true); blink::WebRuntimeFeatures::EnableAIRewriterAPIForWorkers(true); blink::WebRuntimeFeatures::EnableAISummarizationAPIForWorkers(true); blink::WebRuntimeFeatures::EnableAIWriterAPIForWorkers(true); blink::WebRuntimeFeatures::EnableLanguageDetectionAPIForWorkers(true); blink::WebRuntimeFeatures::EnableTranslationAPIForWorkers(true); - blink::WebRuntimeFeatures::EnableLanguageModelLegacyParamsAndAttributes( - true); } } diff --git a/tools/under-control/src/components/policy/resources/templates/messages.yaml b/tools/under-control/src/components/policy/resources/templates/messages.yaml index a08946e83..2b545b0c1 100755 --- a/tools/under-control/src/components/policy/resources/templates/messages.yaml +++ b/tools/under-control/src/components/policy/resources/templates/messages.yaml @@ -103,6 +103,10 @@ doc_feature_user_only: desc: The name of the feature that indicates whether a policy can only be set with signed in managed account. text: User Only +doc_feature_uses_machine_and_user_values: + desc: The name of the feature that indicates whether a policy can be set for the + machine and for the user. + text: Can be set for machine and user doc_group_intro: desc: Introduction text for the generated policy atomic group documentation text: Both Chromium and Google Chrome have some groups of policies that depend on 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 719e6b5b0..28265de64 100755 --- a/tools/under-control/src/components/policy/resources/templates/policies.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policies.yaml @@ -55,10 +55,10 @@ policies: 54: DefaultGeolocationSetting 55: Disable3DAPIs 56: PolicyRefreshRate - 57: ChromeFrameRendererSettings - 58: RenderInChromeFrameList - 59: RenderInHostList - 60: ChromeFrameContentTypes + 57: '' + 58: '' + 59: '' + 60: '' 61: ChromeOsLockOnIdleSuspend 62: InstantEnabled 63: UserDataDir @@ -85,7 +85,7 @@ policies: 84: AllowFileSelectionDialogs 85: DisabledSchemes 86: AlwaysAuthorizePlugins - 87: GCFUserDataDir + 87: '' 88: DiskCacheDir 89: AllowCrossOriginAuthPrompt 90: DevicePolicyRefreshRate @@ -139,7 +139,7 @@ policies: 138: BackgroundModeEnabled 139: DriveDisabled 140: DriveDisabledOverCellular - 141: AdditionalLaunchParameters + 141: '' 142: DeviceTargetVersionPrefix 143: ReportDeviceLocation 144: PinnedLauncherApps @@ -219,7 +219,7 @@ policies: 218: DeviceLoginScreenDefaultScreenMagnifierType 219: SupervisedUsersEnabled 220: PresentationScreenDimDelayScale - 221: SuppressChromeFrameTurndownPrompt + 221: '' 222: IdleActionBattery 223: SupervisedUserCreationEnabled 224: ReportDeviceNetworkInterfaces @@ -236,7 +236,7 @@ policies: 235: RequireOnlineRevocationChecksForLocalAnchors 236: SystemUse24HourClock 237: DefaultSearchProviderNewTabURL - 238: SkipMetadataCheck + 238: '' 239: AttestationForContentProtectionEnabled 240: FullscreenAllowed 241: DataCompressionProxyEnabled @@ -1433,6 +1433,11 @@ policies: 1432: WebRtcDiagnosticLogCollectionAllowedForOrigins 1433: IsolatedWebAppUserInstallationEnabled 1434: ExtensionDOMActivityLoggingEnabled + 1435: SharedWorkerExtendedLifetimeEnabled + 1436: MaxConnectionsPerProxyForWebSocket + 1437: KrispNoiseCancellationEnabled + 1438: AndroidEntraSsoEnabled + 1439: FindsSettings atomic_groups: 1: Homepage diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/.group.details.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/.group.details.yaml deleted file mode 100755 index d66972429..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/.group.details.yaml +++ /dev/null @@ -1,4 +0,0 @@ -caption: Allow $3Google Chrome Frame to - handle the following content types -desc: Allow $3Google Chrome Frame to handle - the following content types. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/ChromeFrameContentTypes.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/ChromeFrameContentTypes.yaml deleted file mode 100755 index 7f7bcc880..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameContentTypes/ChromeFrameContentTypes.yaml +++ /dev/null @@ -1,22 +0,0 @@ -caption: Allow $3Google Chrome Frame to - handle the listed content types -deprecated: true -desc: |- - If this policy is set, the specified content types are handled by $3Google Chrome Frame. - - If this policy is not set, the default renderer is used for all sites. (The ChromeFrameRendererSettings policy may be used to configure the default renderer.) -example_value: -- text/xml -- application/xml -features: - dynamic_refresh: false -owners: -- file://components/policy/OWNERS -schema: - items: - type: string - type: array -supported_on: -- chrome_frame:8-32 -tags: [] -type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/.group.details.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/.group.details.yaml deleted file mode 100755 index 0701acca5..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/.group.details.yaml +++ /dev/null @@ -1,5 +0,0 @@ -caption: Default HTML renderer for $3Google Chrome - Frame -desc: |- - Allows you to configure the default HTML renderer when $3Google Chrome Frame is installed. - The default setting is to allow the host browser do the rendering, but you can optionally override this and have $3Google Chrome Frame render HTML pages by default. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/AdditionalLaunchParameters.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/AdditionalLaunchParameters.yaml deleted file mode 100755 index c6f3b8357..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/AdditionalLaunchParameters.yaml +++ /dev/null @@ -1,19 +0,0 @@ -caption: Additional command line parameters for $1Google - Chrome -deprecated: true -desc: |- - Allows you to specify additional parameters that are used when $3Google Chrome Frame launches $1Google Chrome. - - If this policy is not set the default command line will be used. -example_value: --enable-media-stream --enable-media-source -features: - dynamic_refresh: false -owners: -- file://components/policy/OWNERS -- rsorokin@chromium.org -schema: - type: string -supported_on: -- chrome_frame:19-32 -tags: [] -type: string diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/ChromeFrameRendererSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/ChromeFrameRendererSettings.yaml deleted file mode 100755 index cc8f30f66..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/ChromeFrameRendererSettings.yaml +++ /dev/null @@ -1,28 +0,0 @@ -caption: Default HTML renderer for $3Google Chrome - Frame -deprecated: true -desc: |- - Allows you to configure the default HTML renderer when $3Google Chrome Frame is installed. - The default setting used when this policy is left not set is to allow the host browser do the rendering, but you can optionally override this and have $3Google Chrome Frame render HTML pages by default. -example_value: 1 -features: - dynamic_refresh: false -items: -- caption: Use the host browser by default - name: RenderInHost - value: 0 -- caption: Use $3Google Chrome Frame by - default - name: RenderInChromeFrame - value: 1 -owners: -- file://components/policy/OWNERS -schema: - enum: - - 0 - - 1 - type: integer -supported_on: -- chrome_frame:8-32 -tags: [] -type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInChromeFrameList.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInChromeFrameList.yaml deleted file mode 100755 index 833c5a9ef..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInChromeFrameList.yaml +++ /dev/null @@ -1,25 +0,0 @@ -caption: Always render the following URL patterns in $3Google - Chrome Frame -deprecated: true -desc: |- - Customize the list of URL patterns that should always be rendered by $3Google Chrome Frame. - - If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. - - For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started. -example_value: -- https://www.example.com -- https://www.example.edu -features: - dynamic_refresh: false -owners: -- file://components/policy/OWNERS -- rsorokin@chromium.org -schema: - items: - type: string - type: array -supported_on: -- chrome_frame:8-32 -tags: [] -type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInHostList.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInHostList.yaml deleted file mode 100755 index cbbcb7ed6..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/RenderInHostList.yaml +++ /dev/null @@ -1,24 +0,0 @@ -caption: Always render the following URL patterns in the host browser -deprecated: true -desc: |- - Customize the list of URL patterns that should always be rendered by the host browser. - - If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. - - For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started. -example_value: -- https://www.example.com -- https://www.example.edu -features: - dynamic_refresh: false -owners: -- file://components/policy/OWNERS -- rsorokin@chromium.org -schema: - items: - type: string - type: array -supported_on: -- chrome_frame:8-32 -tags: [] -type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/SkipMetadataCheck.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/SkipMetadataCheck.yaml deleted file mode 100755 index 354ffbf95..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ChromeFrameRendererSettings/SkipMetadataCheck.yaml +++ /dev/null @@ -1,23 +0,0 @@ -caption: Skip the meta tag check in $3Google Chrome - Frame -deprecated: true -desc: |- - Normally pages with X-UA-Compatible set to chrome=1 will be rendered in $3Google Chrome Frame regardless of the 'ChromeFrameRendererSettings' policy. - - If you enable this setting, pages will not be scanned for meta tags. - - If you disable this setting, pages will be scanned for meta tags. - - If this policy is not set, pages will be scanned for meta tags. -example_value: false -features: - dynamic_refresh: false -owners: -- file://components/policy/OWNERS -- rsorokin@chromium.org -schema: - type: boolean -supported_on: -- chrome_frame:31-32 -tags: [] -type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml index b701eec4c..1ccab1468 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml @@ -1,6 +1,6 @@ caption: Automatically select client certificates for these sites desc: |- - Setting the policy lets you make a list of URL patterns that specify sites for which Chrome can automatically select a client certificate. The value is an array of stringified JSON dictionaries, each with the form { "pattern": "$URL_PATTERN", "filter" : $FILTER }, where $URL_PATTERN is a content setting pattern. $FILTER restricts the client certificates the browser automatically selects from. Independent of the filter, only certificates that match the server's certificate request are selected. On Android, Chrome can only select client certificates that it has provisioned itself; it cannot access certificates installed at the operating system level. + Setting the policy lets you make a list of URL patterns that specify sites for which Chrome can automatically select a client certificate. The value is an array of stringified JSON dictionaries, each with the form { "pattern": "$URL_PATTERN", "filter" : $FILTER }, where $URL_PATTERN is a content setting pattern. $FILTER restricts the client certificates the browser automatically selects from. Independent of the filter, only certificates that match the server's certificate request are selected. On Android and iOS, Chrome can only select client certificates that it has provisioned itself; it cannot access certificates installed at the operating system level. Examples for the usage of the $FILTER section: @@ -24,9 +24,9 @@ example_value: features: dynamic_refresh: true per_profile: true + uses_machine_and_user_values: true future_on: - fuchsia -- ios owners: - chromeos-commercial-networking-team@google.com - miersh@google.com @@ -38,6 +38,7 @@ supported_on: - chrome.*:15- - chrome_os:15- - android:143- +- ios:147- tags: - website-sharing type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AutofillPredictionSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AutofillPredictionSettings.yaml index d84b1dbe6..86ed63e10 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AutofillPredictionSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AutofillPredictionSettings.yaml @@ -40,5 +40,7 @@ schema: supported_on: - chrome.*:137- - chrome_os:137- +- android:148- +- ios:148- tags: [] type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/FindsSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/FindsSettings.yaml new file mode 100755 index 000000000..26286ab9e --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/FindsSettings.yaml @@ -0,0 +1,42 @@ +caption: Settings for Chrome Finds + +desc: |- + Chrome Finds is an AI-based feature that helps users search for and understand content on the current web page. + + 0 = Allow the feature to be used, while allowing Google to use relevant data to improve its AI models. Relevant data may include prompts, inputs, outputs, source materials, and written feedback, depending on the feature. It may also be reviewed by humans to improve AI models. 0 is the default value, except when noted below. + + 1 = Allow the feature to be used, but does not allow Google to improve models using users' content (including prompts, inputs, outputs, source materials, and written feedback). 1 is the default value for Enterprise users managed by Google Admin console and for Education accounts managed by Google Workspace. + + 2 = Do not allow the feature. + + If the policy is unset, its behavior is determined by the GenAiDefaultSettings policy. + + For more information on data handling for generative AI features, please see https://support.google.com/chrome/a?p=generative_ai_settings. +default: 0 +example_value: 2 +features: + dynamic_refresh: true + per_profile: true +items: +- caption: Allow Chrome Finds and improve AI models. + name: Allowed + value: 0 +- caption: Allow Chrome Finds without improving AI models. + name: AllowedWithoutLogging + value: 1 +- caption: Do not allow Chrome Finds. + name: Disabled + value: 2 +owners: +- file://chrome/browser/finds/OWNERS +schema: + enum: + - 0 + - 1 + - 2 + type: integer +tags: +- google-sharing +supported_on: +- android:148- +type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml index e723168a5..8c0755132 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml @@ -16,6 +16,7 @@ features: dynamic_refresh: false per_profile: true user_only: true + uses_machine_and_user_values: true items: - caption: No preference. name: NoPreference diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/GCFUserDataDir.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/GCFUserDataDir.yaml deleted file mode 100755 index 155b7bd06..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/GCFUserDataDir.yaml +++ /dev/null @@ -1,23 +0,0 @@ -caption: Set $3Google Chrome Frame user - data directory -deprecated: true -desc: |- - Configures the directory that $3Google Chrome Frame will use for storing user data. - - If you set this policy, $3Google Chrome Frame will use the provided directory. - - See https://support.google.com/chrome/a?p=Supported_directory_variables for a list of variables that can be used. - - If this setting is left not set the default profile directory will be used. -example_value: ${user_home}/Chrome Frame -features: - dynamic_refresh: false -label: Set user data directory -owners: -- grt@chromium.org -schema: - type: string -supported_on: -- chrome_frame:12-32 -tags: [] -type: string diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/KrispNoiseCancellationEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/KrispNoiseCancellationEnabled.yaml new file mode 100755 index 000000000..718db1419 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/KrispNoiseCancellationEnabled.yaml @@ -0,0 +1,27 @@ +caption: Enable Krisp noise cancellation +desc: |- + This policy controls the Krisp AI noise cancellation technology on the device. + It is integrated as a separate local third-party library into $2Google ChromeOS and is available only for managed users. + + Setting the policy to Enabled turns on Krisp AI noise cancellation audio processing and prevents users from disabling it. + + Setting the policy to Disabled or not setting the policy turns off Krisp AI noise cancellation audio processing. +default: false +example_value: true +features: + dynamic_refresh: false + per_profile: false +items: +- caption: Enable Krisp noise cancellation + value: true +- caption: Disable Krisp noise cancellation + value: false +owners: +- file://services/audio/OWNERS +- poromov@chromium.org +schema: + type: boolean +future_on: +- chrome_os +tags: [] +type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxy.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxy.yaml index 8b00ed559..d1a139741 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxy.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxy.yaml @@ -1,22 +1,37 @@ -caption: Maximal number of concurrent connections to the proxy server +caption: Maximal number of concurrent connections per proxy server for non-WebSocket requests default: 32 desc: |- - Setting the policy specifies the maximal number of simultaneous connections to the proxy server. Some proxy servers can't handle a high number of concurrent connections per client, which is solved by setting this policy to a lower value. The value should be lower than 100 and higher than 6. Some web apps are known to consume many connections with hanging GETs, so setting a value below 32 may lead to browser networking hangs if there are too many web apps with hanging connections open. Lower below the default at your own risk. + Setting the policy specifies the maximal number of simultaneous connections per proxy server for non-WebSocket requests. - Leaving the policy unset means a default of 32 is used. + To modify WebSocket request limits, see MaxConnectionsPerProxyForWebSocket. + + Leaving the policy unset means a default of 32 is used. + + Some web apps are known to consume many connections with hanging GETs, so setting a value below 32 may lead to browser networking hangs if there are too many web apps with hanging connections open. + Some proxy servers can't handle a high number of concurrent connections per client, which is solved by setting this policy to a lower value. + + The value should be equal to or higher than 6. + Setting a value below that limit will cause 6 to be used. + Lower below the default (32) at your own risk. + + The value should be equal to or lower than 256 (99 in $1Google Chrome 147 and earlier). + Setting a value above that limit will cause 256 (99 in $1Google Chrome 147 and earlier) to be used. + Raise above the default (32) at your own risk. example_value: 32 features: dynamic_refresh: false per_profile: false -future_on: -- chrome_os -- fuchsia owners: - file://components/policy/OWNERS - pastarmovj@chromium.org +- arichiv@chromium.org schema: + maximum: 256 + minimum: 6 type: integer supported_on: +- android:148- - chrome.*:14- +- chrome_os:148- tags: [] type: int diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxyForWebSocket.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxyForWebSocket.yaml new file mode 100755 index 000000000..a9daaee9b --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/MaxConnectionsPerProxyForWebSocket.yaml @@ -0,0 +1,36 @@ +caption: Maximal number of concurrent connections per proxy server for WebSocket requests +default: 32 +desc: |- + Setting the policy specifies the maximal number of simultaneous connections per proxy server for WebSocket requests. + + To modify non-WebSocket request limits, see MaxConnectionsPerProxy. + + Leaving the policy unset means a default of 32 is used. + + Some web apps are known to consume many connections with hanging GETs, so setting a value below 32 may lead to browser networking hangs if there are too many web apps with hanging connections open. + Some proxy servers can't handle a high number of concurrent connections per client, which is solved by setting this policy to a lower value. + + The value should be equal to or higher than 6. + Setting a value below that limit will cause 6 to be used. + Lower below the default (32) at your own risk. + + The value should be equal to or lower than 256. + Setting a value above that limit will cause 256 to be used. + Raise above the default (32) at your own risk. +example_value: 32 +features: + dynamic_refresh: false + per_profile: false +owners: +- file://components/policy/OWNERS +- arichiv@chromium.org +schema: + maximum: 256 + minimum: 6 + type: integer +supported_on: +- android:148- +- chrome.*:148- +- chrome_os:148- +tags: [] +type: int 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 b77935efc..7645192ad 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 @@ -155,6 +155,7 @@ schema: future_on: - fuchsia - android +- ios supported_on: - chrome.*:84- - chrome_os:84- diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml index 10fd9e6a3..752478b40 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml @@ -11,8 +11,7 @@ desc: |- supported_on: - chrome.*:136- - android:143- -future_on: -- ios +- ios:147- features: dynamic_refresh: true per_profile: false diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml index f73895451..19974742c 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml @@ -12,8 +12,7 @@ supported_on: - chrome.mac:126- - chrome.linux:128- - android:143- -future_on: -- ios +- ios:147- features: dynamic_refresh: true per_profile: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SharedWorkerExtendedLifetimeEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SharedWorkerExtendedLifetimeEnabled.yaml new file mode 100755 index 000000000..440884242 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SharedWorkerExtendedLifetimeEnabled.yaml @@ -0,0 +1,31 @@ +caption: Enable extended lifetime for SharedWorkers +desc: |- + SharedWorkers can have an extended lifetime if the "extendedLifetime" option is set to true in the SharedWorker constructor. + + If this policy is set to Enabled or left unset, SharedWorkers can have an extended lifetime. + + If this policy is set to Disabled, SharedWorkers cannot have an extended lifetime, even if the option is set to true. + + This policy is intended to be temporary and will be removed in the future. +default: true +example_value: true +features: + dynamic_refresh: false + per_profile: true +items: +- caption: SharedWorkers can have an extended lifetime. + value: true +- caption: SharedWorkers cannot have an extended lifetime. + value: false +owners: +- yyanagisawa@chromium.org +- file://content/browser/worker_host/OWNERS +schema: + type: boolean +supported_on: +- android:148- +- chrome.*:148- +- chrome_os:148- +- fuchsia:148- +tags: [] +type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SuppressChromeFrameTurndownPrompt.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SuppressChromeFrameTurndownPrompt.yaml deleted file mode 100755 index 918fdc63d..000000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SuppressChromeFrameTurndownPrompt.yaml +++ /dev/null @@ -1,17 +0,0 @@ -caption: Suppress the $3Google Chrome Frame - turndown prompt -deprecated: true -desc: Suppresses the turndown prompt that appears when a site is rendered by $3Google - Chrome Frame. -example_value: true -features: - dynamic_refresh: false -owners: -- file://components/policy/OWNERS -- rsorokin@chromium.org -schema: - type: boolean -supported_on: -- chrome_frame:29-32 -tags: [] -type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/ZstdContentEncodingEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/ZstdContentEncodingEnabled.yaml index 3a2de41e8..61c0b6bdb 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/ZstdContentEncodingEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/ZstdContentEncodingEnabled.yaml @@ -32,5 +32,6 @@ supported_on: - android:119-136 - chrome.*:119-136 - chrome_os:119-136 +deprecated: true tags: [] type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/AndroidEntraSsoEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/AndroidEntraSsoEnabled.yaml new file mode 100755 index 000000000..143b376bf --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/AndroidEntraSsoEnabled.yaml @@ -0,0 +1,34 @@ +caption: Allow automatic sign-in to Microsoft® cloud identity providers on Android +default: 0 +desc: |- + Configures automatic user sign-in for accounts backed by a Microsoft® cloud identity provider on Android. + + By setting this policy to 1 (Enabled), users who have signed into a Microsoft® productivity application on their device can be automatically signed into Microsoft® web properties within $1Google Chrome. This functionality requires the presence of a Microsoft® authentication broker app, such as Microsoft® Authenticator®, Microsoft® Intune Company Portal®, or Microsoft® Link to Windows®. To facilitate the single sign-on, necessary authentication data is shared with the Microsoft® cloud identity provider. + + By setting this policy to 0 (Disabled) or leaving it unset, automatic sign-in as described above is disabled, and users must manually provide credentials for Microsoft® web properties. + + Note: This policy does not apply to Incognito or Guest modes. + +example_value: 1 +features: + dynamic_refresh: true + per_profile: false +future_on: + - android +items: +- caption: Disable Microsoft® cloud authentication + name: Disabled + value: 0 +- caption: Enable Microsoft® cloud authentication + name: Enabled + value: 1 +owners: +- ssolarewicz@google.com +- file://chrome/browser/enterprise/OWNERS +schema: + enum: + - 0 + - 1 + type: integer +tags: [] +type: int-enum 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 bab97c121..a65a4f8da 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 @@ -128,8 +128,6 @@ #include "content/browser/screen_orientation/screen_orientation_provider.h" #include "content/browser/shared_storage/shared_storage_budget_charger.h" #include "content/browser/site_instance_impl.h" -#include "content/browser/tpcd_heuristics/opener_heuristic_tab_helper.h" -#include "content/browser/tpcd_heuristics/redirect_heuristic_tab_helper.h" #include "content/browser/wake_lock/wake_lock_context_host.h" #include "content/browser/web_contents/file_chooser_impl.h" #include "content/browser/web_contents/java_script_dialog_commit_deferring_condition.h" @@ -199,6 +197,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/loader/resource_type_util.h" #include "third_party/blink/public/common/mime_util/mime_util.h" +#include "third_party/blink/public/common/page/content_to_visible_time_request.h" #include "third_party/blink/public/common/page/page_zoom.h" #include "third_party/blink/public/common/page_state/page_state.h" #include "third_party/blink/public/common/permissions/permission_utils.h" @@ -280,6 +279,10 @@ #include "content/browser/ios/nfc_host.h" #endif +#if BUILDFLAG(ENABLE_SURFACE_EMBED) +#include "content/browser/surface_embed/surface_embed_connector_impl.h" +#endif // BUILDFLAG(ENABLE_SURFACE_EMBED) + namespace content { namespace { @@ -437,9 +440,9 @@ void RecordMaxFrameCountUMA(size_t max_frame_count) { // WebContents::GetFirstWebContentsInLiveOriginalOpenerChain() and // WebContents::GetOuterWebContents(). The |web_contents| parameter will be // included in the returned set. -base::flat_set GetAllOpeningWebContents( +base::flat_set> GetAllOpeningWebContents( WebContentsImpl* web_contents) { - base::flat_set result; + base::flat_set> result; base::flat_set current; current.insert(web_contents); @@ -1420,6 +1423,12 @@ WebContentsImpl::~WebContentsImpl() { GetOuterWebContents()->DetachUnownedInnerWebContents(this); } +#if BUILDFLAG(ENABLE_SURFACE_EMBED) + if (surface_embed_connector_) { + ClearSurfaceEmbedConnector(); + } +#endif // BUILDFLAG(ENABLE_SURFACE_EMBED) + if (pointer_lock_widget_) { pointer_lock_widget_->RejectPointerLockOrUnlockIfNecessary( blink::mojom::PointerLockResult::kElementDestroyed); @@ -1585,10 +1594,10 @@ std::unique_ptr WebContentsImpl::CreateWithOpener( } // static -std::vector WebContentsImpl::GetAllWebContents() { +std::vector> WebContentsImpl::GetAllWebContents() { OPTIONAL_TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("content.verbose"), "WebContentsImpl::GetAllWebContents"); - std::vector result; + std::vector> result; std::unique_ptr widgets( RenderWidgetHostImpl::GetRenderWidgetHosts()); while (RenderWidgetHost* rwh = widgets->GetNextHost()) { @@ -3020,8 +3029,7 @@ base::TimeTicks WebContentsImpl::GetLastInteractionTimeTicks() { } WebContents::ScopedIgnoreInputEvents WebContentsImpl::IgnoreInputEvents( - std::optional audit_callback, - bool should_ignore_a11y_input) { + std::optional audit_callback) { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::IgnoreInputEvents"); uint64_t callback_id = 0; @@ -3044,14 +3052,11 @@ WebContents::ScopedIgnoreInputEvents WebContentsImpl::IgnoreInputEvents( } #endif ++ignore_input_events_count_; - if (should_ignore_a11y_input) { - ++ignore_a11y_input_count_; - } } // Bind weakly, since the token might outlive us. return ScopedIgnoreInputEvents(base::BindOnce( - [](base::WeakPtr wc, bool should_ignore_a11y_input, + [](base::WeakPtr wc, std::optional callback_id) { if (wc) { OPTIONAL_TRACE_EVENT0("content", @@ -3078,13 +3083,10 @@ WebContents::ScopedIgnoreInputEvents WebContentsImpl::IgnoreInputEvents( } #endif --wc->ignore_input_events_count_; - if (should_ignore_a11y_input) { - --wc->ignore_a11y_input_count_; - } } } }, - weak_factory_.GetWeakPtr(), should_ignore_a11y_input, + weak_factory_.GetWeakPtr(), audit_callback.has_value() ? std::make_optional(callback_id) : std::nullopt)); } @@ -3093,10 +3095,6 @@ bool WebContentsImpl::ShouldIgnoreInputEventsForTesting() { return ShouldIgnoreInputEvents(); } -bool WebContentsImpl::ShouldIgnoreA11yInputEventsForTesting() { - return ShouldIgnoreA11yInputEvents(); -} - bool WebContentsImpl::HasActiveEffectivelyFullscreenVideo() { return IsFullscreen() && media_web_contents_observer_->HasActiveEffectivelyFullscreenVideo(); @@ -3317,7 +3315,7 @@ void WebContentsImpl::AttachInnerWebContentsImpl( // RWHV? if (RenderWidgetHostViewBase* prev_rwhv = static_cast(rfh->GetView())) { - if (prev_rwhv && !prev_rwhv->IsRenderWidgetHostViewChildFrame()) { + if (!prev_rwhv->IsRenderWidgetHostViewChildFrame()) { prev_rwhv->Destroy(); } } @@ -3465,6 +3463,114 @@ void WebContentsImpl::DetachUnownedInnerWebContents( inner_main_frame->UpdateAXTreeData(); } +#if BUILDFLAG(ENABLE_SURFACE_EMBED) +SurfaceEmbedConnector* WebContentsImpl::GetSurfaceEmbedConnector() const { + return surface_embed_connector_.get(); +} + +void WebContentsImpl::SetSurfaceEmbedConnector( + std::unique_ptr connector) { + CHECK(connector); + // Can't attach an inner WebContents into SurfaceEmbed. + CHECK(!node_.outer_web_contents()); + + // Replace view with a WebContentsViewChildFrame view for the WebContents + // being embedded. The WebContentsViewChildFrame will connect visual to the + // embedder using SurfaceEmbedConnector from the provided `this` WebContents + // object. + view_ = std::make_unique( + this, GetContentClient()->browser()->GetWebContentsViewDelegate(this), + &render_view_host_delegate_view_); + + // On platforms where destroying the WebContents' view does not also destroy + // the platform RenderWidgetHostView, we need to destroy it if it exists. + // TODO(mcnee): Should all platforms' WebContentsView destroy the platform + // RWHV? + // Do this for all outermost main frames including speculative render frame + // host and the ones in prerender and BFCache. + for (auto* rfh : GetOutermostMainFramesForViewChange()) { + if (RenderWidgetHostViewBase* prev_rwhv = + static_cast(rfh->GetView())) { + if (!prev_rwhv->IsRenderWidgetHostViewChildFrame()) { + prev_rwhv->Destroy(); + } + } + } + + // Must unregister before setting the connector as that will change the + // TextInputManager and InputEventRouter for this WebContents. Without doing + // this, child frames' RWHVs would fail to unregister from the previous + // TextInputManager and InputEventRouter. + RecursivelyUnregisterRenderWidgetHostViews(); + + // The new connector must be set before creating RWHVs as they need to get the + // new TextInputManager and InputEventRouter. + surface_embed_connector_ = std::move(connector); + + // Recreate views for all outermost main frames impacted by the WebContents + // `view_` change, including speculative render frame host and the ones in + // prerender and BFCache. + for (auto* rfh : GetOutermostMainFramesForViewChange()) { + auto* render_manager = rfh->frame_tree_node()->render_manager(); + RenderViewHostImpl* rvh = rfh->render_view_host(); + render_manager->InitRenderView(rfh->GetSiteInstance()->group(), rvh, + /*proxy=*/nullptr, + /*navigation_metrics_token=*/std::nullopt); + if (!rfh->GetView()) { + CreateRenderWidgetHostViewForRenderManager(rvh); + } + } + + RecursivelyRegisterRenderWidgetHostViews(); +} + +void WebContentsImpl::ClearSurfaceEmbedConnector() { + CHECK(surface_embed_connector_); + + // RenderWidgetHostView of main frames that are of type + // RenderWidgetHostViewChildFrame should be re-created with appropriate + // platform views. + // Do this for all outermost main frames including speculative render frame + // host and the ones in prerender and BFCache. + std::vector list_of_rvh_with_rwhv; + for (auto* rfh : GetOutermostMainFramesForViewChange()) { + auto* rvh = rfh->render_view_host(); + if (rvh->GetWidget() && rvh->GetWidget()->GetView()) { + if (rvh->GetWidget()->GetView()->IsRenderWidgetHostViewChildFrame()) { + list_of_rvh_with_rwhv.push_back(rvh); + } + rvh->GetWidget()->GetView()->Destroy(); + } + } + + if (!IsBeingDestroyed()) { + render_view_host_delegate_view_ = nullptr; + view_ = nullptr; + } + + // Because there may be child frames, we need to unregister all RWHVs before + // clearing the connector, which will change the TextInputManager and + // InputEventRouter for this WebContents. + RecursivelyUnregisterRenderWidgetHostViews(); + + surface_embed_connector_.reset(); + + // Recreate and register RenderWidgetHostView. + if (!IsBeingDestroyed()) { + // Recreate WebContentsView. + view_ = CreateWebContentsView( + this, GetContentClient()->browser()->GetWebContentsViewDelegate(this), + &render_view_host_delegate_view_); + view_->CreateView(gfx::NativeView()); + + for (RenderViewHostImpl* rvh : list_of_rvh_with_rwhv) { + CreateRenderWidgetHostViewForRenderManager(rvh); + } + RecursivelyRegisterRenderWidgetHostViews(); + } +} +#endif // BUILDFLAG(ENABLE_SURFACE_EMBED) + void WebContentsImpl::AttachGuestPage( std::unique_ptr guest_page, RenderFrameHost* outer_render_frame_host) { @@ -3709,6 +3815,11 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences( prefs.dont_send_key_events_to_javascript = base::FeatureList::IsEnabled(features::kDontSendKeyEventsToJavascript); + prefs.ignore_duplicate_nav_enabled = + base::FeatureList::IsEnabled(features::kIgnoreDuplicateNavs); + + prefs.duplicate_nav_threshold = features::kDuplicateNavThreshold.Get(); + // TODO(dtapuska): Enable barrel button selection drag support on Android. // crbug.com/758042 #if BUILDFLAG(IS_WIN) @@ -4232,8 +4343,6 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params, SchedulerLoopQuarantineWebContentsObserver::MaybeCreateForWebContents(this); RedirectChainDetector::CreateForWebContents(this); BtmWebContentsObserver::MaybeCreateForWebContents(this); - RedirectHeuristicTabHelper::CreateForWebContents(this); - OpenerHeuristicTabHelper::CreateForWebContents(this); // BrowserPluginGuest::Init needs to be called after this WebContents has // a RenderWidgetHostViewChildFrame. That is, |view_->CreateView| above. @@ -4579,9 +4688,6 @@ bool WebContentsImpl::PreHandleGestureEvent( } } - // TODO(crbug.com/475836809) - // Remove this delegate method. It exposes Blink types to the embedder. Since - // zoom blocking is now handled natively, we should audit remaining consumers. return delegate_ && delegate_->PreHandleGestureEvent(this, event); } @@ -4592,6 +4698,12 @@ WebContentsImpl::GetInputEventRouter() { return GetOuterWebContents()->GetInputEventRouter(); } +#if BUILDFLAG(ENABLE_SURFACE_EMBED) + if (surface_embed_connector_) { + return surface_embed_connector_->GetInputEventRouter(); + } +#endif // BUILDFLAG(ENABLE_SURFACE_EMBED) + if (!rwh_input_event_router_.get()) { rwh_input_event_router_ = MakeRefCounted( @@ -4664,7 +4776,7 @@ bool WebContentsImpl::CanEnterFullscreenMode( // WebContents has an active blocker. return delegate_ && std::ranges::all_of(GetAllOpeningWebContents(this), - [](auto* opener) { + [](auto opener) { return opener->fullscreen_blocker_count_ == 0; }) && delegate_->CanEnterFullscreenModeForTab(requesting_frame); @@ -4676,7 +4788,10 @@ void WebContentsImpl::EnterFullscreenMode( OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::EnterFullscreenMode"); DCHECK(CanEnterFullscreenMode(requesting_frame)); DCHECK(requesting_frame->IsActive()); - DCHECK(ContainsOrIsFocusedWebContents()); + CHECK( + ContainsOrIsFocusedWebContents() || + GetContentClient()->browser()->IsFullscreenAllowedForUnfocusedWebContents( + this)); // Ensure the window is made active to take input focus. The window may be // inactive when sites request fullscreen via capability delegation, consume // transient activation from a gesture made before another window was focused, @@ -4691,7 +4806,13 @@ void WebContentsImpl::EnterFullscreenMode( } if (delegate_) { + // This may spin the message loop and destroy this object. + // See crbug.com/1506535, crbug.com/498752242. + base::WeakPtr weak_ptr = GetWeakPtr(); delegate_->EnterFullscreenModeForTab(requesting_frame, options); + if (!weak_ptr) { + return; + } if (keyboard_lock_widget_) { delegate_->RequestKeyboardLock(this, esc_key_locked_); @@ -4719,8 +4840,9 @@ void WebContentsImpl::ExitFullscreenMode(bool will_cause_resize) { base::TimeTicks::Now()); if (delegate_) { - // This may spin the message loop and destroy this object crbug.com/1506535 - base::WeakPtr weak_ptr = weak_factory_.GetWeakPtr(); + // This may spin the message loop and destroy this object. + // See crbug.com/1506535, crbug.com/498752242. + base::WeakPtr weak_ptr = GetWeakPtr(); delegate_->ExitFullscreenModeForTab(this); if (!weak_ptr) { return; @@ -5527,7 +5649,7 @@ FrameTree* WebContentsImpl::CreateNewWindow( std::make_unique( params.target_url); load_params->initiator_origin = opener->GetLastCommittedOrigin(); - load_params->initiator_process_id = opener->GetProcess()->GetDeprecatedID(); + load_params->initiator_process_id = render_process_id; load_params->initiator_frame_token = opener->GetFrameToken(); // Avoiding setting |load_params->source_site_instance| when // |opener_suppressed| is true, because in that case we do not want to use @@ -5885,14 +6007,22 @@ void WebContentsImpl::RequestMediaAccessPermission( delegate->GuestRequestMediaAccessPermission(request, std::move(callback)); return; } - } else if (delegate_) { + std::move(callback).Run( + blink::mojom::StreamDevicesSet(), + blink::mojom::MediaStreamRequestResult:: + FAILED_DUE_TO_SHUTDOWN_NO_GUEST_PAGE_HOLDER_DELEGATE, + std::unique_ptr()); + return; + } + + if (delegate_) { delegate_->RequestMediaAccessPermission(this, request, std::move(callback)); return; } - std::move(callback).Run( - blink::mojom::StreamDevicesSet(), - blink::mojom::MediaStreamRequestResult::FAILED_DUE_TO_SHUTDOWN, - std::unique_ptr()); + std::move(callback).Run(blink::mojom::StreamDevicesSet(), + blink::mojom::MediaStreamRequestResult:: + FAILED_DUE_TO_SHUTDOWN_WEB_CONTENTS_NO_DELEGATE, + std::unique_ptr()); } void WebContentsImpl::ProcessSelectAudioOutput( @@ -6195,6 +6325,12 @@ TextInputManager* WebContentsImpl::GetTextInputManager() { return GetOuterWebContents()->GetTextInputManager(); } +#if BUILDFLAG(ENABLE_SURFACE_EMBED) + if (surface_embed_connector_) { + return surface_embed_connector_->GetTextInputManager(); + } +#endif // BUILDFLAG(ENABLE_SURFACE_EMBED) + if (!text_input_manager_ && !browser_plugin_guest_) { text_input_manager_ = std::make_unique(); } @@ -6303,6 +6439,29 @@ void WebContentsImpl::AdjustSelectionByCharacterOffset( : SelectionMenuBehavior::kHide); } +const std::optional WebContentsImpl::GetTextSelectionBounds( + RenderFrameHost* render_frame_host) const { + if (text_input_manager_ && render_frame_host) { + auto* view = + static_cast(render_frame_host->GetView()); + auto* root_view = static_cast( + render_frame_host->GetOutermostMainFrame()->GetView()); + if (view && root_view) { + const auto* region = text_input_manager_->GetSelectionRegion(view); + if (region) { + gfx::Rect bounds = + gfx::RectBetweenSelectionBounds(region->anchor, region->focus); + if (!bounds.IsEmpty()) { + gfx::Point origin = bounds.origin(); + origin += root_view->GetViewBounds().OffsetFromOrigin(); + return gfx::Rect(origin, bounds.size()); + } + } + } + } + return std::nullopt; +} + void WebContentsImpl::ResizeDueToAutoResize( RenderWidgetHostImpl* render_widget_host, const gfx::Size& new_size) { @@ -7251,10 +7410,20 @@ base::ScopedClosureRunner WebContentsImpl::ForSecurityDropFullscreen( // upstream contents. Drop that WebContents out of fullscreen if it does. This // is theoretically quadratic-ish (fullscreen contentses x each one's opener // length) but neither of those is expected to ever be a large number. - auto fullscreen_set_copy = *FullscreenContentsSet(GetBrowserContext()); - for (WebContentsImpl* fullscreen_contents : fullscreen_set_copy) { - if (is_fullscreen(fullscreen_contents, display_id)) { - auto opener_contentses = GetAllOpeningWebContents(fullscreen_contents); + std::vector> fullscreen_contents_list; + for (WebContentsImpl* fullscreen_contents : + *FullscreenContentsSet(GetBrowserContext())) { + fullscreen_contents_list.push_back( + fullscreen_contents->weak_factory_.GetWeakPtr()); + } + + for (auto& fullscreen_contents : fullscreen_contents_list) { + if (!fullscreen_contents) { + continue; + } + if (is_fullscreen(fullscreen_contents.get(), display_id)) { + auto opener_contentses = + GetAllOpeningWebContents(fullscreen_contents.get()); if (opener_contentses.count(this)) { fullscreen_contents->ExitFullscreen(true); } @@ -7268,29 +7437,41 @@ base::ScopedClosureRunner WebContentsImpl::ForSecurityDropFullscreen( // any request to enter fullscreen will have the upstream of the WebContents // checked. (See CanEnterFullscreenMode().) - std::vector> blocked_contentses; + std::vector> blocked_contents_list; + std::vector> openers; + for (WebContentsImpl* opener : GetAllOpeningWebContents(this)) { + openers.push_back(opener->weak_factory_.GetWeakPtr()); + } + + for (auto& opener : openers) { + if (!opener) { + continue; + } - for (auto* opener : GetAllOpeningWebContents(this)) { - if (is_fullscreen(opener, display_id)) { + if (is_fullscreen(opener.get(), display_id)) { opener->ExitFullscreen(true); } + if (!opener) { + continue; + } + // ...block the WebContents from entering fullscreen until further notice. ++opener->fullscreen_blocker_count_; - blocked_contentses.push_back(opener->weak_factory_.GetWeakPtr()); + blocked_contents_list.push_back(opener); } return base::ScopedClosureRunner(base::BindOnce( - [](std::vector> blocked_contentses) { + [](std::vector> blocked_contents_list) { for (base::WeakPtr& web_contents : - blocked_contentses) { + blocked_contents_list) { if (web_contents) { DCHECK_GT(web_contents->fullscreen_blocker_count_, 0); --web_contents->fullscreen_blocker_count_; } } }, - std::move(blocked_contentses))); + std::move(blocked_contents_list))); } void WebContentsImpl::ResumeLoadingCreatedWebContents() { @@ -7784,7 +7965,13 @@ void WebContentsImpl::DidNavigateAnyFramePreCommit( } if (should_exit_fullscreen) { + base::WeakPtr weak_this = weak_factory_.GetWeakPtr(); ExitFullscreen(false); + + // If `this` gets destructed due to ExitFullscreen(), we need to exit early. + if (!weak_this) { + return; + } CancelKeyboardLock(keyboard_lock_widget_); } } @@ -10372,16 +10559,6 @@ bool WebContentsImpl::ShouldIgnoreInputEvents() { return web_contents->ShouldIgnoreInputEvents(); } -bool WebContentsImpl::ShouldIgnoreA11yInputEvents() { - if (ignore_a11y_input_count_ > 0) { - return true; - } - WebContentsImpl* web_contents = GetOuterWebContents(); - if (!web_contents) { - return false; - } - return web_contents->ShouldIgnoreA11yInputEvents(); -} void WebContentsImpl::FocusOwningWebContents( RenderWidgetHostImpl* render_widget_host) { @@ -12124,10 +12301,10 @@ void WebContentsImpl::SetV8CompileHints(base::ReadOnlySharedMemoryRegion data) { void WebContentsImpl::SetTabSwitchStartTime(base::TimeTicks start_time, bool destination_is_loaded) { - GetVisibleTimeRequestTrigger().UpdateRequest( - start_time, destination_is_loaded, - /*show_reason_tab_switching=*/true, - /*show_reason_bfcache_restore=*/false); + GetVisibleTimeRequestTrigger().UpdateRequest(blink::VisibleTimeEvent{ + .event_start_time = start_time, + .reason = + blink::VisibleTimeEvent::TabSwitchReason(destination_is_loaded)}); } bool WebContentsImpl::IsInPreviewMode() const { diff --git a/tools/under-control/src/content/child/runtime_features.cc b/tools/under-control/src/content/child/runtime_features.cc index 578c7f9e2..ee743c88a 100755 --- a/tools/under-control/src/content/child/runtime_features.cc +++ b/tools/under-control/src/content/child/runtime_features.cc @@ -10,6 +10,7 @@ #include "base/base_switches.h" #include "base/command_line.h" #include "base/feature_list.h" +#include "base/logging.h" #include "base/memory/raw_ref.h" #include "base/metrics/field_trial.h" #include "base/metrics/field_trial_params.h" @@ -194,8 +195,12 @@ void SetRuntimeFeaturesFromChromiumFeatures() { raw_ref(features::kFedCmIdPRegistration), kDefault}, {wf::EnableFedCmLightweightMode, raw_ref(features::kFedCmLightweightMode), kDefault}, + // We want to enable interception when either of these two flags is + // enabled because interception can happen with either flag. {wf::EnableFedCmNavigationInterception, raw_ref(features::kFedCmNavigationInterception), kDefault}, + {wf::EnableFedCmNavigationInterception, + raw_ref(features::kFedCmEmbedderInitiatedLogin), kDefault}, {wf::EnableFedCmErrorAttribute, raw_ref(features::kFedCmErrorAttribute), kDefault}, {wf::EnableFedCmNonStringToken, @@ -292,8 +297,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() { raw_ref(device::features::kWebXRIncubations)}, #endif {wf::EnableXSLT, raw_ref(blink::features::kXSLT)}, - {wf::EnablePermissions, raw_ref(features::kWebPermissionsApi), - kSetOnlyIfOverridden}, }; for (const auto& mapping : blinkFeatureToBaseFeatureMapping) { SetRuntimeFeatureFromChromiumFeature( @@ -621,6 +624,28 @@ void ResolveInvalidConfigurations() { WebRuntimeFeatures::EnableUserMediaElement(false); } + // InstallElement cannot be enabled without the support of the browser + // process. + if (!base::FeatureList::IsEnabled(blink::features::kInstallElement)) { + LOG_IF(WARNING, WebRuntimeFeatures::IsInstallElementEnabledByRuntimeFlag()) + << "InstallElement cannot be enabled in this configuration. Use --" + << switches::kEnableFeatures << "=" + << blink::features::kInstallElement.name << " instead."; + WebRuntimeFeatures::EnableInstallElement(false); + } + + // WebAppInstallation cannot be enabled without the support of the browser + // process. + if (!base::FeatureList::IsEnabled(blink::features::kWebAppInstallation)) { + LOG_IF(WARNING, + WebRuntimeFeatures::IsWebAppInstallationEnabledByRuntimeFlag()) + << "WebAppInstallation cannot be enabled in this configuration. Use " + "--" + << switches::kEnableFeatures << "=" + << blink::features::kWebAppInstallation.name << " instead."; + WebRuntimeFeatures::EnableWebAppInstallation(false); + } + // CSP Hashes in V1 cannot be enabled without the support of the network // service. if (!base::FeatureList::IsEnabled( diff --git a/tools/under-control/src/content/public/browser/content_browser_client.cc b/tools/under-control/src/content/public/browser/content_browser_client.cc index d2dccc29b..e806de04c 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 @@ -499,11 +499,6 @@ bool ContentBrowserClient::ShouldTryToUpdateServiceWorkerRegistration( return true; } -void ContentBrowserClient::UpdateEnabledBlinkRuntimeFeaturesInIsolatedWorker( - BrowserContext* context, - const GURL& script_url, - std::vector& out_forced_enabled_runtime_features) {} - bool ContentBrowserClient::AllowSharedWorker( const GURL& worker_url, const net::SiteForCookies& site_for_cookies, @@ -547,6 +542,11 @@ bool ContentBrowserClient::AllowSharedWorkerBlobURLFix( return true; } +bool ContentBrowserClient::AllowSharedWorkerExtendedLifetime( + BrowserContext* context) { + return true; +} + bool ContentBrowserClient::OverrideWebPreferencesAfterNavigation( WebContents* web_contents, SiteInstance& main_frame_site, @@ -613,19 +613,6 @@ bool ContentBrowserClient::AllowWorkerWebLocks( return true; } -ContentBrowserClient::AllowWebBluetoothResult -ContentBrowserClient::AllowWebBluetooth( - content::BrowserContext* browser_context, - const url::Origin& requesting_origin, - const url::Origin& embedding_origin) { - DCHECK(browser_context); - return AllowWebBluetoothResult::ALLOW; -} - -std::string ContentBrowserClient::GetWebBluetoothBlocklist() { - return std::string(); -} - bool ContentBrowserClient::IsInterestGroupAPIAllowed( content::BrowserContext* browser_context, content::RenderFrameHost* render_frame_host, @@ -706,14 +693,6 @@ bool ContentBrowserClient::IsSharedStorageSelectURLAllowed( return false; } -bool ContentBrowserClient::IsFencedStorageReadAllowed( - content::BrowserContext* browser_context, - content::RenderFrameHost* rfh, - const url::Origin& top_frame_origin, - const url::Origin& accessing_origin) { - return false; -} - bool ContentBrowserClient::IsPrivateAggregationAllowed( content::BrowserContext* browser_context, const url::Origin& top_frame_origin, @@ -749,13 +728,6 @@ bool ContentBrowserClient::IsServiceWorkerSyntheticResponseAllowed( return false; } -void ContentBrowserClient::GrantCookieAccessDueToHeuristic( - content::BrowserContext* browser_context, - const net::SchemefulSite& top_frame_site, - const net::SchemefulSite& accessing_site, - base::TimeDelta ttl, - bool ignore_schemes) {} - bool ContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed( content::BrowserContext* browser_context, content::WebContents* web_contents) { @@ -866,6 +838,11 @@ FeatureObserverClient* ContentBrowserClient::GetFeatureObserverClient() { return nullptr; } +bool ContentBrowserClient::IsPopupBypassAllowed( + RenderFrameHost* render_frame_host) { + return false; +} + bool ContentBrowserClient::CanCreateWindow( RenderFrameHost* opener, const GURL& opener_url, @@ -1538,18 +1515,6 @@ int ContentBrowserClient::NumVersionsInTopicsEpochs( return 0; } -bool ContentBrowserClient::IsBluetoothScanningBlocked( - content::BrowserContext* browser_context, - const url::Origin& requesting_origin, - const url::Origin& embedding_origin) { - return false; -} - -void ContentBrowserClient::BlockBluetoothScanning( - content::BrowserContext* browser_context, - const url::Origin& requesting_origin, - const url::Origin& embedding_origin) {} - void ContentBrowserClient::GetMediaDeviceIDSalt( content::RenderFrameHost* rfh, const net::SiteForCookies& site_for_cookies, @@ -2067,4 +2032,13 @@ bool ContentBrowserClient::OriginSupportsConcreteCrossOriginIsolation( return true; } +bool ContentBrowserClient::IsAttributionInternalsWebUIEnabled() { + return true; +} + +bool ContentBrowserClient::IsFullscreenAllowedForUnfocusedWebContents( + content::WebContents* unfocused_web_contents) { + return false; +} + } // namespace content diff --git a/tools/under-control/src/extensions/common/api/app_window.idl b/tools/under-control/src/extensions/common/api/app_window.idl deleted file mode 100755 index 8e5718e17..000000000 --- a/tools/under-control/src/extensions/common/api/app_window.idl +++ /dev/null @@ -1,492 +0,0 @@ -// Copyright 2012 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.app.window API to create windows. Windows -// have an optional frame with title bar and size controls. They are not -// associated with any Chrome browser windows. See the -// Window State Sample for a demonstration of these options. -namespace app.window { - - // Previously named Bounds. - dictionary ContentBounds { - long? left; - long? top; - long? width; - long? height; - }; - - dictionary BoundsSpecification { - // The X coordinate of the content or window. - long? left; - - // The Y coordinate of the content or window. - long? top; - - // The width of the content or window. - long? width; - - // The height of the content or window. - long? height; - - // The minimum width of the content or window. - long? minWidth; - - // The minimum height of the content or window. - long? minHeight; - - // The maximum width of the content or window. - long? maxWidth; - - // The maximum height of the content or window. - long? maxHeight; - }; - - dictionary Bounds { - // This property can be used to read or write the current X coordinate of - // the content or window. - long left; - - // This property can be used to read or write the current Y coordinate of - // the content or window. - long top; - - // This property can be used to read or write the current width of the - // content or window. - long width; - - // This property can be used to read or write the current height of the - // content or window. - long height; - - // This property can be used to read or write the current minimum width of - // the content or window. A value of null indicates - // 'unspecified'. - long? minWidth; - - // This property can be used to read or write the current minimum height of - // the content or window. A value of null indicates - // 'unspecified'. - long? minHeight; - - // This property can be used to read or write the current maximum width of - // the content or window. A value of null indicates - // 'unspecified'. - long? maxWidth; - - // This property can be used to read or write the current maximum height of - // the content or window. A value of null indicates - // 'unspecified'. - long? maxHeight; - - // Set the left and top position of the content or window. - static void setPosition(long left, long top); - - // Set the width and height of the content or window. - static void setSize(long width, long height); - - // Set the minimum size constraints of the content or window. The minimum - // width or height can be set to null to remove the constraint. - // A value of undefined will leave a constraint unchanged. - static void setMinimumSize(long minWidth, long minHeight); - - // Set the maximum size constraints of the content or window. The maximum - // width or height can be set to null to remove the constraint. - // A value of undefined will leave a constraint unchanged. - static void setMaximumSize(long maxWidth, long maxHeight); - }; - - dictionary FrameOptions { - // Frame type: none or chrome (defaults to - // chrome). - // - // For none, the -webkit-app-region CSS property - // can be used to apply draggability to the app's window. - // - // -webkit-app-region: drag can be used to mark regions - // draggable. no-drag can be used to disable this style on - // nested elements. - DOMString? type; - // Allows the frame color to be set. Frame coloring is only available if the - // frame type is chrome. - // - // Frame coloring is new in Chrome 36. - DOMString? color; - // Allows the frame color of the window when active to be set. Frame - // coloring is only available if the frame type is chrome. - // - // Frame coloring is only available if the frame type is - // chrome. - // - // Frame coloring is new in Chrome 36. - DOMString? activeColor; - // Allows the frame color of the window when inactive to be set differently - // to the active color. Frame - // coloring is only available if the frame type is chrome. - // - // inactiveColor must be used in conjunction with - // color. - // - // Frame coloring is new in Chrome 36. - DOMString? inactiveColor; - }; - - // State of a window: normal, fullscreen, maximized, minimized. - enum State { normal, fullscreen, maximized, minimized }; - - // Specifies the type of window to create. - enum WindowType { - // Default window type. - shell, - // OS managed window (Deprecated). - panel - }; - - [noinline_doc] dictionary CreateWindowOptions { - // Id to identify the window. This will be used to remember the size - // and position of the window and restore that geometry when a window - // with the same id is later opened. - // If a window with a given id is created while another window with the same - // id already exists, the currently opened window will be focused instead of - // creating a new window. - DOMString? id; - - // Used to specify the initial position, initial size and constraints of the - // window's content (excluding window decorations). - // If an id is also specified and a window with a matching - // id has been shown before, the remembered bounds will be used - // instead. - // - // Note that the padding between the inner and outer bounds is determined by - // the OS. Therefore setting the same bounds property for both the - // innerBounds and outerBounds will result in an - // error. - // - // This property is new in Chrome 36. - BoundsSpecification? innerBounds; - - // Used to specify the initial position, initial size and constraints of the - // window (including window decorations such as the title bar and frame). - // If an id is also specified and a window with a matching - // id has been shown before, the remembered bounds will be used - // instead. - // - // Note that the padding between the inner and outer bounds is determined by - // the OS. Therefore setting the same bounds property for both the - // innerBounds and outerBounds will result in an - // error. - // - // This property is new in Chrome 36. - BoundsSpecification? outerBounds; - - // Default width of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultWidth; - - // Default height of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultHeight; - - // Default X coordinate of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultLeft; - - // Default Y coordinate of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultTop; - - // Width of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? width; - - // Height of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? height; - - // X coordinate of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? left; - - // Y coordinate of the window. - [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? top; - - // Minimum width of the window. - [deprecated="Use innerBounds or outerBounds."] long? minWidth; - - // Minimum height of the window. - [deprecated="Use innerBounds or outerBounds."] long? minHeight; - - // Maximum width of the window. - [deprecated="Use innerBounds or outerBounds."] long? maxWidth; - - // Maximum height of the window. - [deprecated="Use innerBounds or outerBounds."] long? maxHeight; - - // Type of window to create. - [deprecated="All app windows use the 'shell' window type"] WindowType? type; - - // Creates a special ime window. This window is not focusable and can be - // stacked above virtual keyboard window. This is restriced to component ime - // extensions. - // Requires the app.window.ime API permission. - [nodoc] boolean? ime; - - // If true, the window will have its own shelf icon. Otherwise the window - // will be grouped in the shelf with other windows that are associated with - // the app. Defaults to false. If showInShelf is set to true you need to - // specify an id for the window. - boolean? showInShelf; - - // URL of the window icon. A window can have its own icon when showInShelf - // is set to true. The URL should be a global or an extension local URL. - DOMString? icon; - - // Frame type: none or chrome (defaults to - // chrome). For none, the - // -webkit-app-region CSS property can be used to apply - // draggability to the app's window. -webkit-app-region: drag - // can be used to mark regions draggable. no-drag can be used - // to disable this style on nested elements. - // - // Use of FrameOptions is new in M36. - (DOMString or FrameOptions)? frame; - - // Size and position of the content in the window (excluding the titlebar). - // If an id is also specified and a window with a matching id has been shown - // before, the remembered bounds of the window will be used instead. - [deprecated="Use innerBounds or outerBounds."] ContentBounds? bounds; - - // Enable window background transparency. - // Only supported in ash. Requires the app.window.alpha API - // permission. - [nodoc] boolean? alphaEnabled; - - // The initial state of the window, allowing it to be created already - // fullscreen, maximized, or minimized. Defaults to 'normal'. - State? state; - - // If true, the window will be created in a hidden state. Call show() on - // the window to show it once it has been created. Defaults to false. - boolean? hidden; - - // If true, the window will be resizable by the user. Defaults to true. - boolean? resizable; - - // By default if you specify an id for the window, the window will only be - // created if another window with the same id doesn't already exist. If a - // window with the same id already exists that window is activated instead. - // If you do want to create multiple windows with the same id, you can - // set this property to false. - [deprecated="Multiple windows with the same id is no longer supported."] boolean? singleton; - - // If true, the window will stay above most other windows. If there are - // multiple windows of this kind, the currently focused window will be in - // the foreground. Requires the alwaysOnTopWindows - // permission. Defaults to false. - // - // Call setAlwaysOnTop() on the window to change this property - // after creation. - boolean? alwaysOnTop; - - // If true, the window will be focused when created. Defaults to true. - boolean? focused; - - // If true, and supported by the platform, the window will be visible on all - // workspaces. - boolean? visibleOnAllWorkspaces; - }; - - // Called in the creating window (parent) before the load event is called in - // the created window (child). The parent can set fields or functions on the - // child usable from onload. E.g. background.js: - // - // function(createdWindow) { createdWindow.contentWindow.foo = - // function () { }; }; - // - // window.js: - // - // window.onload = function () { foo(); } - callback CreateWindowCallback = - void ([instanceOf=AppWindow] object createdWindow); - - [noinline_doc] dictionary AppWindow { - // Focus the window. - static void focus(); - - // Fullscreens the window. - // - // The user will be able to restore the window by pressing ESC. An - // application can prevent the fullscreen state to be left when ESC is - // pressed by requesting the app.window.fullscreen.overrideEsc - // permission and canceling the event by calling .preventDefault(), in the - // keydown and keyup handlers, like this: - // - // window.onkeydown = window.onkeyup = function(e) { if (e.keyCode == - // 27 /* ESC */) { e.preventDefault(); } }; - // - // Note window.fullscreen() will cause the entire window to - // become fullscreen and does not require a user gesture. The HTML5 - // fullscreen API can also be used to enter fullscreen mode (see - // Web APIs - // for more details). - static void fullscreen(); - - // Is the window fullscreen? This will be true if the window has been - // created fullscreen or was made fullscreen via the - // AppWindow or HTML5 fullscreen APIs. - static boolean isFullscreen(); - - // Minimize the window. - static void minimize(); - - // Is the window minimized? - static boolean isMinimized(); - - // Maximize the window. - static void maximize(); - - // Is the window maximized? - static boolean isMaximized(); - - // Restore the window, exiting a maximized, minimized, or fullscreen state. - static void restore(); - - // Move the window to the position (|left|, |top|). - [deprecated="Use outerBounds."] static void moveTo(long left, long top); - - // Resize the window to |width|x|height| pixels in size. - [deprecated="Use outerBounds."] static void resizeTo(long width, long height); - - // Draw attention to the window. - static void drawAttention(); - - // Clear attention to the window. - static void clearAttention(); - - // Close the window. - static void close(); - - // Show the window. Does nothing if the window is already visible. - // Focus the window if |focused| is set to true or omitted. - static void show(optional boolean focused); - - // Hide the window. Does nothing if the window is already hidden. - static void hide(); - - // Get the window's inner bounds as a $(ref:ContentBounds) object. - [nocompile, deprecated="Use innerBounds or outerBounds."] static ContentBounds getBounds(); - - // Set the window's inner bounds. - [nocompile, deprecated="Use innerBounds or outerBounds."] static void setBounds(ContentBounds bounds); - - // Set the app icon for the window (experimental). - // Currently this is only being implemented on Ash. - // TODO(stevenjb): Investigate implementing this on Windows and OSX. - [nodoc] static void setIcon(DOMString iconUrl); - - // Is the window always on top? - static boolean isAlwaysOnTop(); - - // Accessors for testing. - [nodoc] boolean hasFrameColor; - [nodoc] long activeFrameColor; - [nodoc] long inactiveFrameColor; - - // Set whether the window should stay above most other windows. Requires the - // alwaysOnTopWindows permission. - static void setAlwaysOnTop(boolean alwaysOnTop); - - // Can the window use alpha transparency? - // TODO(jackhou): Document this properly before going to stable. - [nodoc] static boolean alphaEnabled(); - - // Set whether the window is visible on all workspaces. (Only for platforms - // that support this). - static void setVisibleOnAllWorkspaces(boolean alwaysVisible); - - // The JavaScript 'window' object for the created child. - [instanceOf=Window] object contentWindow; - - // The id the window was created with. - DOMString id; - - // The position, size and constraints of the window's content, which does - // not include window decorations. - // This property is new in Chrome 36. - Bounds innerBounds; - - // The position, size and constraints of the window, which includes window - // decorations, such as the title bar and frame. - // This property is new in Chrome 36. - Bounds outerBounds; - }; - - interface Functions { - // The size and position of a window can be specified in a number of - // different ways. The most simple option is not specifying anything at - // all, in which case a default size and platform dependent position will - // be used. - // - // To set the position, size and constraints of the window, use the - // innerBounds or outerBounds properties. Inner - // bounds do not include window decorations. Outer bounds include the - // window's title bar and frame. Note that the padding between the inner and - // outer bounds is determined by the OS. Therefore setting the same property - // for both inner and outer bounds is considered an error (for example, - // setting both innerBounds.left and - // outerBounds.left). - // - // To automatically remember the positions of windows you can give them ids. - // If a window has an id, This id is used to remember the size and position - // of the window whenever it is moved or resized. This size and position is - // then used instead of the specified bounds on subsequent opening of a - // window with the same id. If you need to open a window with an id at a - // location other than the remembered default, you can create it hidden, - // move it to the desired location, then show it. - static void create( - DOMString url, - optional CreateWindowOptions options, - optional CreateWindowCallback callback); - - // Returns an $(ref:AppWindow) object for the - // current script context (ie JavaScript 'window' object). This can also be - // called on a handle to a script context for another page, for example: - // otherWindow.chrome.app.window.current(). - [nocompile] static AppWindow current(); - [nocompile, nodoc] static void initializeAppWindow(object state); - - // Gets an array of all currently created app windows. This method is new in - // Chrome 33. - [nocompile] static AppWindow[] getAll(); - - // Gets an $(ref:AppWindow) with the given id. If no window with the given id - // exists null is returned. This method is new in Chrome 33. - [nocompile] static AppWindow get(DOMString id); - - // Whether the current platform supports windows being visible on all - // workspaces. - [nocompile] static boolean canSetVisibleOnAllWorkspaces(); - }; - - interface Events { - // Fired when the window is resized. - [nocompile] static void onBoundsChanged(); - - // Fired when the window is closed. Note, this should be listened to from - // a window other than the window being closed, for example from the - // background page. This is because the window being closed will be in the - // process of being torn down when the event is fired, which means not all - // APIs in the window's script context will be functional. - [nocompile] static void onClosed(); - - // Fired when the window is fullscreened (either via the - // AppWindow or HTML5 APIs). - [nocompile] static void onFullscreened(); - - // Fired when the window is maximized. - [nocompile] static void onMaximized(); - - // Fired when the window is minimized. - [nocompile] static void onMinimized(); - - // Fired when the window is restored from being minimized or maximized. - [nocompile] static void onRestored(); - - // Fired when the window's ability to use alpha transparency changes. - [nocompile, nodoc] static void onAlphaEnabledChanged(); - }; -}; diff --git a/tools/under-control/src/extensions/common/api/automation.idl b/tools/under-control/src/extensions/common/api/automation.idl deleted file mode 100755 index e061bf176..000000000 --- a/tools/under-control/src/extensions/common/api/automation.idl +++ /dev/null @@ -1,1587 +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.automation API allows developers to access the -// automation (accessibility) tree for the browser. The tree resembles the DOM -// tree, but only exposes the semantic structure of a page. It can be -// used to programmatically interact with a page by examining names, roles, and -// states, listening for events, and performing actions on nodes. -[nocompile] namespace automation { - // Keep the following enums in sync with 'ui/accessibility/ax_enums.mojom'. - // They are kept here purely for extension docs generation. - - // Possible events fired on an $(ref:automation.AutomationNode). - enum EventType { - accessKeyChanged, - activeDescendantChanged, - alert, - // TODO(crbug.com/1464633) Fully remove ariaAttributeChangedDeprecated - // starting in 122, because although it was removed in 118, it is still - // present in earlier versions of LaCros. - ariaAttributeChangedDeprecated, - ariaCurrentChanged, - ariaNotificationsPosted, - atomicChanged, - autoCompleteChanged, - autocorrectionOccured, - autofillAvailabilityChanged, - blur, - busyChanged, - caretBoundsChanged, - checkedStateChanged, - checkedStateDescriptionChanged, - childrenChanged, - clicked, - collapsed, - controlsChanged, - defaultActionVerbChanged, - detailsChanged, - describedByChanged, - descriptionChanged, - documentSelectionChanged, - documentTitleChanged, - dropeffectChanged, - editableTextChanged, - enabledChanged, - endOfTest, - expanded, - expandedChanged, - flowFromChanged, - flowToChanged, - focus, - focusAfterMenuClose, - focusChanged, - focusContext, - grabbedChanged, - grammarMarkerChanged, - haspopupChanged, - hide, - hierarchicalLevelChanged, - highlightMarkerChanged, - hitTestResult, - hover, - ignoredChanged, - imageAnnotationChanged, - imageFrameUpdated, - invalidStatusChanged, - keyShortcutsChanged, - labeledByChanged, - languageChanged, - layoutComplete, - layoutInvalidated, // fired when aria-busy goes false - liveRegionChanged, - liveRegionCreated, - liveRegionNodeChanged, // fired on a node within a live region. - liveRelevantChanged, - liveStatusChanged, - loadComplete, - loadStart, - locationChanged, - mediaStartedPlaying, - mediaStoppedPlaying, - menuEnd, - menuItemSelected, - menuListValueChangedDeprecated, - menuPopupEnd, - menuPopupStart, - menuStart, - mouseCanceled, - mouseDragged, - mouseMoved, - mousePressed, - mouseReleased, - multilineStateChanged, - multiselectableStateChanged, - nameChanged, - objectAttributeChanged, - orientationChanged, - parentChanged, - placeholderChanged, - positionInSetChanged, - rangeValueChanged, - rangeValueMaxChanged, - rangeValueMinChanged, - rangeValueStepChanged, - readonlyChanged, - relatedNodeChanged, - requiredStateChanged, - roleChanged, - rowCollapsed, - rowCountChanged, - rowExpanded, - scrollHorizontalPositionChanged, - scrollPositionChanged, - scrollVerticalPositionChanged, - scrolledToAnchor, - selectedChanged, - selectedChildrenChanged, - selectedValueChanged, - selection, - selectionAdd, - selectionRemove, - setSizeChanged, - show, - sortChanged, - spellingMarkerChanged, - stateChanged, - subtreeCreated, - textAttributeChanged, - textSelectionChanged, - textChanged, - tooltipClosed, - tooltipOpened, - treeChanged, - valueInTextFieldChanged, - valueChanged, // Deprecated. - windowActivated, - windowDeactivated, - windowVisibilityChanged - }; - - // Describes the purpose of an $(ref:automation.AutomationNode). - enum RoleType { - abbr, - alert, - alertDialog, - application, - article, - audio, - banner, - blockquote, - button, - canvas, - caption, - caret, - cell, - checkBox, - client, - code, - colorWell, - column, - columnHeader, - comboBoxGrouping, - comboBoxMenuButton, - comboBoxSelect, - comment, - complementary, - contentDeletion, - contentInsertion, - contentInfo, - date, - dateTime, - definition, - descriptionList, - descriptionListDetailDeprecated, - descriptionListTermDeprecated, - desktop, - details, - dialog, - directoryDeprecated, - disclosureTriangle, - disclosureTriangleGrouped, - // -------------------------------------------------------------- - // DPub Roles: - // https://www.w3.org/TR/dpub-aam-1.0/#mapping_role_table - docAbstract, - docAcknowledgments, - docAfterword, - docAppendix, - docBackLink, - docBiblioEntry, - docBibliography, - docBiblioRef, - docChapter, - docColophon, - docConclusion, - docCover, - docCredit, - docCredits, - docDedication, - docEndnote, - docEndnotes, - docEpigraph, - docEpilogue, - docErrata, - docExample, - docFootnote, - docForeword, - docGlossary, - docGlossRef, - docIndex, - docIntroduction, - docNoteRef, - docNotice, - docPageBreak, - docPageFooter, - docPageHeader, - docPageList, - docPart, - docPreface, - docPrologue, - docPullquote, - docQna, - docSubtitle, - docTip, - docToc, - // End DPub roles. - // -------------------------------------------------------------- - document, - embeddedObject, - emphasis, - feed, - figcaption, - figure, - footer, - form, - genericContainer, - // -------------------------------------------------------------- - // ARIA Graphics module roles: - // https://rawgit.com/w3c/graphics-aam/master/#mapping_role_table - graphicsDocument, - graphicsObject, - graphicsSymbol, - // End ARIA Graphics module roles. - // -------------------------------------------------------------- - grid, - gridCell, - group, - header, - heading, - iframe, - iframePresentational, - image, - imeCandidate, - inlineTextBox, - inputTime, - keyboard, - labelText, - layoutTable, - layoutTableCell, - layoutTableRow, - legend, - lineBreak, - link, - list, - listBox, - listBoxOption, - listGrid, // Native - listItem, - listMarker, - log, - main, - mark, - marquee, - math, - mathMLFraction, - mathMLIdentifier, - mathMLMath, - mathMLMultiscripts, - mathMLNoneScript, - mathMLNumber, - mathMLOperator, - mathMLOver, - mathMLPrescriptDelimiter, - mathMLRoot, - mathMLRow, - mathMLSquareRoot, - mathMLStringLiteral, - mathMLSub, - mathMLSubSup, - mathMLSup, - mathMLTable, - mathMLTableCell, - mathMLTableRow, - mathMLText, - mathMLUnder, - mathMLUnderOver, - menu, - menuBar, - menuItem, - menuItemCheckBox, - menuItemRadio, - menuItemSeparator, - menuListOption, - menuListPopup, - meter, - navigation, - note, - pane, - paragraph, - pdfActionableHighlight, - pdfRoot, - pluginObject, - popUpButton, - portalDeprecated, - preDeprecated, - progressIndicator, - radioButton, - radioGroup, - region, - rootWebArea, - row, - rowGroup, - rowHeader, - ruby, - rubyAnnotation, - scrollBar, - scrollView, - search, - searchBox, - section, - sectionFooter, - sectionHeader, - sectionWithoutName, - slider, - spinButton, - splitter, - staticText, - status, - strong, - subscript, - suggestion, - superscript, - svgRoot, - switch, - tab, - tabList, - tabPanel, - table, - tableHeaderContainer, - term, - textField, - textFieldWithComboBox, - time, - timer, - titleBar, - toggleButton, - toolbar, - tooltip, - tree, - treeGrid, - treeItem, - unknown, - video, - webView, - window - }; - - // Describes characteristics of an $(ref:automation.AutomationNode). - enum StateType { - autofillAvailable, - collapsed, - default, - editable, - expanded, - focusable, - focused, - horizontal, - hovered, - ignored, - invisible, - linked, - multiline, - multiselectable, - offscreen, - protected, - required, - richlyEditable, - vertical, - visited, - hasActions, - hasInterestFor - }; - - // All possible actions that can be performed on automation nodes. - enum ActionType { - annotatePageImages, - blur, - clearAccessibilityFocus, - collapse, - customAction, - decrement, - doDefault, - expand, - focus, - getImageData, - getTextLocation, - hideTooltip, - hitTest, - increment, - internalInvalidateTree, - loadInlineTextBoxes, - longClick, - replaceSelectedText, - requestLayoutBasedAction, - resumeMedia, - scrollBackward, - scrollDown, - scrollForward, - scrollLeft, - scrollRight, - scrollUp, - scrollToMakeVisible, - scrollToPoint, - scrollToPositionAtRowColumn, - setAccessibilityFocus, - setScrollOffset, - setSelection, - setSequentialFocusNavigationStartingPoint, - setValue, - showContextMenu, - signalEndOfTest, - showTooltip, - stitchChildTree, - startDuckingMedia, - stopDuckingMedia, - suspendMedia - }; - - // Possible changes to the automation tree. For any given atomic change - // to the tree, each node that's added, removed, or changed, will appear - // in exactly one TreeChange, with one of these types. - // - // nodeCreated means that this node was added to the tree and its parent is - // new as well, so it's just one node in a new subtree that was added. - enum TreeChangeType { - /** - * This node was added to the tree and its parent is new as well, - * so it's just one node in a new subtree that was added. - */ - nodeCreated, - - /** - * This node was added to the tree but its parent was already in the - * tree, so it's possibly the root of a new subtree - it does not mean - * that it necessarily has children. - */ - subtreeCreated, - - /** - * This node changed. - */ - nodeChanged, - - /** - * This node's text (name) changed. - */ - textChanged, - - /** - * This node was removed. - */ - nodeRemoved, - /** - * This subtree has finished an update. - */ - subtreeUpdateEnd - }; - - // Where the node's name is from. - enum NameFromType { - attribute, - attributeExplicitlyEmpty, - caption, - contents, - cssAltText, - interestFor, - placeholder, - popoverTarget, - prohibited, - prohibitedAndRedundant, - relatedElement, - title, - value - }; - - enum DescriptionFromType { - ariaDescription, - attributeExplicitlyEmpty, - buttonLabel, - interestFor, - popoverTarget, - prohibitedNameRepair, - relatedElement, - rubyAnnotation, - summary, - svgDescElement, - tableCaption, - title - }; - - // The input restriction for a object -- even non-controls can be disabled. - enum Restriction { - disabled, - readOnly - }; - - // Availability and types for an interactive popup element. - enum HasPopup { - false, - true, - menu, - listbox, - tree, - grid, - dialog - }; - - // Indicates the ARIA-current state. - enum AriaCurrentState { - false, - true, - page, - step, - location, - date, - time - }; - - // Lists the values that `invalidState` can take on. - enum InvalidState { - false, - true - }; - - // Describes possible actions when performing a do default action. - enum DefaultActionVerb { - activate, - check, - click, - clickAncestor, - clickInHitTest, - clickNotInHitTest, - jump, - open, - press, - select, - uncheck -}; - - // Types of markers on text. See AutomationNode.markerTypes. -enum MarkerType { - spelling, - grammar, - textMatch, - activeSuggestion, - suggestion, - highlight -}; - -// The following three enums are associated with an $(ref:automation.AutomationIntent). - -// A command associated with an $(ref:automation.AutomationIntent). -enum IntentCommandType { - clearSelection, - delete, - dictate, - extendSelection, - format, - history, - insert, - marker, - moveSelection, - setSelection -}; - -// The type of an input event associated with an $(ref:automation.AutomationIntent). It describes an edit -// command, e.g. IntentCommandType.insert, in more detail. -enum IntentInputEventType { - // Insertion. - insertText, - insertLineBreak, - insertParagraph, - insertOrderedList, - insertUnorderedList, - insertHorizontalRule, - insertFromPaste, - insertFromDrop, - insertFromYank, - insertTranspose, - insertReplacementText, - insertCompositionText, - insertLink, - // Deletion. - deleteWordBackward, - deleteWordForward, - deleteSoftLineBackward, - deleteSoftLineForward, - deleteHardLineBackward, - deleteHardLineForward, - deleteContentBackward, - deleteContentForward, - deleteByCut, - deleteByDrag, - // History. - historyUndo, - historyRedo, - // Formatting. - formatBold, - formatItalic, - formatUnderline, - formatStrikeThrough, - formatSuperscript, - formatSubscript, - formatJustifyCenter, - formatJustifyFull, - formatJustifyRight, - formatJustifyLeft, - formatIndent, - formatOutdent, - formatRemove, - formatSetBlockTextDirection -}; - -// A text boundary associated with an $(ref:automation.AutomationIntent). -enum IntentTextBoundaryType { - character, - formatEnd, - formatStart, - formatStartOrEnd, - lineEnd, - lineStart, - lineStartOrEnd, - object, - pageEnd, - pageStart, - pageStartOrEnd, - paragraphEnd, - paragraphStart, - paragraphStartSkippingEmptyParagraphs, - paragraphStartOrEnd, - sentenceEnd, - sentenceStart, - sentenceStartOrEnd, - webPage, - wordEnd, - wordStart, - wordStartOrEnd -}; - -// A move direction associated with an $(ref:automation.AutomationIntent). -enum IntentMoveDirectionType { - backward, - forward -}; - -// A sort applied to a table row or column header. -enum SortDirectionType { - unsorted, - ascending, - descending, - other -}; - -// A type of AutomationPosition. -enum PositionType { - null, - text, - tree -}; - - dictionary Rect { - long left; - long top; - long width; - long height; - }; - - // Arguments for the find() and findAll() methods. - [nocompile] dictionary FindParams { - RoleType? role; - - // A map of $(ref:automation.StateType) to boolean, indicating for each - // state whether it should be set or not. For example: - // { StateType.disabled: false } would only match if - // StateType.disabled was not present in the node's - // state object. - object? state; - - // A map of attribute name to expected value, for example - // { name: 'Root directory', checkbox_mixed: true }. - // String attribute values may be specified as a regex, for example - // { name: /stralia$/ }. - // Unless specifying a regex, the expected value must be an exact match - // in type and value for the actual value. Thus, the type of expected value - // must be one of: - //
    - //
  • string
  • - //
  • integer
  • - //
  • float
  • - //
  • boolean
  • - //
- object? attributes; - }; - - // Arguments for the setDocumentSelection() function. - [nocompile] dictionary SetDocumentSelectionParams { - // The node where the selection begins. - [instanceOf=AutomationNode] object anchorObject; - - // The offset in the anchor node where the selection begins. - long anchorOffset; - - // The node where the selection ends. - [instanceOf=AutomationNode] object focusObject; - - // The offset within the focus node where the selection ends. - long focusOffset; - }; - - [nocompile] dictionary AutomationIntent { - // A command associated with this AutomationIntent. - IntentCommandType command; - - // A text boundary associated with this AutomationIntent. - IntentTextBoundaryType textBoundary; - - // A move direction associated with this AutomationIntent. - IntentMoveDirectionType? moveDirection; - }; - - // An event in the Automation tree. - [nocompile] dictionary AutomationEvent { - // The $(ref:automation.AutomationNode) to which the event was targeted. - AutomationNode target; - - // The type of the event. - EventType type; - - // The source of this event. - DOMString eventFrom; - - // Any mouse coordinates associated with this event. - long mouseX; - long mouseY; - - // A list of $(ref:automation.AutomationIntent)s associated with this event. - AutomationIntent[] intents; - - // Stops this event from further processing except for any remaining - // listeners on $(ref:automation.AutomationEvent.target). - static void stopPropagation(); - }; - - // A listener for events on an AutomationNode. - callback AutomationListener = void(AutomationEvent event); - - // A change to the Automation tree. - [nocompile] dictionary TreeChange { - // The $(ref:automation.AutomationNode) that changed. - AutomationNode target; - - // The type of change. - TreeChangeType type; - }; - - // Possible tree changes to listen to using addTreeChangeObserver. - // Note that listening to all tree changes can be expensive. - enum TreeChangeObserverFilter { - noTreeChanges, - liveRegionTreeChanges, - textMarkerChanges, - allTreeChanges - }; - - // A listener for changes on the AutomationNode tree. - callback TreeChangeObserver = void(TreeChange treeChange); - - // Callback called for actions with a response. - callback PerformActionCallback = void(boolean result); - callback PerformActionCallbackWithNode = void(AutomationNode node); - callback BoundsForRangeCallback = void(Rect bounds); - - [nocompile] dictionary CustomAction { - long id; - DOMString description; - }; - - // A marker associated with an AutomationNode. - [nocompile] dictionary Marker { - // The start offset within the text of the associated node. - long startOffset; - - // The end offset within the text of the associated node. - long endOffset; - - // A mapping of MarkerType to true or undefined indicating the marker types - // for this marker. - object flags; - }; - - // A position in the automation tree. - // See ui/accessibility/ax_position.h for documentation. All members need to - // be kept in sync with - // extensions/renderer/api/automation/automation_position.h. - // Some members there are kept private and not represented here. - [nocompile] dictionary AutomationPosition { - - AutomationNode? node; - long childIndex; - long textOffset; - DOMString affinity; - - static boolean isNullPosition(); - static boolean isTreePosition(); - static boolean isTextPosition(); - static boolean isLeafTextPosition(); - static boolean atStartOfAnchor(); - static boolean atEndOfAnchor(); - static boolean atStartOfWord(); - static boolean atEndOfWord(); - static boolean atStartOfLine(); - static boolean atEndOfLine(); - static boolean atStartOfParagraph(); - static boolean atEndOfParagraph(); - static boolean atStartOfPage(); - static boolean atEndOfPage(); - static boolean atStartOfFormat(); - static boolean atEndOfFormat(); - static boolean atStartOfDocument(); - static boolean atEndOfDocument(); - static void asTreePosition(); - static void asTextPosition(); - static void asLeafTextPosition(); - static void moveToPositionAtStartOfAnchor(); - static void moveToPositionAtEndOfAnchor(); - static void moveToPositionAtStartOfDocument(); - static void moveToPositionAtEndOfDocument(); - static void moveToParentPosition(); - static void moveToNextLeafTreePosition(); - static void moveToPreviousLeafTreePosition(); - static void moveToNextLeafTextPosition(); - static void moveToPreviousLeafTextPosition(); - static void moveToNextCharacterPosition(); - static void moveToPreviousCharacterPosition(); - static void moveToNextWordStartPosition(); - static void moveToPreviousWordStartPosition(); - static void moveToNextWordEndPosition(); - static void moveToPreviousWordEndPosition(); - static void moveToNextLineStartPosition(); - static void moveToPreviousLineStartPosition(); - static void moveToNextLineEndPosition(); - static void moveToPreviousLineEndPosition(); - static void moveToNextFormatStartPosition(); - static void moveToPreviousFormatStartPosition(); - static void moveToNextFormatEndPosition(); - static void moveToPreviousFormatEndPosition(); - static void moveToNextParagraphStartPosition(); - static void moveToPreviousParagraphStartPosition(); - static void moveToNextParagraphEndPosition(); - static void moveToPreviousParagraphEndPosition(); - static void moveToNextPageStartPosition(); - static void moveToPreviousPageStartPosition(); - static void moveToNextPageEndPosition(); - static void moveToPreviousPageEndPosition(); - static void moveToNextAnchorPosition(); - static void moveToPreviousAnchorPosition(); - static long maxTextOffset(); - static boolean isInLineBreak(); - static boolean isInTextObject(); - static boolean isInWhiteSpace(); - static boolean isValid(); - static DOMString getText(); - }; - - // A single node in an Automation tree. - [nocompile] dictionary AutomationNode { - // The root node of the tree containing this AutomationNode. - AutomationNode? root; - - // Whether this AutomationNode is a root node. - boolean isRootNode; - - // The role of this node. - RoleType? role; - - // The $(ref:automation.StateType)s describing this node. - // @type {Object} - // - object? state; - - // The rendered location (as a bounding box) of this node in global - // screen coordinates. - Rect location; - - // Determines the location of the text within the node specified by - // |startIndex| and |endIndex|, inclusively. Invokes |callback| with the - // bounding rectangle, in screen coordinates. |callback| can be invoked - // either synchronously or asynchronously. The bounds are clipped to - // ancestors. - static void boundsForRange(long startIndex, long endIndex, - BoundsForRangeCallback callback); - - // Determines the location of the text within the node specified by - // |startIndex| and |endIndex|, inclusively. Invokes |callback| with the - // bounding rectangle, in screen coordinates. |callback| can be invoked - // either synchronously or asynchronously. The bounds are not clipped to - // ancestors. - static void unclippedBoundsForRange(long startIndex, long endIndex, - BoundsForRangeCallback callback); - - // The location (as a bounding box) of this node in global screen - // coordinates without applying any clipping from ancestors. - Rect? unclippedLocation; - - // The purpose of the node, other than the role, if any. - DOMString? description; - - // Description of the state of the checkbox. - // Used only when the node is checkable. - DOMString? checkedStateDescription; - - // The placeholder for this text field, if any. - DOMString? placeholder; - - // The role description for this node. - DOMString? roleDescription; - - // The accessible name for this node, via the - // - // Accessible Name Calculation process. - DOMString? name; - - // Explains what will happen when the doDefault action is performed. - DOMString? doDefaultLabel; - - // Explains what will happen when the long click action is performed. - DOMString? longClickLabel; - - // The tooltip of the node, if any. - DOMString? tooltip; - - // The source of the name. - NameFromType? nameFrom; - - // The image annotation for image nodes, which may be a human-readable - // string that is the contextualized annotation or a status string related - // to annotations. - DOMString? imageAnnotation; - - // The value for this node: for example the value attribute of - // an <input> element. - DOMString? value; - - // The HTML id for this element, if this node is an HTML element. - DOMString? htmlId; - - // The HTML tag for this element, if this node is an HTML element. - DOMString? htmlTag; - - // The level of a heading or tree item. - long? hierarchicalLevel; - - // The current caret bounds in screen coordinates. - Rect? caretBounds; - - // The start and end index of each word in an inline text box. - long[]? wordStarts; - long[]? wordEnds; - - // The start indexes of each sentence within the node's name. - long[]? sentenceStarts; - - // The end indexes of each sentence within the node's name. For most nodes, - // the size of sentenceStarts array should be equal to the size of - // sentenceEnds array. Two exceptions are (1) node at the begining of a - // paragraph but the end of the node's sentences is in its following node. - // Such a node has one more start index. (2) Node at the end of a paragraph - // but the start of the node's sentences is in its previous node. Such a - // node has one more end index. For example,

Hello world.

has - // two nodes. The first one has one start index (i.e., 0) but no end index. - // The second node has one end index (i.e., 7) but no start index. - long[]? sentenceEnds; - - // The start index of each word within the node's name. This is different - // from wordStarts because it is not restricted to inline text boxes and can - // be used for any type of element. - long[]? nonInlineTextWordStarts; - - // The end index of each word within the node's name. This is different - // from wordEnds because it is not restricted to inline text boxes and can - // be used for any type of element. - long[]? nonInlineTextWordEnds; - - // The nodes, if any, which this node is specified to control via - // - // aria-controls. - AutomationNode[]? controls; - - // The nodes, if any, which form a description for this node. - AutomationNode[]? describedBy; - - // The nodes, if any, which may optionally be navigated to after this - // one. See - // - // aria-flowto. - AutomationNode[]? flowTo; - - // The nodes, if any, which form a label for this element. Generally, the - // text from these elements will also be exposed as the element's accessible - // name, via the $(ref:automation.AutomationNode.name) attribute. - AutomationNode[]? labelledBy; - - // The node referred to by aria-activedescendant, where - // applicable - AutomationNode? activeDescendant; - - // Reverse relationship for active descendant. - AutomationNode[]? activeDescendantFor; - - // The target of an in-page link. - AutomationNode? inPageLinkTarget; - - // A node that provides more details about the current node. - AutomationNode[]? details; - - // The nodes, if any, that provide an error message for the current node. - AutomationNode[]? errorMessages; - - // Reverse relationship for details. - AutomationNode[]? detailsFor; - - // Reverse relationship for errorMessage. - AutomationNode[]? errorMessageFor; - - // Reverse relationship for controls. - AutomationNode[]? controlledBy; - - // Reverse relationship for describedBy. - AutomationNode[]? descriptionFor; - - // Reverse relationship for flowTo. - AutomationNode[]? flowFrom; - - // Reverse relationship for labelledBy. - AutomationNode[]? labelFor; - - // The column header nodes for a table cell. - AutomationNode[]? tableCellColumnHeaders; - - // The row header nodes for a table cell. - AutomationNode[]? tableCellRowHeaders; - - // An array of standard actions available on this node. - ActionType[]? standardActions; - - // An array of custom actions. - CustomAction[]? customActions; - - // The action taken by calling doDefault. - DefaultActionVerb? defaultActionVerb; - - // - // Link attributes. - // - - // The URL that this link will navigate to. - DOMString? url; - - // - // Document attributes. - // - - // The URL of this document. - DOMString? docUrl; - - // The title of this document. - DOMString? docTitle; - - // Whether this document has finished loading. - boolean? docLoaded; - - // The proportion (out of 1.0) that this doc has completed loading. - double? docLoadingProgress; - - // - // Scrollable container attributes. - // - - long? scrollX; - long? scrollXMin; - long? scrollXMax; - long? scrollY; - long? scrollYMin; - long? scrollYMax; - - // Indicates whether this node is scrollable. - boolean? scrollable; - - // - // Editable text field attributes. - // - - // The character index of the start of the selection within this editable - // text element; -1 if no selection. - long? textSelStart; - - // The character index of the end of the selection within this editable - // text element; -1 if no selection. - long? textSelEnd; - - // An array of Marker objects for this node. - Marker[]? markers; - - // - // Tree selection attributes (available on root nodes only) - // - - // If a selection is present, whether the anchor of the selection comes - // after its focus in the accessibility tree. - boolean? isSelectionBackward; - // The anchor node of the tree selection, if any. - AutomationNode? anchorObject; - // The anchor offset of the tree selection, if any. - long? anchorOffset; - // The affinity of the tree selection anchor, if any. - DOMString? anchorAffinity; - // The focus node of the tree selection, if any. - AutomationNode? focusObject; - // The focus offset of the tree selection, if any. - long? focusOffset; - // The affinity of the tree selection focus, if any. - DOMString? focusAffinity; - - // The selection start node of the tree selection, if any. - AutomationNode? selectionStartObject; - // The selection start offset of the tree selection, if any. - long? selectionStartOffset; - // The affinity of the tree selection start, if any. - DOMString? selectionStartAffinity; - // The selection end node of the tree selection, if any. - AutomationNode? selectionEndObject; - // The selection end offset of the tree selection, if any. - long? selectionEndOffset; - // The affinity of the tree selection end, if any. - DOMString? selectionEndAffinity; - - // Indicates that the node is marked user-select:none - boolean? notUserSelectableStyle; - - // - // Range attributes. - // - - // The current value for this range. - double? valueForRange; - - // The minimum possible value for this range. - double? minValueForRange; - - // The maximum possible value for this range. - double? maxValueForRange; - - // - // List attributes. - // - - // The 1-based index of an item in a set. - long? posInSet; - - // The number of items in a set; - long? setSize; - - // - // Table attributes. - // - - // The number of rows in this table as specified in the DOM. - long? tableRowCount; - - // The number of rows in this table as specified by the page author. - long? ariaRowCount; - - // The number of columns in this table as specified in the DOM. - long? tableColumnCount; - - // The number of columns in this table as specified by the page author. - long? ariaColumnCount; - - // - // Table cell attributes. - // - - // The zero-based index of the column that this cell is in as specified in - // the DOM. - long? tableCellColumnIndex; - - // The ARIA column index as specified by the page author. - long? tableCellAriaColumnIndex; - - // The number of columns that this cell spans (default is 1). - long? tableCellColumnSpan; - - // The zero-based index of the row that this cell is in as specified in the - // DOM. - long? tableCellRowIndex; - - // The ARIA row index as specified by the page author. - long? tableCellAriaRowIndex; - - // The number of rows that this cell spans (default is 1). - long? tableCellRowSpan; - - // The corresponding column header for this cell. - AutomationNode? tableColumnHeader; - - // The corresponding row header for this cell. - AutomationNode? tableRowHeader; - - // The column index of this column node. - long? tableColumnIndex; - - // The row index of this row node. - long? tableRowIndex; - - // - // Live region attributes. - // - - // The type of region if this is the root of a live region. - // Possible values are 'polite' and 'assertive'. - DOMString? liveStatus; - - // The value of aria-relevant for a live region. - DOMString? liveRelevant; - - // The value of aria-atomic for a live region. - boolean? liveAtomic; - - // The value of aria-busy for a live region or any other element. - boolean? busy; - - // The type of live region if this node is inside a live region. - DOMString? containerLiveStatus; - - // The value of aria-relevant if this node is inside a live region. - DOMString? containerLiveRelevant; - - // The value of aria-atomic if this node is inside a live region. - boolean? containerLiveAtomic; - - // The value of aria-busy if this node is inside a live region. - boolean? containerLiveBusy; - - // - // Miscellaneous attributes. - // - - // Whether or not this node is a button. - boolean isButton; - - // Whether or not this node is a checkbox. - boolean isCheckBox; - - // Whether or not this node is a combobox. - boolean isComboBox; - - // Whether or not this node is an image. - boolean isImage; - - // Whether the node contains hidden nodes. - boolean hasHiddenOffscreenNodes; - - // Aria auto complete. - DOMString? autoComplete; - - // The name of the programmatic backing object. - DOMString? className; - - // Marks this subtree as modal. - boolean? modal; - - // The input type of a text field, such as "text" or "email". - DOMString? inputType; - - // The key that activates this widget. - DOMString? accessKey; - - // The value of the aria-invalid attribute, indicating the error type. - DOMString? ariaInvalidValue; - - // The CSS display attribute for this node, if applicable. - DOMString? display; - - // A data url with the contents of this object's image or thumbnail. - DOMString? imageDataUrl; - - // The author-provided language code for this subtree. - DOMString? language; - - // The detected language code for this subtree. - DOMString? detectedLanguage; - - // Indicates the availability and type of an interactive popup element. - HasPopup? hasPopup; - - // Input restriction, if any, such as readonly or disabled: - // undefined - enabled control or other object that is not disabled - // Restriction.DISABLED - disallows input in itself + any descendants - // Restriction.READONLY - allow focus/selection but not input - DOMString? restriction; - - // Tri-state describing checkbox or radio button: - // 'false' | 'true' | 'mixed' - DOMString? checked; - - // The inner html of this element. Only populated for math content. - DOMString? innerHtml; - - // The RGBA foreground color of this subtree, as an integer. - long? color; - - // The RGBA background color of this subtree, as an integer. - long? backgroundColor; - - // The RGBA color of an input element whose value is a color. - long? colorValue; - - // Indicates node text is subscript. - boolean subscript; - - // Indicates node text is superscript. - boolean superscript; - - // Indicates node text is bold. - boolean bold; - - // Indicates node text is italic. - boolean italic; - - // Indicates node text is underline. - boolean underline; - - // Indicates node text is line through. - boolean lineThrough; - - // Indicates whether this node is selected, unselected, or neither. - boolean? selected; - - // Indicates the font size of this node. - long? fontSize; - - // Indicates the font family. - DOMString fontFamily; - - // Indicates whether the object functions as a text field which exposes its - // descendants. Use cases include the root of a content-editable region, an - // ARIA textbox which isn't currently editable and which has interactive - // descendants, and a element that has "design-mode" set to "on". - boolean nonAtomicTextFieldRoot; - - // Indicates aria-current state. - AriaCurrentState? ariaCurrentState; - - // Indicates invalid-state. - InvalidState? invalidState; - - // The application id for a tree rooted at this node. - DOMString? appId; - - // - // Walking the tree. - // - - AutomationNode[] children; - AutomationNode? parent; - AutomationNode? firstChild; - AutomationNode? lastChild; - AutomationNode? previousSibling; - AutomationNode? nextSibling; - AutomationNode? previousOnLine; - AutomationNode? nextOnLine; - AutomationNode? previousFocus; - AutomationNode? nextFocus; - AutomationNode? previousWindowFocus; - AutomationNode? nextWindowFocus; - - // The index of this node in its parent node's list of children. If this is - // the root node, this will be undefined. - long? indexInParent; - - // The sort direction of this node. - SortDirectionType sortDirection; - - // Explicitly set to true when this node is clickable. - boolean clickable; - - // - // Actions. - // - - // Does the default action based on this node's role. This is generally - // the same action that would result from clicking the node such as - // expanding a treeitem, toggling a checkbox, selecting a radiobutton, - // or activating a button. - static void doDefault(); - - // Places focus on this node. - static void focus(); - - // Request a data url for the contents of an image, optionally - // resized. Pass zero for maxWidth and/or maxHeight for the - // original size. - static void getImageData(long maxWidth, long maxHeight); - - // Does a hit test of the given global screen coordinates, and fires - // eventToFire on the resulting object. - static void hitTest( - long x, - long y, - EventType eventToFire); - - // Does a $(ref:automation.AutomationNode.hitTest), and receives a callback - // with the resulting hit node. - static void hitTestWithReply( - long x, - long y, - PerformActionCallbackWithNode callback); - - // Scrolls this node to make it visible. - static void makeVisible(); - - // Performs custom action. - static void performCustomAction(long customActionId); - - // Convenience method to perform a standard action supported by this node. - // For actions requiring additional arguments, call the specific binding - // e.g. setSelection. - static void performStandardAction(ActionType actionType); - - // Replaces the selected text within a text field. - static void replaceSelectedText(DOMString value); - - // Sets accessibility focus. Accessibility focus is the node on which an - // extension tracks a user's focus. This may be conveyed through a focus - // ring or or speech output by the extension. Automation will dispatch more - // events to the accessibility focus such as location changes. - static void setAccessibilityFocus(); - - // Sets selection within a text field. - static void setSelection(long startIndex, long endIndex); - - // Clears focus and sets this node as the starting point for the next - // time the user presses Tab or Shift+Tab. - static void setSequentialFocusNavigationStartingPoint(); - - // Sets the value of a text field. - static void setValue(DOMString value); - - // Show the context menu for this element, as if the user right-clicked. - static void showContextMenu(); - - // Resume playing any media within this tree. - static void resumeMedia(); - - // Start ducking any media within this tree. - static void startDuckingMedia(); - - // Stop ducking any media within this tree. - static void stopDuckingMedia(); - - // Suspend any media playing within this tree. - static void suspendMedia(); - - // Simulates long click on node. - static void longClick(); - - // Scrolls this scrollable container backward. - static void scrollBackward(optional PerformActionCallback callback); - - // Scrolls this scrollable container forward. - static void scrollForward(optional PerformActionCallback callback); - - // Scrolls this scrollable container up. - static void scrollUp(optional PerformActionCallback callback); - - // Scrolls this scrollable container down. - static void scrollDown(optional PerformActionCallback callback); - - // Scrolls this scrollable container left. - static void scrollLeft(optional PerformActionCallback callback); - - // Scrolls this scrollable container right. - static void scrollRight(optional PerformActionCallback callback); - - // Scrolls this scrollable container to the given point. - static void scrollToPoint(long x, long y); - - // Sets this scrollable container's scroll offset. - static void setScrollOffset(long x, long y); - - // Adds a listener for the given event type and event phase. - static void addEventListener( - EventType eventType, AutomationListener listener, boolean capture); - - // Removes a listener for the given event type and event phase. - static void removeEventListener( - EventType eventType, AutomationListener listener, boolean capture); - - // Finds the first AutomationNode in this node's subtree which matches the - // given search parameters. - static AutomationNode find(FindParams params); - - // Finds all the AutomationNodes in this node's subtree which matches the - // given search parameters. - static AutomationNode[] findAll(FindParams params); - - // Returns whether this node matches the given $(ref:automation.FindParams). - static boolean matches(FindParams params); - - static AutomationNode getNextTextMatch( - DOMString searchStr, boolean backward); - - // Creates a position object backed by Chrome's accessibility position support. - static AutomationPosition createPosition(PositionType type, long offset, optional boolean isUpstream); - }; - - // Called when the AutomationNode for the page is available. - callback RootCallback = void(AutomationNode rootNode); - - // Called with the AutomationNode that currently has focus. - callback FocusCallback = void(AutomationNode focusedNode); - - // Called with the AutomationNode that currently has - // accessibility focus. - callback AccessibilityFocusCallback = void(AutomationNode focusedNode); - - interface Functions { - // Get the automation tree for the whole desktop which consists of all on - // screen views. Note this API is currently only supported on Chrome OS. - [nocompile] static void getDesktop(RootCallback callback); - - // Get the automation node that currently has focus, globally. Will return - // null if none of the nodes in any loaded trees have focus. - [nocompile] static void getFocus(FocusCallback callback); - - // Get the automation node that currently has accessibility focus, globally. - // Will return null if none of the nodes in any loaded trees have - // accessibility focus. - [nocompile] static void getAccessibilityFocus( - AccessibilityFocusCallback callback); - - // Add a tree change observer. Tree change observers are static/global, they - // listen to changes across all trees. Pass a filter to determine what - // specific tree changes to listen to, and note that listnening to all - // tree changes can be expensive. - [nocompile, trailingCallbackIsFunctionParameter] - static void addTreeChangeObserver( - TreeChangeObserverFilter filter, TreeChangeObserver observer); - - // Remove a tree change observer. - [nocompile, trailingCallbackIsFunctionParameter] - static void removeTreeChangeObserver( - TreeChangeObserver observer); - - // Sets the selection in a tree. This creates a selection in a single - // tree (anchorObject and focusObject must have the same root). - // Everything in the tree between the two node/offset pairs gets included - // in the selection. The anchor is where the user started the selection, - // while the focus is the point at which the selection gets extended - // e.g. when dragging with a mouse or using the keyboard. For nodes with - // the role staticText, the offset gives the character offset within - // the value where the selection starts or ends, respectively. - [nocompile] static void setDocumentSelection( - SetDocumentSelectionParams params); - }; -}; diff --git a/tools/under-control/src/gin/v8_initializer.cc b/tools/under-control/src/gin/v8_initializer.cc index 6146bd47b..f32f4077d 100755 --- a/tools/under-control/src/gin/v8_initializer.cc +++ b/tools/under-control/src/gin/v8_initializer.cc @@ -29,7 +29,6 @@ #include "base/lazy_instance.h" #include "base/logging.h" #include "base/metrics/histogram_functions.h" -#include "base/metrics/histogram_macros.h" #include "base/notreached.h" #include "base/path_service.h" #include "base/rand_util.h" @@ -385,9 +384,6 @@ void SetFeatureFlags() { features::kV8ExperimentalRegexpEngine, "--enable-experimental-regexp-engine-on-excessive-backtracks", "--no-enable-experimental-regexp-engine-on-excessive-backtracks"); - SetV8FlagsIfOverridden(features::kV8ExternalMemoryAccountedInGlobalLimit, - "--external-memory-accounted-in-global-limit", - "--no-external-memory-accounted-in-global-limit"); SetV8FlagsIfOverridden(features::kV8TurboFastApiCalls, "--turbo-fast-api-calls", "--no-turbo-fast-api-calls"); SetV8FlagsIfOverridden(features::kV8MegaDomIC, "--mega-dom-ic", diff --git a/tools/under-control/src/services/network/network_context.cc b/tools/under-control/src/services/network/network_context.cc index 3b928d610..1f070b2d0 100755 --- a/tools/under-control/src/services/network/network_context.cc +++ b/tools/under-control/src/services/network/network_context.cc @@ -80,6 +80,7 @@ #include "net/cookies/cookie_setting_override.h" #include "net/device_bound_sessions/session_service.h" #include "net/disk_cache/disk_cache.h" +#include "net/dns/context_host_resolver.h" #include "net/dns/host_cache.h" #include "net/dns/mapped_host_resolver.h" #include "net/extras/sqlite/cookie_crypto_delegate.h" @@ -135,6 +136,7 @@ #include "services/network/proxy_resolving_socket_factory_mojo.h" #include "services/network/public/cpp/cert_verifier/mojo_cert_verifier.h" #include "services/network/public/cpp/content_security_policy/content_security_policy.h" +#include "services/network/public/cpp/features.h" #include "services/network/public/cpp/network_switches.h" #include "services/network/public/cpp/parsed_headers.h" #include "services/network/public/cpp/resource_request.h" @@ -181,6 +183,7 @@ #endif // BUILDFLAG(IS_CT_SUPPORTED) #if BUILDFLAG(ENABLE_WEBSOCKETS) +#include "services/network/websocket.h" #include "services/network/websocket_factory.h" #endif // BUILDFLAG(ENABLE_WEBSOCKETS) @@ -648,6 +651,14 @@ bool NetworkContext::NetworkContextHttpAuthPreferences::AllowGssapiLibraryLoad() } #endif // BUILDFLAG(IS_LINUX) +NetworkContext::NetworkRestriction::NetworkRestriction() = default; +NetworkContext::NetworkRestriction::NetworkRestriction( + NetworkRestriction&& other) = default; +NetworkContext::NetworkRestriction& +NetworkContext::NetworkRestriction::operator=(NetworkRestriction&& other) = + default; +NetworkContext::NetworkRestriction::~NetworkRestriction() = default; + NetworkContext::PendingCertVerify::PendingCertVerify() = default; NetworkContext::PendingCertVerify::~PendingCertVerify() = default; @@ -679,7 +690,7 @@ NetworkContext::NetworkContext( #endif // BUILDFLAG(ENABLE_REPORTING) params_(std::move(params)), on_connection_close_callback_(std::move(on_connection_close_callback)), - receiver_(this, std::move(receiver)), + receiver_(std::in_place_type, this), first_party_sets_access_delegate_( std::move(params_->first_party_sets_access_delegate_receiver), std::move(params_->first_party_sets_access_delegate_params), @@ -694,6 +705,15 @@ NetworkContext::NetworkContext( features::kCorsNonWildcardRequestHeadersSupport)), prefetch_cache_(prefetch_enabled_ ? std::make_unique() : nullptr) { + + if (features::ShouldBindNetworkContextDirectReceiver()) { + receiver_.emplace(mojo::DirectReceiverKey{}, this); + } + std::visit( + [&](auto& receiver_to_bind) { + receiver_to_bind.Bind(std::move(receiver)); + }, + receiver_); #if BUILDFLAG(IS_WIN) && DCHECK_IS_ON() if (params_->file_paths) { DCHECK(params_->win_permissions_set) @@ -781,8 +801,12 @@ NetworkContext::NetworkContext( // by the NetworkService. In the other constructors, lifetime is shared with // other consumers, and thus self-deletion is not safe and can result in // double-frees. - receiver_.set_disconnect_handler(base::BindOnce( - &NetworkContext::OnConnectionError, base::Unretained(this))); + std::visit( + [&](auto& receiver) { + receiver.set_disconnect_handler(base::BindOnce( + &NetworkContext::OnConnectionError, base::Unretained(this))); + }, + receiver_); socket_factory_ = std::make_unique( url_request_context_->net_log(), url_request_context_); @@ -828,6 +852,8 @@ NetworkContext::NetworkContext( SetBlockTrustTokens(params_->block_trust_tokens); + SetDohFallbackUpgradeAllowed(params_->doh_fallback_upgrade_allowed); + if (params_ && params_->http_cache_file_operations_factory) { http_cache_file_operations_factory_ = base::MakeRefCounted( @@ -853,7 +879,7 @@ NetworkContext::NetworkContext( #if BUILDFLAG(ENABLE_REPORTING) is_observing_reporting_service_(false), #endif // BUILDFLAG(ENABLE_REPORTING) - receiver_(this, std::move(receiver)), + receiver_(std::in_place_type, this), first_party_sets_access_delegate_( /*receiver=*/mojo::NullReceiver(), /*params=*/nullptr, @@ -877,6 +903,15 @@ NetworkContext::NetworkContext( prefetch_cache_(prefetch_enabled_ ? std::make_unique() : nullptr) { + if (features::ShouldBindNetworkContextDirectReceiver()) { + receiver_.emplace(mojo::DirectReceiverKey{}, this); + } + std::visit( + [&](auto& receiver_to_bind) { + receiver_to_bind.Bind(std::move(receiver)); + }, + receiver_); + shared_resource_checker_ = std::make_unique( cookie_manager_->cookie_settings()); @@ -895,6 +930,16 @@ NetworkContext::NetworkContext( } } +#if BUILDFLAG(ENABLE_WEBSOCKETS) +void NetworkContext::CreateNetLogEntriesForActiveWebSockets( + net::NetLog::ThreadSafeObserver* observer) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (websocket_factory_) { + websocket_factory_->CreateNetLogEntriesForActiveConnections(observer); + } +} +#endif // BUILDFLAG(ENABLE_WEBSOCKETS) + NetworkContext::~NetworkContext() { is_destructing_ = true; @@ -1234,6 +1279,13 @@ void NetworkContext::SetBlockTrustTokens(bool block) { block_trust_tokens_ = block; } +void NetworkContext::SetDohFallbackUpgradeAllowed(bool allowed) { + if (url_request_context_->host_resolver()) { + url_request_context_->host_resolver()->SetDohFallbackUpgradeAllowed( + allowed); + } +} + void NetworkContext::OnProxyLookupComplete( ProxyLookupRequest* proxy_lookup_request) { auto it = proxy_lookup_requests_.find(proxy_lookup_request); @@ -1621,7 +1673,8 @@ void NetworkContext::QueueReportInternal( // Reporting is disallowed if network access is disabled for the nonce. if (network_anonymization_key.GetNonce().has_value() && !IsNetworkForNonceAndUrlAllowed( - network_anonymization_key.GetNonce().value(), url)) { + network_anonymization_key.GetNonce().value(), url, + network_anonymization_key)) { return; } @@ -1637,6 +1690,22 @@ void NetworkContext::QueueReportInternal( #endif // BUILDFLAG(ENABLE_REPORTING) } +void NetworkContext::QueueConnectionAllowlistReport( + const GURL& context, + const GURL& resource, + const net::NetworkAnonymizationKey& key, + const std::optional& reporting_source, + const std::string& group, + bool enforced) { + base::DictValue body; + // Strip username, password, and ref fragments from the blocked resource URL. + body.Set("connection", resource.GetAsReferrer().spec()); + body.Set("disposition", enforced ? "enforce" : "report"); + + QueueReport("connection-allowlist", group, context, reporting_source, key, + std::move(body)); +} + void NetworkContext::QueueSignedExchangeReport( mojom::SignedExchangeReportPtr report, const net::NetworkAnonymizationKey& network_anonymization_key) { @@ -1654,7 +1723,8 @@ void NetworkContext::QueueSignedExchangeReport( // Reporting is disallowed if network access is disabled for the nonce. if (network_anonymization_key.GetNonce().has_value() && !IsNetworkForNonceAndUrlAllowed( - network_anonymization_key.GetNonce().value(), report->outer_url)) { + network_anonymization_key.GetNonce().value(), report->outer_url, + network_anonymization_key)) { return; } @@ -1876,12 +1946,13 @@ void NetworkContext::CreateRestrictedUDPSocket( mojo::PendingReceiver receiver, mojo::PendingRemote listener, bool allow_multicast, + bool allow_source_specific_multicast, CreateRestrictedUDPSocketCallback callback) { // SimpleHostResolver is transitively owned by |this|. socket_factory_->CreateRestrictedUDPSocket( addr, mode, traffic_annotation, std::move(params), std::move(receiver), std::move(listener), SimpleHostResolver::Create(this), allow_multicast, - std::move(callback)); + allow_source_specific_multicast, std::move(callback)); } void NetworkContext::CreateTCPServerSocket( @@ -1980,7 +2051,8 @@ void NetworkContext::CreateWebSocket( url_loader_network_observer, mojo::PendingRemote auth_handler, mojo::PendingRemote header_client, - const std::optional& throttling_profile_id) { + const std::optional& throttling_profile_id, + const std::optional& network_restrictions_id) { #if BUILDFLAG(ENABLE_WEBSOCKETS) if (!websocket_factory_) { websocket_factory_ = std::make_unique(this); @@ -1994,7 +2066,8 @@ void NetworkContext::CreateWebSocket( std::move(client_security_state), options, static_cast(traffic_annotation), std::move(handshake_client), std::move(url_loader_network_observer), - std::move(auth_handler), std::move(header_client), throttling_profile_id); + std::move(auth_handler), std::move(header_client), throttling_profile_id, + network_restrictions_id); #endif // BUILDFLAG(ENABLE_WEBSOCKETS) } @@ -2010,7 +2083,7 @@ void NetworkContext::CreateWebTransport( url_loader_network_observer, mojom::ClientSecurityStatePtr client_security_state) { if (!IsNetworkForNonceAndUrlAllowed( - key.GetNonce().value_or(base::UnguessableToken::Null()), url)) { + key.GetNonce().value_or(base::UnguessableToken::Null()), url, key)) { mojo::Remote remote_handshake_client( std::move(pending_handshake_client)); remote_handshake_client->OnHandshakeFailed( @@ -2048,12 +2121,14 @@ void NetworkContext::ResolveHost( bool is_network_disallowed_for_nonce = network_anonymization_key.GetNonce().has_value() && !IsNetworkForNonceAndUrlAllowed( - network_anonymization_key.GetNonce().value(), url); + network_anonymization_key.GetNonce().value(), url, + network_anonymization_key); bool is_network_disallowed_for_restrictions_id = (optional_parameters && optional_parameters->network_restrictions_id.has_value() && !IsHostResolutionForNonceAndHostAllowed( - optional_parameters->network_restrictions_id.value(), *host)); + optional_parameters->network_restrictions_id.value(), *host, + network_anonymization_key)); if (is_network_disallowed_for_nonce || is_network_disallowed_for_restrictions_id) { mojo::Remote remote_response_client( @@ -2395,11 +2470,13 @@ void NetworkContext::PreconnectSockets( // Preconnect is disallowed if network access is disabled for the nonce. if (network_anonymization_key.GetNonce().has_value() && !IsNetworkForNonceAndUrlAllowed( - network_anonymization_key.GetNonce().value(), url)) { + network_anonymization_key.GetNonce().value(), url, + network_anonymization_key)) { return; } if (network_restrictions_id.has_value() && - !IsNetworkForNonceAndUrlAllowed(*network_restrictions_id, url)) { + !IsNetworkForNonceAndUrlAllowed(*network_restrictions_id, url, + network_anonymization_key)) { return; } @@ -3524,31 +3601,64 @@ void NetworkContext::FlushClientCertCache() { void NetworkContext::RevokeNetworkForNonces( std::vector nonces_to_patterns, RevokeNetworkForNoncesCallback callback) { + auto parse_allowlist = + [](std::optional& source, + std::optional& dest_endpoint, + std::optional< + std::set>>& + dest_patterns, + ConnectionAllowlist::RedirectBehavior& dest_redirect_behavior) { + if (!source) { + return; + } + dest_endpoint = source->reporting_endpoint; + dest_redirect_behavior = source->redirect_behavior; + dest_patterns.emplace(); + for (const std::string& pattern : source->allowlist) { + // TODO(crbug.com/447954811): We can safely DCHECK here, as we've done + // pattern validation already while validating the header's syntax. + // That said, parsing the pattern twice has performance overhead, and + // it would be ideal to change our infrastructure to allow passing a + // SimpleUrlPatternMatcher directly rather than creating it anew here. + auto matcher = url_pattern::SimpleUrlPatternMatcher::Create( + pattern, /*base_url=*/nullptr); + + DCHECK(matcher.has_value()); + dest_patterns->insert(std::move(matcher.value())); + } + }; + for (auto& entry : nonces_to_patterns) { const base::UnguessableToken& nonce = entry->nonce; // Accessing `network_revocation_nonces_[nonce]` here ensures that if it's // not already present in the set, it's default-constructed. This is - // important, as an empty `entry->allowlisted_patterns` represents complete - // network revocation. - auto& revocation_set = network_revocation_nonces_[nonce]; - for (const std::string& pattern : entry->allowlisted_patterns) { - // TODO(crbug.com/447954811): We can safely DCHECK here, as we've done - // pattern validation already while validating the header's syntax. That - // said, parsing the pattern twice has performance overhead, and it would - // be ideal to change our infrastructure to allow passing a - // SimpleUrlPatternMatcher directly rather than creating it anew here. - auto matcher = url_pattern::SimpleUrlPatternMatcher::Create( - pattern, /*base_url=*/nullptr); - DCHECK(matcher.has_value()); - revocation_set.insert(std::move(matcher.value())); - } + // important, as an empty `entry->allowlists.enforced->allowlist` represents + // complete network revocation. + NetworkRestriction& restriction = network_revocation_nonces_[nonce]; + restriction.response_url = entry->allowlists.response_url; + restriction.reporting_source = entry->allowlists.reporting_source; + + parse_allowlist(entry->allowlists.enforced, + restriction.enforced_reporting_endpoint, + restriction.enforced_allowlisted_patterns, + restriction.enforced_redirect_behavior); + parse_allowlist(entry->allowlists.report_only, + restriction.report_only_reporting_endpoint, + restriction.report_only_allowlisted_patterns, + restriction.report_only_redirect_behavior); // CancelRequestsIfNonceMatchesAndUrlNotExempted is not needed for // connection allowlist since there should not be any ongoing // requests. const std::set& exemptions = network_revocation_exemptions_[nonce]; - for (const auto& factory : url_loader_factories_) { + // Destroying all of a factory's URLLoaders may delete the factory, + // invalidating the iterator, so have to advance the iterator before calling + // CancelRequestsIfNonceMatchesAndUrlNotExempted(). + for (auto factory_it = url_loader_factories_.begin(); + factory_it != url_loader_factories_.end();) { + auto* factory = factory_it->get(); + ++factory_it; factory->CancelRequestsIfNonceMatchesAndUrlNotExempted(nonce, exemptions); } #if BUILDFLAG(ENABLE_WEBSOCKETS) @@ -3653,44 +3763,93 @@ void NetworkContext::AddQuicHints( bool NetworkContext::IsNetworkForNonceAndUrlAllowed( const base::UnguessableToken& nonce, const GURL& url, - bool is_redirect) const { + const net::NetworkAnonymizationKey& network_anonymization_key, + bool is_redirect) { // If network hasn't been revoked for the nonce, it's allowed. - if (!network_revocation_nonces_.contains(nonce)) { + auto it = network_revocation_nonces_.find(nonce); + if (it == network_revocation_nonces_.end()) { + return true; + } + + // Note: network_revocation_exemptions_ is only used for fenced frames and the + // disableUntrustedNetwork API for testing scenarios. + if (auto it_exempt = network_revocation_exemptions_.find(nonce); + it_exempt != network_revocation_exemptions_.end() && + it_exempt->second.contains(url.GetWithoutFilename())) { return true; } + const NetworkRestriction& restriction = it->second; + + // Temporary disgusting hack: if we have a NetworkRestriction but we've not + // actually specified anything to be restricted, then this restriction must + // be for a fenced frame. Given that there were no fenced frames exemptions + // detected above, we can just return false here. The fenced frame portion of + // this function is slated for removal, so this will be cleaned up within + // 1-2 milestones. TODO(crbug.com/499191497): Remove this check. + if (!restriction.enforced_allowlisted_patterns.has_value() && + !restriction.report_only_allowlisted_patterns.has_value()) { + return false; + } + // For connection allowlist feature, network_revocation_nonces_ map contains // the allowed URL Patterns. - // Note that the network_revocation_exemptions_ check below which was added + // Note that the network_revocation_exemptions_ check above which was added // to enable fenced frames testing is orthogonal to this feature. // If there are no allowlisted URLs then it is assumed that all network URLs // are restricted (unless exempted for FF testing). if (base::FeatureList::IsEnabled(network::features::kConnectionAllowlists)) { - const std::set>& - allowlisted_patterns = network_revocation_nonces_.find(nonce)->second; - for (const std::unique_ptr& pattern : - allowlisted_patterns) { - if (pattern->Match(url)) { - // Redirects are blocked for URLs allowed through connection allowlists. - return !is_redirect; + auto restriction_allowed = [&](const NetworkRestriction& r, bool enforced) { + const auto& patterns = enforced ? r.enforced_allowlisted_patterns + : r.report_only_allowlisted_patterns; + const auto& redirect_behavior = enforced + ? r.enforced_redirect_behavior + : r.report_only_redirect_behavior; + + if (is_redirect) { + return redirect_behavior == + ConnectionAllowlist::RedirectBehavior::kAllow; } + return !patterns.has_value() || + std::ranges::any_of( + *patterns, + [&url](const std::unique_ptr< + url_pattern::SimpleUrlPatternMatcher>& matcher) { + return matcher->Match(url); + }); + }; + + // First, check against the report-only allowlist, reporting violations: + if (restriction.report_only_reporting_endpoint.has_value() && + !restriction_allowed(restriction, /*enforced=*/false)) { + QueueConnectionAllowlistReport( + restriction.response_url, url, network_anonymization_key, + restriction.reporting_source, + *restriction.report_only_reporting_endpoint, /*enforced=*/false); + } + + // Then, match against the enforced allowlist, and return `false` to cancel + // the request if a violation is found: + if (!restriction_allowed(restriction, /*enforced=*/true)) { + if (restriction.enforced_reporting_endpoint.has_value()) { + QueueConnectionAllowlistReport( + restriction.response_url, url, network_anonymization_key, + restriction.reporting_source, + *restriction.enforced_reporting_endpoint, /*enforced=*/true); + } + return false; } - } - // If network has been revoked for the nonce, but the url is exempted, it's - // allowed. - 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. + return false; } bool NetworkContext::IsHostResolutionForNonceAndHostAllowed( const base::UnguessableToken& nonce, - const mojom::HostResolverHost& host) const { + const mojom::HostResolverHost& host, + const net::NetworkAnonymizationKey& network_anonymization_key) { if (!base::FeatureList::IsEnabled(network::features::kConnectionAllowlists)) { return true; } @@ -3713,16 +3872,47 @@ bool NetworkContext::IsHostResolutionForNonceAndHostAllowed( // https://wicg.github.io/connection-allowlists/#abstract-opdef-match-a-host-to-a-connection-allowlist, // we need to match `synthetic_url` against a host-only variant against each // URLPattern corresponding to `nonce`. - const std::set>& - allowlisted_patterns = it->second; - for (const std::unique_ptr& pattern : - allowlisted_patterns) { - if (pattern->HostOnlyMatch(synthetic_url)) { - return true; + const NetworkRestriction& restriction = it->second; + + auto restriction_allowed = [&](const NetworkRestriction& r, bool enforced) { + const auto& patterns = enforced ? r.enforced_allowlisted_patterns + : r.report_only_allowlisted_patterns; + return !patterns.has_value() || + std::ranges::any_of( + *patterns, + [&synthetic_url]( + const std::unique_ptr& + matcher) { + return matcher->HostOnlyMatch(synthetic_url); + }); + }; + + // First, check against the report-only allowlist, reporting violations: + if (restriction.report_only_reporting_endpoint.has_value() && + !restriction_allowed(restriction, /*enforced=*/false)) { + QueueConnectionAllowlistReport(restriction.response_url, synthetic_url, + network_anonymization_key, + restriction.reporting_source, + *restriction.report_only_reporting_endpoint, + /*enforced=*/false); + } + + // Then, match against the enforced allowlist, and return `false` to cancel + // the request if a violation is found: + if (!restriction_allowed(restriction, /*enforced=*/true)) { + if (restriction.enforced_reporting_endpoint.has_value()) { + QueueConnectionAllowlistReport(restriction.response_url, synthetic_url, + network_anonymization_key, + restriction.reporting_source, + *restriction.enforced_reporting_endpoint, + /*enforced=*/true); } + return false; } - return false; + // If we didn't block the request via the enforcement check directly above, + // it should be allowed: + return true; } void NetworkContext::InitializePrefetchURLLoaderFactory() { @@ -3732,4 +3922,13 @@ void NetworkContext::InitializePrefetchURLLoaderFactory() { CreateURLLoaderFactoryParamsForPrefetch()); } +GURL NetworkContext::GetNetworkRestrictionResponseUrlForTesting( + const base::UnguessableToken& nonce) const { + auto it = network_revocation_nonces_.find(nonce); + if (it == network_revocation_nonces_.end()) { + return GURL(); + } + return it->second.response_url; +} + } // namespace network diff --git a/tools/under-control/src/testing/variations/fieldtrial_testing_config.json b/tools/under-control/src/testing/variations/fieldtrial_testing_config.json index 0520e680b..7ad030c9c 100755 --- a/tools/under-control/src/testing/variations/fieldtrial_testing_config.json +++ b/tools/under-control/src/testing/variations/fieldtrial_testing_config.json @@ -2,6 +2,7 @@ "AAPMBlocksWebGPU": [ { "platforms": [ + "android_webview", "android" ], "experiments": [ @@ -118,26 +119,6 @@ ] } ], - "AXBlockFlowIterator": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AccessibilityBlockFlowIterator" - ] - } - ] - } - ], "AXRandomizedStressTests": [ { "platforms": [ @@ -203,12 +184,50 @@ "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_semantic_match_rules": "{\"ShoppingCart\":[\"Shopping Cart\", \"Cart\", \"Shopping Bag\"]}", + "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" ] + }, + { + "name": "ContentAnnotatorEnabledFullMarkdownAnnotation", + "params": { + "content_annotator_classifier_relevance_values": "{\"ShoppingCart\":2}", + "content_annotator_classifier_semantic_match_rules": "{\"ShoppingCart\":[\"Shopping Cart\", \"Cart\", \"Shopping Bag\"]}", + "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(?:[/?#].*|$)\"]}", + "content_annotator_enable_full_annotation": "true" + }, + "enable_features": [ + "ContentAnnotator" + ] + }, + { + "name": "Control", + "disable_features": [ + "ContentAnnotator" + ] + } + ] + } + ], + "AccessibilityAnnotatorLiveTabContext": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AccessibilityAnnotatorLiveTabContext" + ] } ] } @@ -477,6 +496,75 @@ ] } ], + "AccessibilityRequestScopedContentChangedEvents": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "MaxContentChangedEventsToFire_5", + "params": { + "max_events": "5" + }, + "enable_features": [ + "AccessibilityRequestScopedContentChangedEvents" + ] + }, + { + "name": "MaxContentChangedEventsToFire_0", + "params": { + "max_events": "0" + }, + "enable_features": [ + "AccessibilityRequestScopedContentChangedEvents" + ] + }, + { + "name": "MaxContentChangedEventsToFire_2", + "params": { + "max_events": "2" + }, + "enable_features": [ + "AccessibilityRequestScopedContentChangedEvents" + ] + }, + { + "name": "MaxContentChangedEventsToFire_10", + "params": { + "max_events": "10" + }, + "enable_features": [ + "AccessibilityRequestScopedContentChangedEvents" + ] + }, + { + "name": "MaxContentChangedEventsToFire_30", + "params": { + "max_events": "30" + }, + "enable_features": [ + "AccessibilityRequestScopedContentChangedEvents" + ] + }, + { + "name": "MaxContentChangedEventsToFire_50", + "params": { + "max_events": "50" + }, + "enable_features": [ + "AccessibilityRequestScopedContentChangedEvents" + ] + }, + { + "name": "Control", + "disable_features": [ + "AccessibilityRequestScopedContentChangedEvents" + ] + } + ] + } + ], "AccessibilitySequentialFocus": [ { "platforms": [ @@ -548,6 +636,21 @@ ] } ], + "ActivitylessSigninAllEntryPointClank": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableActivitylessSigninAllEntryPoint" + ] + } + ] + } + ], "AddressInfobarDisplayLength": [ { "platforms": [ @@ -566,6 +669,21 @@ ] } ], + "AdjustGpuProcessPriority": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AdjustGpuProcessPriority" + ] + } + ] + } + ], "AdjustPreconnectRetryInterval": [ { "platforms": [ @@ -645,21 +763,6 @@ ] } ], - "AllowChangingSelectedContent": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AllowChangingSelectedContent" - ] - } - ] - } - ], "AllowDatapipeDrainedAsBytesConsumerInBFCache": [ { "platforms": [ @@ -769,7 +872,7 @@ ] } ], - "AndroidAudioDeviceListener": [ + "AndroidAppRatingPrompt": [ { "platforms": [ "android" @@ -778,7 +881,7 @@ { "name": "Enabled", "enable_features": [ - "AndroidAudioDeviceListener" + "AndroidAppRatingPrompt" ] } ] @@ -847,6 +950,21 @@ ] } ], + "AndroidDesktopStyleScrollbars": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidDesktopStyleScrollbars" + ] + } + ] + } + ], "AndroidDesktopWebPrefsLargeDisplays": [ { "platforms": [ @@ -1022,6 +1140,21 @@ ] } ], + "AndroidNavigationBlurTransitionAnimation": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidNavigationBlurTransitionAnimation" + ] + } + ] + } + ], "AndroidOpenIncognitoAsWindow": [ { "platforms": [ @@ -1029,10 +1162,9 @@ ], "experiments": [ { - "name": "Enabled_20251208", + "name": "Enabled_20260312", "enable_features": [ - "AndroidOpenIncognitoAsWindow", - "TabStripIncognitoMigration" + "AndroidOpenIncognitoAsWindow" ] } ] @@ -1188,7 +1320,7 @@ ] } ], - "AndroidSettingsContainment": [ + "AndroidSaveCardNonBlockingDialog": [ { "platforms": [ "android" @@ -1197,7 +1329,7 @@ { "name": "Enabled", "enable_features": [ - "AndroidSettingsContainment" + "AndroidSaveCardNonBlockingDialog" ] } ] @@ -1362,21 +1494,6 @@ ] } ], - "AndroidUseCorrectWindowBounds": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AndroidUseCorrectWindowBounds" - ] - } - ] - } - ], "AndroidUseDisplayTopology": [ { "platforms": [ @@ -1442,21 +1559,6 @@ ] } ], - "AndroidZoomIndicator": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AndroidZoomIndicator" - ] - } - ] - } - ], "AnimatedDefaultBrowserPromoInFRE": [ { "platforms": [ @@ -1557,51 +1659,6 @@ ] } ], - "AnnotatorMode": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AnnotatorMode" - ] - } - ] - } - ], - "ApiPrintingMarginsAndScale": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ApiPrintingMarginsAndScale" - ] - } - ] - } - ], - "ApnRevamp": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ApnRevamp" - ] - } - ] - } - ], "AppListLaunchRecorder": [ { "platforms": [ @@ -1994,6 +2051,29 @@ ] } ], + "AsyncBeforeUnload": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "AsyncBeforeUnloadTimeout": "500ms" + }, + "enable_features": [ + "AsyncBeforeUnload" + ] + } + ] + } + ], "AsyncDnsLinux": [ { "platforms": [ @@ -2060,7 +2140,7 @@ ] } ], - "AudioDecoderAudioFileReader": [ + "AsyncRetryOnTooManyConnectionErrors": [ { "platforms": [ "android", @@ -2074,7 +2154,7 @@ { "name": "Enabled", "enable_features": [ - "AudioDecoderAudioFileReader" + "AsyncRetryOnTooManyConnectionErrors" ] } ] @@ -2125,35 +2205,20 @@ ] } ], - "AuthPanelInSession": [ + "AutoDisableAccessibility": [ { "platforms": [ - "chromeos" + "android", + "fuchsia", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "UseAuthPanelInSession" - ] - } - ] - } - ], - "AutoDisableAccessibility": [ - { - "platforms": [ - "android", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutoDisableAccessibility" + "AutoDisableAccessibility" ] } ] @@ -2379,7 +2444,38 @@ ] } ], - "AutofillAiM4": [ + "AutofillAiIos": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillAiAvailableByDefault", + "AutofillAiDedupeEntities", + "AutofillAiReauthRequired", + "AutofillAiServerModel", + "AutofillAiVoteForFormatStringsForFlightNumbers", + "AutofillAiWalletFlightReservation", + "AutofillAiWalletPrivatePasses", + "AutofillAiWalletPrivatePassesDeepLink", + "AutofillAiWalletVehicleRegistration", + "AutofillAiWithDataSchema", + "FormsClassificationsMqlsLogging", + "SyncAccountSettings", + "SyncAutofillValuable", + "SyncAutofillValuableMetadata", + "SyncWalletFlightReservations", + "SyncWalletVehicleRegistrations", + "WalletApiPrivatePassesEnabled" + ] + } + ] + } + ], + "AutofillAiM4Android": [ { "platforms": [ "android" @@ -2388,7 +2484,45 @@ { "name": "Enabled", "enable_features": [ - "AutofillAiWithDataSchema" + "AutofillAiAvailableByDefault", + "AutofillAiDedupeEntities", + "AutofillAiReauthRequired", + "AutofillAiServerModel", + "AutofillAiVoteForFormatStringsForFlightNumbers", + "AutofillAiWalletFlightReservation", + "AutofillAiWalletPrivatePasses", + "AutofillAiWalletPrivatePassesDeepLink", + "AutofillAiWalletVehicleRegistration", + "AutofillAiWithDataSchema", + "FormsClassificationsMqlsLogging", + "IPH_AutofillAiValuables", + "SyncAccountSettings", + "SyncAutofillValuableMetadata", + "SyncWalletFlightReservations", + "SyncWalletVehicleRegistrations", + "WalletApiPrivatePassesEnabled" + ] + } + ] + } + ], + "AutofillAiWalletPrivatePasses": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillAiNewUpdatePrompt", + "AutofillAiWalletPrivatePasses", + "AutofillAiWalletPrivatePassesDeepLink", + "SuggestionManageButtonSplitForEnhancedAutofill", + "WalletApiPrivatePassesEnabled" ] } ] @@ -2414,6 +2548,22 @@ ] } ], + "AutofillAndroidFormDataCompareFieldGlobalId": [ + { + "platforms": [ + "android", + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillAndroidFormDataCompareFieldGlobalId" + ] + } + ] + } + ], "AutofillAndroidKeyboardAccessoryDynamicPositioning": [ { "platforms": [ @@ -2496,24 +2646,6 @@ ] } ], - "AutofillEnableAiBasedAmountExtraction": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableAiBasedAmountExtraction" - ] - } - ] - } - ], "AutofillEnableBuyNowPayLaterAndroid": [ { "platforms": [ @@ -2535,27 +2667,12 @@ ] } ], - "AutofillEnableMandatoryReauthAndFpanRiskBasedAuthenticationChromeOs": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableFpanRiskBasedAuthentication", - "AutofillEnablePaymentsMandatoryReauthChromeOs" - ] - } - ] - } - ], - "AutofillEnableNonAffiliatedLoyaltyCardsFilling": [ + "AutofillEnableImportOfUnchangedValuesForCountryAndState": [ { "platforms": [ "android", "chromeos", + "ios", "linux", "mac", "windows" @@ -2564,36 +2681,33 @@ { "name": "Enabled", "enable_features": [ - "AutofillEnableNonAffiliatedLoyaltyCardsFilling" + "AutofillEnableImportOfUnchangedValuesForCountryAndState" ] } ] } ], - "AutofillEnableSaveAndFill": [ + "AutofillEnableMandatoryReauthAndFpanRiskBasedAuthenticationChromeOs": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" + "chromeos" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AutofillEnableSaveAndFill" + "AutofillEnableFpanRiskBasedAuthentication", + "AutofillEnablePaymentsMandatoryReauthChromeOs" ] } ] } ], - "AutofillEnableSupportForHomeAndWork": [ + "AutofillEnableNonAffiliatedLoyaltyCardsFilling": [ { "platforms": [ "android", "chromeos", - "ios", "linux", "mac", "windows" @@ -2602,19 +2716,16 @@ { "name": "Enabled", "enable_features": [ - "AutofillEnableSupportForHomeAndWork", - "IPH_AutofillHomeWorkProfileSuggestion" + "AutofillEnableNonAffiliatedLoyaltyCardsFilling" ] } ] } ], - "AutofillEnableSupportForNameAndEmail": [ + "AutofillEnableSaveAndFill": [ { "platforms": [ - "android", "chromeos", - "ios", "linux", "mac", "windows" @@ -2623,8 +2734,7 @@ { "name": "Enabled", "enable_features": [ - "AutofillEnableSupportForNameAndEmail", - "IPH_AutofillAccountNameEmailSuggestion" + "AutofillEnableSaveAndFill" ] } ] @@ -2925,27 +3035,6 @@ ] } ], - "AutofillOptimizeCacheUpdates": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillOptimizeCacheUpdates" - ] - } - ] - } - ], "AutofillOptimizeIsNormalizedNameVariantOf": [ { "platforms": [ @@ -3044,24 +3133,6 @@ ] } ], - "AutofillReintroduceHybridPasskeyDropdownItem": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillReintroduceHybridPasskeyDropdownItem" - ] - } - ] - } - ], "AutofillServerExperimentalSignatures": [ { "platforms": [ @@ -3162,28 +3233,6 @@ ] } ], - "AutofillSupportLastNamePrefix": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillSupportLastNamePrefix", - "AutofillUseNegativePatternForAllAttributes" - ] - } - ] - } - ], "AutofillSupportPhoneticNameForJP": [ { "platforms": [ @@ -3324,26 +3373,6 @@ ] } ], - "AutofillUnmaskCardRequestTimeout": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillUnmaskCardRequestTimeout" - ] - } - ] - } - ], "AutofillUpstream": [ { "platforms": [ @@ -3497,7 +3526,7 @@ ] } ], - "AutomatedPasswordChangeStudyModelUsage": [ + "AutomatedPasswordChangeDetatchedWebContents": [ { "platforms": [ "chromeos", @@ -3509,13 +3538,13 @@ { "name": "Enabled", "enable_features": [ - "ProactivelyDownloadModelForPasswordChange" + "UseDetachedWidget" ] } ] } ], - "AutomatedPasswordChangeStudyV4": [ + "AutomatedPasswordChangeStudyModelUsage": [ { "platforms": [ "chromeos", @@ -3527,44 +3556,46 @@ { "name": "Enabled", "enable_features": [ - "ReduceRequirementsForPasswordChange", - "UseActionablesForImprovedPasswordChange" + "ProactivelyDownloadModelForPasswordChange" ] } ] } ], - "AutomaticUsbDetach": [ + "AutomatedPasswordChangeWithInterruptionDetection": [ { "platforms": [ - "android" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AutomaticUsbDetach" + "UserInterventionForPasswordChange" ] } ] } ], - "AvatarButtonSyncPromoWindows": [ + "AutomaticUsbDetach": [ { "platforms": [ - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AvatarButtonSyncPromo" + "AutomaticUsbDetach" ] } ] } ], - "AvoidDoubleMultiwindowChanges": [ + "AutoplayPoliciesAndroid": [ { "platforms": [ "android" @@ -3573,37 +3604,28 @@ { "name": "Enabled", "enable_features": [ - "AvoidDoubleMultiwindowChanges" + "AutoplayPoliciesAndroid" ] } ] } ], - "AvoidEntryCreationForNoStore": [ + "AvatarButtonSyncPromoWindows": [ { "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", "windows" ], "experiments": [ { "name": "Enabled", - "params": { - "AvoidEntryCreationForNoStoreCacheSize": "40000" - }, "enable_features": [ - "AvoidEntryCreationForNoStore" + "AvatarButtonSyncPromo" ] } ] } ], - "AvoidForcedLayoutOnInvisibleDocumentClose": [ + "AvoidEntryCreationForNoStore": [ { "platforms": [ "android", @@ -3617,20 +3639,22 @@ "experiments": [ { "name": "Enabled", + "params": { + "AvoidEntryCreationForNoStoreCacheSize": "40000" + }, "enable_features": [ - "AvoidForcedLayoutOnInvisibleDocumentClose" + "AvoidEntryCreationForNoStore" ] } ] } ], - "AvoidTrustedParamsCopies": [ + "AvoidForcedLayoutOnInvisibleDocumentClose": [ { "platforms": [ "android", "android_webview", "chromeos", - "fuchsia", "ios", "linux", "mac", @@ -3640,7 +3664,7 @@ { "name": "Enabled", "enable_features": [ - "AvoidTrustedParamsCopies" + "AvoidForcedLayoutOnInvisibleDocumentClose" ] } ] @@ -3685,6 +3709,25 @@ ] } ], + "BackForwardCacheCCNSIgnoreUnchangedCookies": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_20260401", + "enable_features": [ + "BackForwardCacheCCNSIgnoreUnchangedCookies" + ] + } + ] + } + ], "BackForwardCacheMemoryControls": [ { "platforms": [ @@ -3784,7 +3827,7 @@ ] } ], - "BackForwardCacheNotRestoredReasons": [ + "BackForwardCachePauseMicrotasks": [ { "platforms": [ "android", @@ -3798,37 +3841,15 @@ ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "BackForwardCacheSendNotRestoredReasons" + "name": "Disabled", + "disable_features": [ + "BackForwardCachePauseMicrotasks" ] } ] } ], - "BackForwardCachePauseMicrotasks": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "BackForwardCachePauseMicrotasks" - ] - } - ] - } - ], - "BackNavigationMenuIPH": [ + "BackNavigationMenuIPH": [ { "platforms": [ "chromeos", @@ -3872,27 +3893,6 @@ ] } ], - "BackgroundResourceFetch": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BackgroundResourceFetch", - "ReduceTransferSizeUpdatedIPC" - ] - } - ] - } - ], "BackgroundTabsInterventions": [ { "platforms": [ @@ -3956,21 +3956,6 @@ ] } ], - "BatteryBadgeIconEnabled": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BatteryBadgeIcon" - ] - } - ] - } - ], "BatterySaverModeAlignWakeUps": [ { "platforms": [ @@ -4216,53 +4201,6 @@ ] } ], - "BocaScreenSharingStudent": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BocaScreenSharingStudent" - ] - } - ] - } - ], - "BocaScreenSharingTeacher": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BocaScreenSharingTeacher" - ] - } - ] - } - ], - "BookmarksImportOnFirstRun": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BookmarksImportOnFirstRun" - ] - } - ] - } - ], "BookmarksMigrateUiChanges": [ { "platforms": [ @@ -4328,21 +4266,6 @@ ] } ], - "BorealisZinkGlDriver": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "BorealisZinkGlDriver" - ] - } - ] - } - ], "BrowserControlsEarlyResize": [ { "platforms": [ @@ -4541,6 +4464,21 @@ ] } ], + "BusyLoopAggressiveAfterCommittedLoad": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BusyLoopAggressiveAfterCommittedLoad" + ] + } + ] + } + ], "BusyLoopLessWhenCompositorGesture": [ { "platforms": [ @@ -4652,26 +4590,6 @@ ] } ], - "CSSReadingFlow": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CSSReadingFlow" - ] - } - ] - } - ], "CacheIdentityListInChrome": [ { "platforms": [ @@ -4687,21 +4605,6 @@ ] } ], - "CacheIsMultiInstanceApi31Enabled": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CacheIsMultiInstanceApi31Enabled" - ] - } - ] - } - ], "CacheSharingForPervasiveResources": [ { "platforms": [ @@ -4722,21 +4625,6 @@ ] } ], - "CacheStylusSettings": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CacheStylusSettings" - ] - } - ] - } - ], "Canvas2DAutoFlushParams": [ { "platforms": [ @@ -4919,24 +4807,6 @@ ] } ], - "ChromeCompose": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "Compose" - ] - } - ] - } - ], "ChromeOSARCVMLmkPerceptibleMinState": [ { "platforms": [ @@ -5663,28 +5533,6 @@ ] } ], - "ChromnientAimM3": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "contextualize-on-focus": "true", - "enable-client-side-header": "true" - }, - "enable_features": [ - "LensSearchAimM3" - ] - } - ] - } - ], "ChromnientEduActionChipV2": [ { "platforms": [ @@ -5712,28 +5560,6 @@ ] } ], - "ChromnientNonBlockingPrivacyNotice": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "id": "4" - }, - "enable_features": [ - "LensOverlayEntrypointLabelAlt", - "LensOverlayNonBlockingPrivacyNotice" - ] - } - ] - } - ], "ChromnientReinvocationAffordance": [ { "platforms": [ @@ -5863,42 +5689,6 @@ ] } ], - "ChromnientUpdatedFeedbackEntrypoint": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LensUpdatedFeedbackEntrypoint" - ] - } - ] - } - ], - "ChromnientVideoCitations": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LensVideoCitations" - ] - } - ] - } - ], "ChromnientZeroStateCsb": [ { "platforms": [ @@ -5935,22 +5725,22 @@ ] } ], - "ClankFeedSyntheticCapabilities": [ + "ClankDefaultSearchApi": [ { "platforms": [ "android" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260320", "enable_features": [ - "FeedSyntheticCapabilities" + "ClankDefaultSearchApi" ] } ] } ], - "ClankFollowUIUpdate": [ + "ClankFeedSyntheticCapabilities": [ { "platforms": [ "android" @@ -5959,13 +5749,13 @@ { "name": "Enabled", "enable_features": [ - "FeedFollowUiUpdate" + "FeedSyntheticCapabilities" ] } ] } ], - "ClankMostVisitedTilesCustomization": [ + "ClankFollowUIUpdate": [ { "platforms": [ "android" @@ -5974,7 +5764,7 @@ { "name": "Enabled", "enable_features": [ - "MostVisitedTilesCustomization" + "FeedFollowUiUpdate" ] } ] @@ -6094,12 +5884,12 @@ { "name": "Enabled", "params": { - "EnableHeuristicFilter": "false", - "EnableNewSiteFilter": "false", - "EnableReferringAppFilter": "false", + "EnableHeuristicFilter": "true", + "EnableNewSiteFilter": "true", + "EnableReferringAppFilter": "true", "HCAcceptanceRate": "1.0", "MaxUserVisit": "1", - "SampleRate": "0.0" + "SampleRate": "1.0" }, "enable_features": [ "ClientSideDetectionCreditCardForm" @@ -6191,7 +5981,7 @@ ] } ], - "ClientSideDetectionRetryLimit": [ + "ClientSideDetectionOnlyESBClassification": [ { "platforms": [ "android", @@ -6203,17 +5993,14 @@ "experiments": [ { "name": "Enabled", - "params": { - "RetryTimeMax": "15" - }, "enable_features": [ - "ClientSideDetectionRetryLimit" + "ClientSideDetectionOnlyESBClassification" ] } ] } ], - "ClientSideDetectionSamplePing": [ + "ClientSideDetectionRetryLimit": [ { "platforms": [ "android", @@ -6225,8 +6012,11 @@ "experiments": [ { "name": "Enabled", + "params": { + "RetryTimeMax": "15" + }, "enable_features": [ - "ClientSideDetectionSamplePing" + "ClientSideDetectionRetryLimit" ] } ] @@ -6325,21 +6115,6 @@ ] } ], - "CloudProfileReporting": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CloudProfileReporting" - ] - } - ] - } - ], "Collections": [ { "platforms": [ @@ -6549,6 +6324,21 @@ ] } ], + "CompensateGestureScrollUpdateLatency": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_20260312", + "enable_features": [ + "CompensateGestureScrollUpdateLatency" + ] + } + ] + } + ], "ComposeAXSnapshot": [ { "platforms": [ @@ -6676,6 +6466,46 @@ ] } ], + "ComposeboxAllFileTypes": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows", + "android", + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "LensSendRawFileMediaTypes" + ] + } + ] + } + ], + "ComposeboxUrlInput": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "LensSendUrlsInComposeboxes" + ] + } + ] + } + ], "CompositeClipPathAnimation": [ { "platforms": [ @@ -6883,6 +6713,7 @@ }, "enable_features": [ "ConnectionKeepAliveForHttp2", + "EnableErrorCodePropagationForPreconnect", "RebindPreconnectReceivers" ] } @@ -6919,7 +6750,7 @@ ] } ], - "ContentVerifyJobUseJobVersionForHashing": [ + "ContextualCueingDynamicCues": [ { "platforms": [ "chromeos", @@ -6930,14 +6761,17 @@ "experiments": [ { "name": "Enabled", + "params": { + "UseDynamicCues": "true" + }, "enable_features": [ - "ContentVerifyJobUseJobVersionForHashing" + "ContextualCueing" ] } ] } ], - "ContextualCueingDynamicCues": [ + "ContextualSearchBoxGlobalExpansion": [ { "platforms": [ "chromeos", @@ -6947,12 +6781,36 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWithOmniboxAndAimM3", "params": { - "UseDynamicCues": "true" + "auto-focus-searchbox": "true", + "contextualize-on-focus": "true", + "enable-client-side-header": "true", + "page-content-request-id-fix": "true", + "pdf-text-character-limit": "5000", + "send-page-url-for-contextualization": "true", + "show-contextual-searchbox-ghost-loader-loading-state": "true", + "update-viewport-each-query": "true", + "use-apc-as-context": "true", + "use-inner-html-as-context": "false", + "use-inner-text-as-context": "false", + "use-pdf-interaction-type": "true", + "use-pdf-vit-param": "true", + "use-pdfs-as-context": "true", + "use-updated-content-fields": "true", + "use-webpage-interaction-type": "true", + "use-webpage-vit-param": "true" }, "enable_features": [ - "ContextualCueing" + "ContextualSuggestionsAblateOthersWhenPresent", + "ContextualZeroSuggestLensFulfillment", + "LensOverlayContextualSearchbox", + "LensOverlayVisualSelectionUpdates", + "LensSearchAimM3", + "SendContextualUrlSuggestParam", + "SendPageTitleSuggestParam", + "ShowSuggestionsOnNoApc", + "UseApcPaywallSignal" ] } ] @@ -7014,56 +6872,6 @@ ] } ], - "ControlsVisibilityFromNavigations": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ControlsVisibilityFromNavigations" - ] - } - ] - } - ], - "CookieDeprecationFacilitatedTestingCookieDeprecation": [ - { - "platforms": [ - "chromeos", - "windows", - "mac", - "linux", - "android" - ], - "experiments": [ - { - "name": "Treatment_PreStable_20231002", - "params": { - "SkipTpcdMitigationsForAdsHeuristics": "true", - "SkipTpcdMitigationsForAdsMetadata": "true", - "SkipTpcdMitigationsForAdsSupport": "true", - "decision_delay_time": "1s", - "disable_3p_cookies": "true", - "disable_ads_apis": "false", - "enable_otr_profiles": "false", - "enable_silent_onboarding": "false", - "label": "prestable_treatment_1", - "need_onboarding_for_label": "true", - "need_onboarding_for_synthetic_trial": "true", - "use_profile_filtering": "false", - "version": "2" - }, - "enable_features": [ - "SkipTpcdMitigationsForAds", - "TPCDAdHeuristicSubframeRequestTagging" - ] - } - ] - } - ], "CookieSameSiteConsidersRedirectChainDesktop": [ { "platforms": [ @@ -7082,21 +6890,6 @@ ] } ], - "CopyClientKeysCertsToChaps": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CopyClientKeysCertsToChaps" - ] - } - ] - } - ], "CpssUseTfliteSignatureRunnerKillSwitch": [ { "platforms": [ @@ -7698,6 +7491,24 @@ ] } ], + "CriticalUserJourneyService": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CriticalUserJourneyService" + ] + } + ] + } + ], "CrosBatterySaver": [ { "platforms": [ @@ -7754,7 +7565,14 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledInfraOnly", + "enable_features": [ + "EnableCrossDevicePrefTracker", + "HomeModulePrefRefactor" + ] + }, + { + "name": "EnabledAll", "enable_features": [ "EnableCrossDevicePrefTracker", "HomeModulePrefRefactor", @@ -7780,50 +7598,6 @@ ] } ], - "CursiveManagedStylusPreinstall": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CursiveManagedStylusPreinstall" - ] - } - ] - } - ], - "CustomizableSelect": [ - { - "platforms": [ - "android", - "linux", - "mac", - "windows", - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CustomizableSelect", - "InputClosesSelect", - "SelectParserRelaxation" - ] - }, - { - "name": "Disabled", - "disable_features": [ - "CustomizableSelect", - "InputClosesSelect", - "SelectParserRelaxation" - ] - } - ] - } - ], "CustomizeChromeExperiments": [ { "platforms": [ @@ -7863,21 +7637,6 @@ ] } ], - "D3D11Vp9kSVCHWDecoding": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "D3D11Vp9kSVCHWDecoding" - ] - } - ] - } - ], "D3D12VideoEncodeAccelerator": [ { "platforms": [ @@ -7980,6 +7739,26 @@ ] } ], + "DataUrlWorkerOpaqueOrigin": [ + { + "platforms": [ + "android", + "chromeos", + "fuchsia", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DataUrlWorkerOpaqueOrigin" + ] + } + ] + } + ], "DedicatedMediaServiceThread": [ { "platforms": [ @@ -7995,16 +7774,17 @@ ] } ], - "DefaultANGLEVulkan": [ + "DefaultBrowserChangedOsNotification": [ { "platforms": [ - "android" + "linux", + "mac" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "DefaultANGLEVulkan" + "DefaultBrowserChangedOsNotification" ] } ] @@ -8013,7 +7793,6 @@ "DefaultBrowserFramework": [ { "platforms": [ - "windows", "mac", "linux" ], @@ -8030,6 +7809,24 @@ ] } ], + "DefaultBrowserPictureInPicture": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "DefaultBrowserPictureInPictureParam": "Enabled" + }, + "enable_features": [ + "DefaultBrowserPictureInPicture" + ] + } + ] + } + ], "DefaultBrowserPromoAndroid2": [ { "platforms": [ @@ -8088,6 +7885,39 @@ ] } ], + "DefaultBrowserRound3Phase1": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "ModalDialog", + "params": { + "prompt_surface": "modal_dialog_with_settings_illustration" + }, + "enable_features": [ + "DefaultBrowserChangedOsNotification", + "DefaultBrowserFramework", + "DefaultBrowserPromptSurfaces", + "PerformDefaultBrowserCheckValidations" + ] + }, + { + "name": "BubbleDialog", + "params": { + "prompt_surface": "bubble_dialog" + }, + "enable_features": [ + "DefaultBrowserChangedOsNotification", + "DefaultBrowserFramework", + "DefaultBrowserPromptSurfaces", + "PerformDefaultBrowserCheckValidations" + ] + } + ] + } + ], "DefaultPassthroughCommandDecoder": [ { "platforms": [ @@ -8108,31 +7938,11 @@ ] } ], - "DefaultSiteInstanceGroups": [ + "DeferSpeculativeRFHCreation": [ { "platforms": [ "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DefaultSiteInstanceGroups" - ] - } - ] - } - ], - "DeferSpeculativeRFHCreation": [ - { - "platforms": [ - "android", - "android_webview", + "android_webview", "chromeos", "linux", "mac", @@ -8153,14 +7963,10 @@ ] } ], - "DelayMainJob": [ + "DelayMainJobStudy": [ { "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { @@ -8175,11 +7981,9 @@ ] } ], - "DelayRfhDestructionsOnUnloadAndDetach": [ + "DelayMainJobStudyDesktop": [ { "platforms": [ - "android", - "android_webview", "chromeos", "linux", "mac", @@ -8187,9 +7991,12 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWith50ms", + "params": { + "AdditionalDelay": "50ms" + }, "enable_features": [ - "DelayRfhDestructionsOnUnloadAndDetach" + "AdditionalDelayMainJob" ] } ] @@ -8210,36 +8017,6 @@ ] } ], - "DemoModeSignInNonUS": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DemoModeSignIn" - ] - } - ] - } - ], - "DemoModeSignInUS": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DemoModeSignIn" - ] - } - ] - } - ], "DeprecateUnload": [ { "platforms": [ @@ -8302,31 +8079,34 @@ ] } ], - "DeskButton": [ + "DesktopCapturePermissionCheckerPreMacos14_4": [ { "platforms": [ - "chromeos" + "mac" ], "experiments": [ { - "name": "Enabled_20231025", + "name": "Enabled", "enable_features": [ - "DeskButton" + "DesktopCapturePermissionCheckerPreMacos14_4" ] } ] } ], - "DesktopCapturePermissionCheckerPreMacos14_4": [ + "DesktopNtpAnimatedDoodles": [ { "platforms": [ - "mac" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260421", "enable_features": [ - "DesktopCapturePermissionCheckerPreMacos14_4" + "NtpAnimatedDoodles" ] } ] @@ -8371,52 +8151,6 @@ ] } ], - "DesktopNtpMiddleSlotPromoDismissal": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "MiddleSlotPromoDismissal", - "enable_features": [ - "NtpMiddleSlotPromoDismissal" - ] - } - ] - } - ], - "DesktopNtpModules": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "RecipeTasksRuleBasedDiscountDriveManagedUsersCartOptimizeRecipeTasksSAPIV2Fre_Enabled", - "params": { - "NtpModulesLoadTimeoutMillisecondsParam": "3000", - "use_sapi_v2": "true" - }, - "enable_features": [ - "NtpModulesLoadTimeoutMilliseconds", - "NtpPhotosModule" - ], - "disable_features": [ - "NtpShoppingTasksModule" - ] - } - ] - } - ], "DesktopNtpModulesTabGroups": [ { "platforms": [ @@ -8590,35 +8324,6 @@ ] } ], - "DesktopOmniboxShortcutBoost": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "ShortcutBoostGroupWithSearches": "true", - "ShortcutBoostNonTopHitSearchThreshold": "2", - "ShortcutBoostNonTopHitThreshold": "2", - "ShortcutBoostSearchScore": "1414", - "ShortcutBoostUrlScore": "1414", - "omnibox_history_cluster_provider_inherit_search_match_score": "true", - "omnibox_history_cluster_provider_score": "1414" - }, - "enable_features": [ - "JourneysOmniboxHistoryClusterProvider", - "OmniboxShortcutBoost" - ] - } - ] - } - ], "DesktopOmniboxStarterPackExpansion": [ { "platforms": [ @@ -8757,21 +8462,6 @@ ] } ], - "DexFixer": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DexFixer" - ] - } - ] - } - ], "DiacriticsOnPhysicalKeyboardLongpressOnByDefault": [ { "platforms": [ @@ -8881,55 +8571,63 @@ ] } ], - "DisableCookieStoreIOSFlushOnBackgrounding": [ + "DisableDelayInitialDohProbeTimeout": [ { "platforms": [ - "ios" + "android", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "DisableCookieStoreIOSFlushOnBackgrounding" + "name": "Disabled", + "disable_features": [ + "DelayInitialDohProbeTimeout" ] } ] } ], - "DisableGeoLanguageModel": [ + "DisableNonYUVOverlaysFromExo": [ { "platforms": [ - "android" + "chromeos" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "DisableGeoLanguageModel" + "DisableNonYUVOverlaysFromExo" + ], + "hardware_classes": [ + "drallion" ] } ] } ], - "DisableNonYUVOverlaysFromExo": [ + "DisablePartialStorageCleanupForGPUDiskCache": [ { "platforms": [ - "chromeos" + "android", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "DisableNonYUVOverlaysFromExo" - ], - "hardware_classes": [ - "drallion" + "DisablePartialStorageCleanupForGPUDiskCache" ] } ] } ], - "DisablePartialStorageCleanupForGPUDiskCache": [ + "DisableSplitHostCacheByNetworkAnonymizationKey": [ { "platforms": [ "android", @@ -8940,9 +8638,9 @@ ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "DisablePartialStorageCleanupForGPUDiskCache" + "name": "Disabled", + "disable_features": [ + "SplitHostCacheByNetworkAnonymizationKey" ] } ] @@ -8998,21 +8696,6 @@ ] } ], - "DiscardPageWithCrashedSubframeRelaxedEligibility": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DiscardPageWithCrashedSubframeRelaxedEligibility" - ] - } - ] - } - ], "DiscountAutoPopup": [ { "platforms": [ @@ -9062,11 +8745,12 @@ ] } ], - "DlpRegionalizedEndpoints": [ + "DisplaySchedulerAsClient": [ { "platforms": [ + "android", + "android_webview", "chromeos", - "fuchsia", "linux", "mac", "windows" @@ -9075,7 +8759,7 @@ { "name": "Enabled", "enable_features": [ - "DlpRegionalizedEndpoints" + "DisplaySchedulerAsClient" ] } ] @@ -9109,33 +8793,30 @@ ] } ], - "DoNotEvictOnAXLocationChange": [ + "DnsOverHttpsCloudflareFamilies": [ { "platforms": [ "android", - "android_webview", "chromeos", - "fuchsia", - "ios", "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260313", "enable_features": [ - "DoNotEvictOnAXLocationChange" + "DohProviderCloudflareFamily", + "DohProviderCloudflareSecurity" ] } ] } ], - "DomStorageSqliteInMemory": [ + "DnsOverHttpsQuad9Secure": [ { "platforms": [ "android", - "android_webview", "chromeos", "linux", "mac", @@ -9143,36 +8824,29 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260203", "enable_features": [ - "DomStorageSqliteInMemory" + "DohProviderQuad9Secure" ] } ] } ], - "DownloadLater": [ + "DomStorageSqliteInMemory": [ { "platforms": [ - "android" + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "EnabledWithDateTimePicker", - "params": { - "show_date_time_picker": "true" - }, - "enable_features": [ - "DownloadLater" - ] - }, - { - "name": "EnabledWithoutDateTimePicker", - "params": { - "show_date_time_picker": "false" - }, + "name": "Enabled", "enable_features": [ - "DownloadLater" + "DomStorageSqliteInMemory" ] } ] @@ -9272,6 +8946,42 @@ ] } ], + "DseIntegrity": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DseIntegrity" + ] + } + ] + } + ], + "DsePreload2": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DsePreload2" + ] + } + ] + } + ], "DumpOnOOBFontDataServiceCache": [ { "platforms": [ @@ -9382,7 +9092,7 @@ ] } ], - "EnableADPFBoostRateLimit": [ + "EnableADPFSeparateRendererMainSession": [ { "platforms": [ "android" @@ -9391,13 +9101,13 @@ { "name": "Enabled", "enable_features": [ - "EnableADPFBoostRateLimit" + "EnableADPFSeparateRendererMainSession" ] } ] } ], - "EnableADPFIgnoreThrottledTime": [ + "EnableADPFWorkloadIncreaseOnPageLoad": [ { "platforms": [ "android" @@ -9406,13 +9116,13 @@ { "name": "Enabled", "enable_features": [ - "EnableADPFIgnoreThrottledTime" + "EnableADPFWorkloadIncreaseOnPageLoad" ] } ] } ], - "EnableADPFSeparateRendererMainSession": [ + "EnableADPFWorkloadReset": [ { "platforms": [ "android" @@ -9421,37 +9131,37 @@ { "name": "Enabled", "enable_features": [ - "EnableADPFSeparateRendererMainSession" + "EnableADPFWorkloadReset" ] } ] } ], - "EnableADPFWorkloadReset": [ + "EnableASWebAuthenticationSession": [ { "platforms": [ - "android" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "EnableADPFWorkloadReset" + "EnableASWebAuthenticationSession" ] } ] } ], - "EnableASWebAuthenticationSession": [ + "EnableAndroidSidePanel": [ { "platforms": [ - "ios" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "EnableASWebAuthenticationSession" + "EnableAndroidSidePanel" ] } ] @@ -9796,6 +9506,21 @@ ] } ], + "EnableIframeForPix": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableIframeForPix" + ] + } + ] + } + ], "EnableLazyLoadImageForInvisiblePage": [ { "platforms": [ @@ -9856,9 +9581,9 @@ ], "experiments": [ { - "name": "Enabled_200MB", + "name": "Enabled_250MB", "params": { - "max_file_size_mb": "200" + "max_file_size_mb": "250" }, "enable_features": [ "EnableNewUploadSizeLimit" @@ -9894,21 +9619,6 @@ ] } ], - "EnableOktaSsoOnMacOS": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled_20251216", - "enable_features": [ - "OktaSSO" - ] - } - ] - } - ], "EnablePDPMetricsUSDesktopIOS": [ { "platforms": [ @@ -9944,50 +9654,16 @@ ] } ], - "EnablePolicyPromotionBanner": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnablePolicyPromotionBanner" - ] - } - ] - } - ], - "EnablePreferencesAccountStorageChromeOS": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnablePreferencesAccountStorage", - "SyncSupportAlwaysSyncingPriorityPreferences" - ] - } - ] - } - ], - "EnableRootNsDnsProxy": [ + "EnablePixInCct": [ { "platforms": [ - "chromeos" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "EnableRootNsDnsProxy" + "EnablePixInCct" ] } ] @@ -10061,42 +9737,6 @@ ] } ], - "EnableWatermarkCustomization": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableWatermarkCustomization" - ] - } - ] - } - ], - "EnableWatermarkTestPage": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableWatermarkTestPage" - ] - } - ] - } - ], "EnhancedFieldsForSecOps": [ { "platforms": [ @@ -10139,24 +9779,6 @@ ] } ], - "EnterpriseFileObfuscation": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnterpriseFileObfuscation" - ] - } - ] - } - ], "EnterpriseFileObfuscationArchiveAnalyzer": [ { "platforms": [ @@ -10326,7 +9948,7 @@ ] } ], - "ExtensionManifestV2Deprecation": [ + "ExtensionServiceWorkerVoter": [ { "platforms": [ "chromeos", @@ -10336,9 +9958,9 @@ ], "experiments": [ { - "name": "Enabled_MV2ExtensionsUnsupported", + "name": "Enabled", "enable_features": [ - "ExtensionManifestV2Unsupported" + "ExtensionServiceWorkerVoter" ] } ] @@ -10416,21 +10038,6 @@ ] } ], - "ExternalDisplayEventTelemetry": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ExternalDisplayEventTelemetry" - ] - } - ] - } - ], "ExternalHDR10": [ { "platforms": [ @@ -10530,36 +10137,6 @@ ] } ], - "FRESignInSecondaryActionLabelUpdate": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_StaySignedOut", - "enable_features": [ - "FRESignInAlternativeSecondaryButtonText" - ] - } - ] - } - ], - "FastPairAdvertisingFormat2025": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "FastPairAdvertisingFormat2025" - ] - } - ] - } - ], "FastPairHandshakeLongTermRefactor": [ { "platforms": [ @@ -10620,7 +10197,7 @@ ] } ], - "FedCmSegmentationPlatform": [ + "FedCmIntrusion": [ { "platforms": [ "android", @@ -10633,6 +10210,18 @@ "name": "SegmentationPlatform", "enable_features": [ "SegmentationPlatformFedCmUser" + ], + "disable_features": [ + "FedCmAmbientUI" + ] + }, + { + "name": "EnableFedCmAmbientUI", + "enable_features": [ + "FedCmAmbientUI" + ], + "disable_features": [ + "SegmentationPlatformFedCmUser" ] } ] @@ -10830,6 +10419,42 @@ ] } ], + "FirstRunDesktopRefresh": [ + { + "platforms": [ + "windows", + "linux", + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "sign-in-promo-variation": "default" + }, + "enable_features": [ + "FirstRunDesktopChoiceScreenRefresh", + "FirstRunDesktopRefresh" + ] + } + ] + } + ], + "FixStaticIpForTwoManagedEthPorts": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "FixStaticIpForTwoManagedEthPorts" + ] + } + ] + } + ], "FlingSchedulingImprovements": [ { "platforms": [ @@ -11005,73 +10630,9 @@ ] } ], - "ForceMigrateSyncingUserToSignedInAndroid": [ + "ForceSecureDnsDohFallback": [ { "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ForceMigrateSyncingUserToSignedIn" - ] - } - ] - } - ], - "ForceOffTextAutosizing": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ForceOffTextAutosizing" - ] - } - ] - } - ], - "ForceOffTextAutosizingWebView": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ForceOffTextAutosizing" - ] - } - ] - } - ], - "ForestFeature": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ForestFeature" - ] - } - ] - } - ], - "FrameRoutingCache": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", "linux", "mac", "windows" @@ -11080,7 +10641,7 @@ { "name": "Enabled", "enable_features": [ - "FrameRoutingCache" + "ForceSecureDnsDohFallback" ] } ] @@ -11251,9 +10812,10 @@ ] } ], - "Glic1PTools": [ + "GlicActorObservationDelayExcludeAdFrameLoading": [ { "platforms": [ + "linux", "mac", "windows" ], @@ -11261,36 +10823,19 @@ { "name": "Enabled", "enable_features": [ - "GlicExtensions" + "GlicActorObservationDelayExcludeAdFrameLoading" ] } ] } ], - "GlicActorObservationDelayExcludeAdFrameLoading": [ + "GlicActorRolloutControl": [ { "platforms": [ "linux", "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GlicActorObservationDelayExcludeAdFrameLoading" - ] - } - ] - } - ], - "GlicActorRolloutControl": [ - { - "platforms": [ - "linux", - "mac", - "windows", - "chromeos" + "windows", + "chromeos" ], "experiments": [ { @@ -11360,6 +10905,73 @@ ] } ], + "GlicAnchoredCues": [ + { + "platforms": [ + "chromeos", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_20260320", + "enable_features": [ + "UseAnchoredMessage" + ] + } + ] + } + ], + "GlicAutoLogin": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "FedCmEmbedderInitiatedLogin" + ] + } + ] + } + ], + "GlicAutoOpenPdf": [ + { + "platforms": [ + "mac", + "windows", + "linux", + "chromeos" + ], + "experiments": [ + { + "name": "Enabled_AutoOpenGlicForPdf_ConsentedUsers", + "params": { + "AutoOpenGlicForPdfWithOnboarding": "false" + }, + "enable_features": [ + "AutoOpenGlicForPdf", + "EnableAutoOpenGlicSidePanel" + ] + }, + { + "name": "Enabled_AutoOpenGlicForPdf_UnconsentedUsers", + "params": { + "AutoOpenGlicForPdfWithOnboarding": "true" + }, + "enable_features": [ + "AutoOpenGlicForPdf", + "EnableAutoOpenGlicSidePanel" + ] + } + ] + } + ], "GlicButtonPressedState": [ { "platforms": [ @@ -11422,6 +11034,23 @@ ] } ], + "GlicClientZoomControl": [ + { + "platforms": [ + "chromeos", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicClientZoomControl" + ] + } + ] + } + ], "GlicConfirmNavigationToNewOrigins": [ { "platforms": [ @@ -11492,8 +11121,7 @@ "GlicDefaultTabContextSetting", "GlicEnableMultiInstanceBasedOnTier", "GlicLiveModeOnlyGlow", - "GlicMultiInstance", - "GlicMultiTab" + "GlicMultiInstance" ] } ] @@ -11519,21 +11147,6 @@ ] } ], - "GlicExplicitBackgroundColor": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "enable_features": [ - "GlicExplicitBackgroundColor" - ] - } - ] - } - ], "GlicForceNonSkSLBorder": [ { "platforms": [ @@ -11568,22 +11181,6 @@ ] } ], - "GlicFreWarming": [ - { - "platforms": [ - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GlicFreWarming" - ] - } - ] - } - ], "GlicGA": [ { "platforms": [ @@ -11632,7 +11229,9 @@ "name": "Enabled", "enable_features": [ "AnnotatedPageContentWithMediaData", - "HeadlessLiveCaption" + "HeadlessCaptionEarlyStart", + "HeadlessLiveCaption", + "MediaTrasncriptsFlagInPageMetadata" ] } ] @@ -11758,6 +11357,24 @@ ] } ], + "GlicSummarizeVideoSuggestion": [ + { + "platforms": [ + "mac", + "windows", + "linux", + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicSummarizeVideoSuggestion" + ] + } + ] + } + ], "GlicTeamfoodAllowlistedChromeOS": [ { "platforms": [ @@ -11769,7 +11386,6 @@ "enable_features": [ "Glic", "GlicRollout", - "GlicUseNonClient", "GlicUserStatusCheck", "GlicZeroStateSuggestions" ] @@ -11777,49 +11393,57 @@ ] } ], - "GlicTieredRollout": [ + "GlicTieredRolloutV2": [ { "platforms": [ + "chromeos", "mac", - "windows", - "linux" + "windows" ], "experiments": [ { "name": "Enabled", + "params": { + "glic-tiered-rollout-v2-eligible-tiers": "1,2" + }, "enable_features": [ - "GlicTieredRollout" + "GlicTieredRolloutV2" ] } ] } ], - "GlicTrustFirstOnboarding": [ + "GlicToolbarHeightSidePanel": [ { "platforms": [ + "chromeos", + "linux", "mac", - "windows", - "linux" + "windows" ], "experiments": [ { - "name": "Enabled_TrustFirst_Arm1_StartChat", - "params": { - "arm": "1" - }, + "name": "Enabled", "enable_features": [ - "GlicTrustFirstOnboarding", - "IPH_GlicTrustFirstOnboardingShortcutSnoozePromo" + "GlicUseToolbarHeightSidePanel" ] - }, + } + ] + } + ], + "GlicTryItUnlaunch": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ { - "name": "Enabled_TrustFirst_Arm2_WelcomeScreen", - "params": { - "arm": "2" - }, - "enable_features": [ - "GlicTrustFirstOnboarding", - "IPH_GlicTrustFirstOnboardingShortcutSnoozePromo" + "name": "Unlaunched_20260309", + "disable_features": [ + "IPH_GlicTryIt" ] } ] @@ -11851,7 +11475,9 @@ { "platforms": [ "mac", - "windows" + "windows", + "linux", + "chromeos" ], "experiments": [ { @@ -11931,115 +11557,6 @@ ] } ], - "GoogleLensDesktopImageFormatOptimizations": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "WebpQualityBackendV6", - "params": { - "dismiss-loading-state-on-document-on-load-completed-in-primary-main-frame": "false", - "dismiss-loading-state-on-navigation-entry-committed": "true", - "encoding-quality-image-search": "45", - "encoding-quality-region-search": "45", - "lens-homepage-url": "https://lens.google.com/v3/", - "lens-html-redirect-fix": "false", - "use-jpeg-for-image-search": "false", - "use-webp-for-image-search": "true" - }, - "enable_features": [ - "LensImageFormatOptimizations", - "LensStandalone" - ] - }, - { - "name": "WebpBackendOnlyV6", - "params": { - "encoding-quality-image-search": "90", - "encoding-quality-region-search": "90", - "lens-homepage-url": "https://lens.google.com/v3/", - "lens-html-redirect-fix": "false", - "use-jpeg-for-image-search": "false", - "use-webp-for-image-search": "true" - }, - "enable_features": [ - "LensImageFormatOptimizations", - "LensStandalone" - ] - }, - { - "name": "JpegQualityBackendV6", - "params": { - "dismiss-loading-state-on-document-on-load-completed-in-primary-main-frame": "false", - "dismiss-loading-state-on-navigation-entry-committed": "true", - "encoding-quality-image-search": "40", - "encoding-quality-region-search": "40", - "lens-homepage-url": "https://lens.google.com/v3/", - "lens-html-redirect-fix": "false", - "use-jpeg-for-image-search": "true", - "use-webp-for-image-search": "false" - }, - "enable_features": [ - "LensImageFormatOptimizations", - "LensStandalone" - ] - }, - { - "name": "JpegBackendOnlyV6", - "params": { - "encoding-quality-image-search": "90", - "encoding-quality-region-search": "90", - "lens-homepage-url": "https://lens.google.com/v3/", - "lens-html-redirect-fix": "false", - "use-jpeg-for-image-search": "true", - "use-webp-for-image-search": "false" - }, - "enable_features": [ - "LensImageFormatOptimizations", - "LensStandalone" - ] - }, - { - "name": "JpegQualityOnlyV6", - "params": { - "encoding-quality-image-search": "40", - "encoding-quality-region-search": "40", - "use-jpeg-for-image-search": "true", - "use-webp-for-image-search": "false" - }, - "enable_features": [ - "LensImageFormatOptimizations" - ] - } - ] - } - ], - "GoogleLensTabletIntegration": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_110422", - "params": { - "enableCameraAssistedSearchOnTablet": "true", - "enableCameraAssistedSearchOnTabletWidget": "true", - "enableContextMenuSearchOnTablet": "true" - }, - "enable_features": [ - "LensCameraAssistedSearch", - "LensOnQuickActionSearchWidget" - ] - } - ] - } - ], "GpuPersistentCache": [ { "platforms": [ @@ -12162,44 +11679,21 @@ ] } ], - "HTMLParserYieldByUserTiming": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnableWithTimeout5ms", - "params": { - "timeout_ms": "5" - }, - "enable_features": [ - "SearchAboveFoldBytesReceived" - ] - } - ] - } - ], - "HTTP2": [ + "HTMLProcessingInstruction": [ { "platforms": [ "android", "android_webview", "chromeos", - "fuchsia", - "ios", "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled6", - "params": { - "http2_grease_settings": "true" - }, + "name": "Enabled", "enable_features": [ - "Http2Grease" + "HTMLProcessingInstruction" ] } ] @@ -12736,6 +12230,9 @@ { "name": "Enabled", "params": { + "RemovePageContext": "true", + "ShowAboveSearchImage": "true", + "ShowBelowSearchImage": "false", "ShowFRERow": "true" }, "enable_features": [ @@ -12760,7 +12257,7 @@ ] } ], - "HeliosWithReaderMode": [ + "HeliosExplainEditMenu": [ { "platforms": [ "ios" @@ -12768,17 +12265,17 @@ "experiments": [ { "name": "Enabled", + "params": { + "PositionForExplainGeminiEditMenu": "1" + }, "enable_features": [ - "EnableReaderModeInUS" - ], - "disable_features": [ - "EnableReaderModeOmniboxEntryPointInUS" + "ExplainGeminiEditMenu" ] } ] } ], - "HeliosZeroStateSuggestions": [ + "HeliosFloatyAllPages": [ { "platforms": [ "ios" @@ -12786,113 +12283,116 @@ "experiments": [ { "name": "Enabled", - "params": { - "ZeroStateSuggestionsPlacementAskGemini": "true" - }, "enable_features": [ - "ZeroStateSuggestions" + "GeminiFloatyAllPages" ] } ] } ], - "HideDelegatedFrameHostMac": [ + "HeliosMapsRichUI": [ { "platforms": [ - "mac" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "HideDelegatedFrameHostMac" + "GeminiMapsRichUI" ] } ] } ], - "HistoryEmbeddingsV2Images": [ + "HeliosRichAPCExtraction": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" + "ios" ], "experiments": [ { "name": "Enabled", - "params": { - "EnableImagesForResults": "true" - }, "enable_features": [ - "HistoryEmbeddings" + "GeminiRichAPCExtraction" ] } ] } ], - "HistoryQueryOnlyLocalFirst": [ + "HeliosWithReaderMode": [ { "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "HistoryQueryOnlyLocalFirst" + "EnableReaderModeInUS" + ], + "disable_features": [ + "EnableReaderModeOmniboxEntryPointInUS" ] } ] } ], - "HistorySyncAlternativeIllustration": [ + "HeliosZeroStateSuggestions": [ { "platforms": [ - "android" + "ios" ], "experiments": [ { "name": "Enabled", + "params": { + "ZeroStateSuggestionsPlacementAskGemini": "true" + }, "enable_features": [ - "UseAlternateHistorySyncIllustration" + "ZeroStateSuggestions" ] } ] } ], - "Hotspot": [ + "HideDelegatedFrameHostMac": [ { "platforms": [ - "chromeos" + "mac" ], "experiments": [ { - "name": "Enabled_Dogfood", + "name": "Enabled", "enable_features": [ - "Hotspot" + "HideDelegatedFrameHostMac" ] - }, + } + ] + } + ], + "HistoryDatabaseWriteAheadLogging": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ { "name": "Enabled", "enable_features": [ - "Hotspot" + "HistoryDatabaseWriteAheadLogging" ] } ] } ], - "HttpCacheInitializeDiskCacheBackendEarly": [ + "HistoryEmbeddingsV2Images": [ { "platforms": [ - "android_webview", - "android", "chromeos", "linux", "mac", @@ -12902,36 +12402,33 @@ { "name": "Enabled", "params": { - "check_disk": "true" + "EnableImagesForResults": "true" }, "enable_features": [ - "HttpCacheInitializeDiskCacheBackendEarly" + "HistoryEmbeddings" ] } ] } ], - "HttpCacheNoVarySearch": [ + "HistorySyncAlternativeIllustration": [ { "platforms": [ - "android_webview" + "android" ], "experiments": [ { - "name": "Enabled_NVS_HttpCache_Only", + "name": "Enabled", "enable_features": [ - "HttpCacheNoVarySearch" - ], - "disable_features": [ - "DsePreload2", - "PrefetchPrerenderIntegration" + "UseAlternateHistorySyncIllustration" ] } ] - }, + } + ], + "HorizontalTabStripComboButton": [ { "platforms": [ - "android", "chromeos", "linux", "mac", @@ -12939,89 +12436,82 @@ ], "experiments": [ { - "name": "Enabled_NVS_HttpCache_And_Omnibox_Prefetch", + "name": "Enabled", "enable_features": [ - "HttpCacheNoVarySearch", - "SearchPrefetchWithNoVarySearchDiskCache" - ], - "disable_features": [ - "DsePreload2", - "PrefetchPrerenderIntegration" + "HorizontalTabStripComboButton", + "IPH_TabSearchComboButton" ] } ] } ], - "HttpDiskCachePrewarming": [ + "HttpCacheInitializeDiskCacheBackendEarly": [ { "platforms": [ - "android", "android_webview", + "android", "chromeos", - "fuchsia", - "ios", "linux", "mac", "windows" ], "experiments": [ { - "name": "WithReadAndDiscardBody_20240328", + "name": "Enabled", "params": { - "http_disk_cache_prewarming_main_resource": "false", - "http_disk_cache_prewarming_use_read_and_discard_body_option": "true" + "check_disk": "true" }, "enable_features": [ - "HttpDiskCachePrewarming", - "SimpleURLLoaderUseReadAndDiscardBodyOption" + "HttpCacheInitializeDiskCacheBackendEarly" ] } ] } ], - "HttpsFirstBalancedModeAutoEnable": [ + "HttpCacheNoVarySearch": [ { "platforms": [ + "android", + "android_webview", "chromeos", "linux", "mac", - "windows", - "android" + "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_NVS_HttpCache_And_Omnibox_Prefetch", "enable_features": [ - "HttpsFirstBalancedModeAutoEnable" + "HttpCacheNoVarySearch", + "SearchPrefetchWithNoVarySearchDiskCache" ] } ] } ], - "HttpsFirstModeV2ForTypicallySecureUsers": [ + "HttpsFirstBalancedModeAutoEnable": [ { "platforms": [ - "android", "chromeos", "linux", "mac", - "windows" + "windows", + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "HttpsFirstModeV2ForTypicallySecureUsers" + "HttpsFirstBalancedModeAutoEnable" ] } ] } ], - "IDBDatabaseExternalMemoryAccounting": [ + "HttpsFirstModeV2ForTypicallySecureUsers": [ { "platforms": [ "android", - "android_webview", "chromeos", "linux", "mac", @@ -13031,22 +12521,27 @@ { "name": "Enabled", "enable_features": [ - "IDBDatabaseExternalMemoryAccounting" + "HttpsFirstModeV2ForTypicallySecureUsers" ] } ] } ], - "IOSAutofillPaymentsSheetV3": [ + "IDBDatabaseExternalMemoryAccounting": [ { "platforms": [ - "ios" + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AutofillPaymentsSheetV3Ios" + "IDBDatabaseExternalMemoryAccounting" ] } ] @@ -13100,37 +12595,6 @@ ] } ], - "IOSChromnientEscapeHatch": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IPH_iOSLensOverlayEscapeHatchTip", - "LensOverlayEnableLVFEscapeHatch" - ] - } - ] - } - ], - "IOSCloseOtherTabs": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CloseOtherTabs" - ] - } - ] - } - ], "IOSConfirmationButtonSwapOrder": [ { "platforms": [ @@ -13227,89 +12691,35 @@ ] } ], - "IOSDockingPromo": [ + "IOSDockingPromoV2": [ { "platforms": [ "ios" ], "experiments": [ { - "name": "Enabled_FFR_20240419", - "params": { - "IOSDockingPromoExperimentType": "1", - "IOSDockingPromoNewUserInactiveThreshold": "24h", - "IOSDockingPromoNewUserInactiveThresholdHours": "24", - "IOSDockingPromoOldUserInactiveThreshold": "72h", - "IOSDockingPromoOldUserInactiveThresholdHours": "72" - }, - "enable_features": [ - "IOSDockingPromo" - ] - }, - { - "name": "Enabled_FRE_20240419", - "params": { - "IOSDockingPromoExperimentType": "2" - }, - "enable_features": [ - "IOSDockingPromo" - ] - }, - { - "name": "Enabled_Beta_FFR_20240419", - "params": { - "IOSDockingPromoExperimentType": "1", - "IOSDockingPromoNewUserInactiveThreshold": "12h", - "IOSDockingPromoNewUserInactiveThresholdHours": "12", - "IOSDockingPromoOldUserInactiveThreshold": "24h", - "IOSDockingPromoOldUserInactiveThresholdHours": "24" - }, - "enable_features": [ - "IOSDockingPromo" - ] - }, - { - "name": "Enabled_Beta_FRE_20240419", + "name": "Enabled_Header1", "params": { - "IOSDockingPromoExperimentType": "2" + "IOSDockingPromoV2VariationParam": "IOSDockingPromoV2VariationHeader1" }, "enable_features": [ - "IOSDockingPromo" + "IOSDockingPromoV2" ] }, { - "name": "Enabled_Canary_Dev_FFR_20240419", + "name": "Enabled_Header2", "params": { - "IOSDockingPromoExperimentType": "1", - "IOSDockingPromoNewUserInactiveThreshold": "6h", - "IOSDockingPromoNewUserInactiveThresholdHours": "6", - "IOSDockingPromoOldUserInactiveThreshold": "12h", - "IOSDockingPromoOldUserInactiveThresholdHours": "12" + "IOSDockingPromoV2VariationParam": "IOSDockingPromoV2VariationHeader2" }, "enable_features": [ - "IOSDockingPromo" + "IOSDockingPromoV2" ] }, { - "name": "Enabled_Canary_Dev_FRE_20240419", + "name": "Enabled_Header3", "params": { - "IOSDockingPromoExperimentType": "2" + "IOSDockingPromoV2VariationParam": "IOSDockingPromoV2VariationHeader3" }, - "enable_features": [ - "IOSDockingPromo" - ] - } - ] - } - ], - "IOSDockingPromoV2": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", "enable_features": [ "IOSDockingPromoV2" ] @@ -13354,45 +12764,45 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_SafariImport", + "params": { + "kIOSExpandedSetupListVariationParam": "kIOSExpandedSetupListVariationParamSafariImport" + }, "enable_features": [ "IOSExpandedSetupList" ] - } - ] - } - ], - "IOSExpandedTips": [ - { - "platforms": [ - "ios" - ], - "experiments": [ + }, { - "name": "Enabled", + "name": "Enabled_BackgroundCustomization", + "params": { + "kIOSExpandedSetupListVariationParam": "kIOSExpandedSetupListVariationParamBackgroundCustomization" + }, "enable_features": [ - "IOSExpandedTips" + "IOSExpandedSetupList" ] - } - ] - } - ], - "IOSExplicitUITraitRegistration": [ - { - "platforms": [ - "ios" - ], - "experiments": [ + }, { - "name": "Enabled", + "name": "Enabled_AllExceptCPE", + "params": { + "kIOSExpandedSetupListVariationParam": "kIOSExpandedSetupListVariationParamAllExceptCPE" + }, "enable_features": [ - "EnableTraitCollectionRegistration" + "IOSExpandedSetupList" + ] + }, + { + "name": "Enabled_All", + "params": { + "kIOSExpandedSetupListVariationParam": "kIOSExpandedSetupListVariationParamAll" + }, + "enable_features": [ + "IOSExpandedSetupList" ] } ] } ], - "IOSFastApplicationWillTerminate": [ + "IOSExpandedTips": [ { "platforms": [ "ios" @@ -13401,13 +12811,13 @@ { "name": "Enabled", "enable_features": [ - "FastApplicationWillTerminate" + "IOSExpandedTips" ] } ] } ], - "IOSFeedCUI1Refinements": [ + "IOSExplicitUITraitRegistration": [ { "platforms": [ "ios" @@ -13416,13 +12826,13 @@ { "name": "Enabled", "enable_features": [ - "EnableCUI1Refinements" + "EnableTraitCollectionRegistration" ] } ] } ], - "IOSFeedCUI3NextPageAppFlow": [ + "IOSFastApplicationWillTerminate": [ { "platforms": [ "ios" @@ -13431,7 +12841,7 @@ { "name": "Enabled", "enable_features": [ - "EnableCUI3NextPageAppFlow" + "FastApplicationWillTerminate" ] } ] @@ -13680,7 +13090,7 @@ ] } ], - "IOSManualLogUploadsInTheFRE": [ + "IOSMostVisitedTilesCustomization": [ { "platforms": [ "ios" @@ -13689,13 +13099,13 @@ { "name": "Enabled", "enable_features": [ - "ManualLogUploadsInTheFRE" + "MostVisitedTilesCustomizationIOS" ] } ] } ], - "IOSMemoryAblation": [ + "IOSNewTabGridTransitions": [ { "platforms": [ "ios" @@ -13704,28 +13114,32 @@ { "name": "Enabled", "enable_features": [ - "IOSMemoryAblation" + "TabGridNewTransitions" ] } ] } ], - "IOSMostVisitedTilesCustomization": [ + "IOSOneTapMiniMapRestrictions": [ { "platforms": [ "ios" ], "experiments": [ { - "name": "Enabled", + "name": "EnabledSectionImprovement", + "params": { + "ios-one-tap-minimap-longest-word-min-chars": "5", + "ios-one-tap-minimap-max-section": "5" + }, "enable_features": [ - "MostVisitedTilesCustomizationIOS" + "IOSOneTapMiniMapRestrictions" ] } ] } ], - "IOSNewTabGridTransitions": [ + "IOSOneTimeDefaultBrowserNotification": [ { "platforms": [ "ios" @@ -13733,67 +13147,18 @@ "experiments": [ { "name": "Enabled", + "params": { + "reactivation_order": "" + }, "enable_features": [ - "TabGridNewTransitions" + "IOSOneTimeDefaultBrowserNotification", + "IOSReactivationNotifications" ] } ] } ], - "IOSOmahaResyncTimerOnForeground": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OmahaResyncTimerOnForeground" - ] - } - ] - } - ], - "IOSOneTapMiniMapRestrictions": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "EnabledSectionImprovement", - "params": { - "ios-one-tap-minimap-longest-word-min-chars": "5", - "ios-one-tap-minimap-max-section": "5" - }, - "enable_features": [ - "IOSOneTapMiniMapRestrictions" - ] - } - ] - } - ], - "IOSOneTimeDefaultBrowserNotification": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "reactivation_order": "" - }, - "enable_features": [ - "IOSOneTimeDefaultBrowserNotification", - "IOSReactivationNotifications" - ] - } - ] - } - ], - "IOSPartitionAllocBackupRefPtr": [ + "IOSPartitionAllocBackupRefPtr": [ { "platforms": [ "ios" @@ -13859,21 +13224,6 @@ ] } ], - "IOSPasskeyShim": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSPasskeyShim" - ] - } - ] - } - ], "IOSProactivePasswordGenerationBottomSheet": [ { "platforms": [ @@ -13900,6 +13250,9 @@ "enable_features": [ "EnableReadabilityHeuristic", "EnableReaderModeOptimizationGuideEligibility" + ], + "disable_features": [ + "ReaderModeIgnoreBadgeThreshold" ] } ] @@ -13977,24 +13330,6 @@ ] } ], - "IOSStart4Hour": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled4Hour", - "params": { - "ReturnToStartSurfaceInactiveDurationInSeconds": "14400" - }, - "enable_features": [ - "StartSurface" - ] - } - ] - } - ], "IOSStatelessFormSuggestionController": [ { "platforms": [ @@ -14030,37 +13365,6 @@ ] } ], - "IOSTFLiteLanguageDetection": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_20220429", - "enable_features": [ - "DownloadServiceForegroundSessionIOSFeature", - "TFLiteLanguageDetectionEnabled" - ] - } - ] - } - ], - "IOSTabGridDragAndDrop": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabGridDragAndDrop" - ] - } - ] - } - ], "IOSTabGroupColorOnSurface": [ { "platforms": [ @@ -14085,8 +13389,6 @@ { "name": "Enabled", "enable_features": [ - "TabGroupInOverflowMenu", - "TabGroupInTabIconContextMenu", "TabRecallNewTabGroupButton", "TabSwitcherOverflowMenu" ] @@ -14217,6 +13519,26 @@ ] } ], + "IdbInhibitCompactRange": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IdbInhibitCompactRange" + ] + } + ] + } + ], "IdbSqliteBackingStoreInMemoryContexts": [ { "platforms": [ @@ -14298,6 +13620,45 @@ ] } ], + "IgnoreInvalidGrantError": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IgnoreInvalidGrantError" + ] + } + ] + } + ], + "IgnoreIpMatching": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_NOIP", + "params": { + "ignore_ip_matching_when_finding_existing_sessions": "true", + "noip_quic_option": "NOIP" + }, + "enable_features": [ + "IgnoreIpMatching" + ] + } + ] + } + ], "ImageDescriptionsAlternateRouting": [ { "platforms": [ @@ -14353,6 +13714,27 @@ ] } ], + "IncognitoStaticStorageQuota": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IncognitoStaticStorageQuota" + ] + } + ] + } + ], "IncreaseHttp3Usage": [ { "platforms": [ @@ -14395,15 +13777,6 @@ "enable_features": [ "TryQuicByDefault" ] - }, - { - "name": "EnabledWithNOIP", - "params": { - "quic_options": "NOIP" - }, - "enable_features": [ - "TryQuicByDefault" - ] } ] } @@ -14544,24 +13917,6 @@ ] } ], - "InlineFullscreenPerfExperiment": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "InlineFullscreenPerfExperiment" - ] - } - ] - } - ], "InputVizard": [ { "platforms": [ @@ -14636,40 +13991,6 @@ ] } ], - "InvalidateSearchEngineChoiceOnDeviceRestoreDetection": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "EnabledRetroactive", - "params": { - "is_retroactive": "true" - }, - "enable_features": [ - "InvalidateSearchEngineChoiceOnDeviceRestoreDetection" - ] - } - ] - } - ], - "IsolatedWebApps": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IsolatedWebAppAutomaticUpdates", - "IsolatedWebApps" - ] - } - ] - } - ], "IsolatesPriorityUseProcessPriority": [ { "platforms": [ @@ -14724,27 +14045,6 @@ ] } ], - "JobPriorityBoosting": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "JobPriorityBoosting" - ] - } - ] - } - ], "JumpStartOmnibox": [ { "platforms": [ @@ -15198,12 +14498,11 @@ ] } ], - "LazyUpdateTranslateModel": [ + "LazyBrowserInterfaceBroker": [ { "platforms": [ "android", "chromeos", - "fuchsia", "linux", "mac", "windows" @@ -15212,7 +14511,7 @@ { "name": "Enabled", "enable_features": [ - "LazyUpdateTranslateModel" + "LazyBrowserInterfaceBroker" ] } ] @@ -15358,17 +14657,12 @@ "LoadAllTabsAtStartup": [ { "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "LazyBrowserInterfaceBroker", "LoadAllTabsAtStartup" ] } @@ -15480,6 +14774,7 @@ { "name": "Enabled", "params": { + "AskGeminiChipAllowNonconsentedUsers": "true", "PopupBlocker": "false" }, "enable_features": [ @@ -15556,7 +14851,7 @@ ] } ], - "LongAnimationFrameSourceCharPosition": [ + "LogicalClearHttpCache": [ { "platforms": [ "android", @@ -15569,80 +14864,78 @@ { "name": "Enabled", "enable_features": [ - "LongAnimationFrameSourceCharPosition" + "LogicalClearHttpCache" ] } ] } ], - "LowerPriorityForCompositorGestures": [ + "LongAnimationFrameSourceCharPosition": [ { "platforms": [ "android", - "android_webview" - ], + "chromeos", + "linux", + "mac", + "windows" + ], "experiments": [ { "name": "Enabled", "enable_features": [ - "LowerPriorityForCompositorGestures" + "LongAnimationFrameSourceCharPosition" ] } ] } ], - "MHTML_Improvements": [ + "LowerPriorityForCompositorGestures": [ { "platforms": [ "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" + "android_webview" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "MHTML_Improvements" + "LowerPriorityForCompositorGestures" ] } ] } ], - "MacAccessibilityAPIMigration": [ + "MHTML_Improvements": [ { "platforms": [ - "mac" + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "MacAccessibilityAPIMigration" + "MHTML_Improvements" ] } ] } ], - "MainIdleBypassSchedulerExperiment": [ + "MacAccessibilityAPIMigration": [ { "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" + "mac" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "MainIdleBypassScheduler" + "MacAccessibilityAPIMigration" ] } ] @@ -15709,29 +15002,29 @@ ] } ], - "ManagedProfileRequiredInterstitial": [ + "MallocDumpDoNotWalkFreeList": [ { "platforms": [ + "android", + "chromeos", "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "ManagedProfileRequiredInterstitial" + "name": "Disabled", + "disable_features": [ + "MallocDumpProviderPopulateDiscardableBytes", + "PartitionsDumpPopulateDiscardableBytes" ] } ] } ], - "MediaDeviceIdStoragePartitioning": [ + "ManagedProfileRequiredInterstitial": [ { "platforms": [ - "android", - "chromeos", - "fuchsia", "linux", "mac", "windows" @@ -15740,7 +15033,7 @@ { "name": "Enabled", "enable_features": [ - "MediaDeviceIdPartitioning" + "ManagedProfileRequiredInterstitial" ] } ] @@ -15936,63 +15229,6 @@ ] } ], - "MemoryReducerGcCount": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "compaction_max_evacuated_bytes_mb_for_reduce_memory": "36", - "compaction_target_fragmentation_percent_for_reduce_memory": "20", - "memory_reducer_gc_count": "1" - }, - "enable_features": [ - "V8Flag_memory_reducer" - ] - } - ] - } - ], - "MessagesPreinstall": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MessagesPreinstall" - ] - } - ] - } - ], - "MetricsClusteringSurvey": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_CANARY_DEV_50_20240918", - "enable_features": [ - "SegmentationPlatformMetricsClustering", - "SegmentationSurveyPage" - ] - } - ] - } - ], "MetricsDataQuality": [ { "platforms": [ @@ -16046,44 +15282,6 @@ ] } ], - "MigrateDefaultChromeAppToWebAppsGSuite": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_20210111", - "enable_features": [ - "MigrateDefaultChromeAppToWebAppsGSuite" - ] - } - ] - } - ], - "MigrateDefaultChromeAppToWebAppsNonGSuite": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_20210111", - "enable_features": [ - "MigrateDefaultChromeAppToWebAppsNonGSuite" - ] - } - ] - } - ], "MigrateIOSKeychainAccessibility": [ { "platforms": [ @@ -16142,15 +15340,32 @@ ], "experiments": [ { - "name": "Enabled_ESB", + "name": "QRCode_ESB", "params": { "mobile_promo_on_desktop_promo_type": "2" }, "enable_features": [ "EnableCrossDevicePrefTracker", - "MobilePromoOnDesktopWithReminder" - ], - "disable_features": [ + "MobilePromoOnDesktopWithQRCode" + ] + }, + { + "name": "QRCode_Passwords", + "params": { + "mobile_promo_on_desktop_promo_type": "3" + }, + "enable_features": [ + "EnableCrossDevicePrefTracker", + "MobilePromoOnDesktopWithQRCode" + ] + }, + { + "name": "QRCode_Passwords_and_ESB", + "params": { + "mobile_promo_on_desktop_promo_type": "2,3" + }, + "enable_features": [ + "EnableCrossDevicePrefTracker", "MobilePromoOnDesktopWithQRCode" ] } @@ -16196,21 +15411,6 @@ ] } ], - "MojoUseEventFd": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MojoUseEventFd" - ] - } - ] - } - ], "MovePasswordLeakDetectionToggleIos": [ { "platforms": [ @@ -16241,21 +15441,6 @@ ] } ], - "MultiCalendarSupport": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MultiCalendarSupport" - ] - } - ] - } - ], "MultipleSpareRPHs": [ { "platforms": [ @@ -16292,21 +15477,6 @@ ] } ], - "NTPBackgroundCustomization": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NTPBackgroundCustomization" - ] - } - ] - } - ], "NTPBackgroundImageCache": [ { "platforms": [ @@ -16322,25 +15492,6 @@ ] } ], - "NTPPopularSites": [ - { - "platforms": [ - "android", - "ios" - ], - "experiments": [ - { - "name": "Version7", - "params": { - "version": "7" - }, - "enable_features": [ - "NTPPopularSites" - ] - } - ] - } - ], "NavigationThrottleRegistryAttributeCache": [ { "platforms": [ @@ -16360,36 +15511,6 @@ ] } ], - "NearbyBleV2": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableNearbyBleV2" - ] - } - ] - } - ], - "NearbyShareNameEnabled": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IsNameEnabled" - ] - } - ] - } - ], "NearbySharingRemoveRestrictToContacts": [ { "platforms": [ @@ -16405,39 +15526,17 @@ ] } ], - "NearbySharingWifiDirect": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NearbySharingWifiDirect" - ] - } - ] - } - ], - "NetworkQualityEstimatorAsync": [ + "NetworkContextDirectReceiver": [ { "platforms": [ - "android_webview", "android", - "chromeos", - "linux", - "mac", - "windows" + "android_webview" ], "experiments": [ { - "name": "Experiment", - "params": { - "defer_until_next_step": "true" - }, + "name": "Enabled", "enable_features": [ - "NetworkQualityEstimatorAsyncNotifyStartTransaction" + "NetworkContextDirectReceiver" ] } ] @@ -16457,10 +15556,12 @@ { "name": "Experiment", "params": { + "defer_notify_headers_until_next_step": "true", "defer_until_next_step": "true" }, "enable_features": [ - "NetworkQualityEstimatorAsyncNotifyHeadersReceived" + "NetworkQualityEstimatorAsyncNotifyHeadersReceived", + "NetworkQualityEstimatorAsyncNotifyStartTransaction" ] } ] @@ -16505,7 +15606,6 @@ { "name": "Enabled", "enable_features": [ - "DrainSpdySessionSynchronouslyOnRemoteEndpointDisconnect", "NetworkServicePerPriorityTaskQueues" ] } @@ -16830,21 +15930,6 @@ ] } ], - "NotificationLimit": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NotificationLimit" - ] - } - ] - } - ], "NotificationTelemetrySwb": [ { "platforms": [ @@ -16884,21 +15969,6 @@ ] } ], - "NotificationWidthIncrease": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NotificationWidthIncrease" - ] - } - ] - } - ], "NotificationsIgnoreRequireInteraction": [ { "platforms": [ @@ -17001,11 +16071,13 @@ { "name": "Enabled", "params": { - "CyclingPlaceholders": "true", - "RealboxLayoutMode": "TallTopContext" + "NtpComposeboxContextMenuEnableMultiTabSelection": "true", + "NtpNextShowStaticRecentTabChipParam": "false", + "NtpNextShowStaticTextParam": "true" }, "enable_features": [ "IPH_DesktopRealboxContextualSearchFeature", + "NtpNextFeatures", "NtpRealboxNext" ] }, @@ -17013,8 +16085,7 @@ "name": "Enabled_Compact_Multiline", "params": { "CyclingPlaceholders": "true", - "MultiLineEnabled": "true", - "RealboxLayoutMode": "Compact" + "MultiLineEnabled": "true" }, "enable_features": [ "NtpRealboxNext" @@ -17106,37 +16177,6 @@ ] } ], - "OfferPinToTaskbarInSettings": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "MostlyLaunched", - "enable_features": [ - "OfferPinToTaskbarInSettings" - ] - } - ] - } - ], - "OfferPinToTaskbarInfoBar": [ - { - "platforms": [ - "mac", - "windows" - ], - "experiments": [ - { - "name": "MostlyLaunched", - "enable_features": [ - "OfferPinToTaskbarInfoBar" - ] - } - ] - } - ], "OfferPinToTaskbarWhenSettingDefault": [ { "platforms": [ @@ -17190,23 +16230,6 @@ ] } ], - "OidcAuthProfileManagement": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OidcAuthProfileManagement" - ] - } - ] - } - ], "OmahaMinSdkVersionAndroid": [ { "platforms": [ @@ -17277,21 +16300,6 @@ } ] }, - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "AndroidExperiments", - "enable_features": [ - "OmniboxDynamicMaxAutocomplete", - "OmniboxMaxURLMatches", - "OmniboxUIExperimentMaxAutocompleteMatches" - ] - } - ] - }, { "platforms": [ "ios" @@ -17320,22 +16328,20 @@ ] } ], - "OmniboxInspireMePhase2": [ + "OmniboxImprovementsForLff": [ { "platforms": [ "android" ], "experiments": [ { - "name": "EnabledCarouselAboveTrends", + "name": "Enabled_V2", "params": { - "QueryTilesShowAboveTrends": "true", - "QueryTilesShowAsCarousel": "false", - "experiment_tag": "{maxLevels: 1, rankTiles: true}" + "remove_suggestion_via_button": "true", + "switch_to_tab_chip": "true" }, "enable_features": [ - "OmniboxQueryTilesInZPSOnNTP", - "QueryTiles" + "OmniboxImprovementForLFF" ] } ] @@ -17493,9 +16499,10 @@ ] } ], - "OnDeviceModelBackgroundDownload": [ + "OnDeviceCategoryClassifier": [ { "platforms": [ + "chromeos", "windows", "mac", "linux" @@ -17503,19 +16510,14 @@ "experiments": [ { "name": "Enabled", - "params": { - "allowed_features": "PromptApi,WritingAssistanceApi,Summarize", - "on_device_model_free_space_mb_required_to_background_install": "50000" - }, "enable_features": [ - "OnDeviceModelBackgroundDownload", - "ShowOnDeviceAiSettings" + "OnDeviceCategoryClassifier" ] } ] } ], - "OnDeviceModelLitertLmBackend": [ + "OnDeviceModelBackgroundDownload": [ { "platforms": [ "windows", @@ -17525,23 +16527,31 @@ "experiments": [ { "name": "Enabled", + "params": { + "allowed_features": "PromptApi,WritingAssistanceApi,Summarize", + "on_device_model_free_space_mb_required_to_background_install": "50000" + }, "enable_features": [ - "OnDeviceModelLitertLmBackend" + "OnDeviceModelBackgroundDownload", + "ShowOnDeviceAiSettings" ] } ] } ], - "OnDeviceStorage": [ + "OnDeviceModelLitertLmBackend": [ { "platforms": [ - "ios" + "chromeos", + "windows", + "mac", + "linux" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "OnDeviceStorage" + "OnDeviceModelLitertLmBackend" ] } ] @@ -17565,16 +16575,16 @@ ] } ], - "OngoingProcesses": [ + "OnlyUseWindowResizeHelperOnResize": [ { "platforms": [ - "chromeos" + "mac" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "OngoingProcesses" + "OnlyUseWindowResizeHelperOnResize" ] } ] @@ -17626,33 +16636,35 @@ ] } ], - "OptimizationGuideOnDeviceModelCpuBackend": [ + "OptimizeAssociateWindowsAndroid": [ { "platforms": [ - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "OnDeviceModelCpuBackend" + "OptimizeAssociateWindowsAndroid" ] } ] } ], - "OptimizeAssociateWindowsAndroid": [ + "OptimizeWebRequestProxy": [ { "platforms": [ - "android" + "android", + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "OptimizeAssociateWindowsAndroid" + "OptimizeWebRequestProxy" ] } ] @@ -17719,45 +16731,6 @@ ] } ], - "OrderScrollJankV4EventMetricsByArrivedInRendererCompositor": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OrderScrollJankV4EventMetricsByArrivedInRendererCompositor" - ] - } - ] - } - ], - "OriginMatcherNewCopyAssignment": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OriginMatcherNewCopyAssignment" - ] - } - ] - } - ], "OutOfProcessPrintDriversPrint": [ { "platforms": [ @@ -17816,44 +16789,6 @@ ] } ], - "OzonePlatformAuto": [ - { - "platforms": [ - "linux" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "enable_features": [ - "AcceleratedVideoDecodeLinuxGL", - "AcceleratedVideoDecodeLinuxZeroCopyGL", - "OverrideDefaultOzonePlatformHintToAuto" - ] - }, - { - "name": "Default", - "disable_features": [ - "OverrideDefaultOzonePlatformHintToAuto" - ] - } - ] - } - ], - "PWAIconAndTitleInNativeNotificationsWin": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "EnablePWAIconAndTitleInNativeNotificationsWin", - "enable_features": [ - "AppSpecificNotifications" - ] - } - ] - } - ], "PageActionsMigration": [ { "platforms": [ @@ -17900,6 +16835,29 @@ ] } ], + "PageContentAnnotationsBatchAnnotationsTimeout": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "batch_annotations_timeout_seconds": "1" + }, + "enable_features": [ + "PageContentAnnotations" + ] + } + ] + } + ], "PageInfoAboutThisSite40Langs": [ { "platforms": [ @@ -17962,27 +16920,6 @@ ] } ], - "ParkableStringsLessAggressiveAndZstd": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LessAggressiveParkableString", - "UseZstdForParkableStrings" - ] - } - ] - } - ], "PartialPageZeroing": [ { "platforms": [ @@ -18041,9 +16978,9 @@ ], "experiments": [ { - "name": "enabled_without_strict_check_20260227", + "name": "enabled_with_strict_check_20251212", "params": { - "strict-free-size-check": "false" + "strict-free-size-check": "true" }, "enable_features": [ "PartitionAllocFreeWithSize" @@ -18405,6 +17342,25 @@ ] } ], + "PasswordFormGroupedAffiliations": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "LimitedManualOverridesChromeOn", + "enable_features": [ + "PasswordFormGroupedAffiliations" + ] + } + ] + } + ], "PasswordInfobarDisplayLength": [ { "platforms": [ @@ -18423,6 +17379,21 @@ ] } ], + "PasswordRemovalFromDeleteBrowsingData": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PasswordRemovalFromDeleteBrowsingData" + ] + } + ] + } + ], "PasswordUploadUiUpdate": [ { "platforms": [ @@ -18477,7 +17448,7 @@ ] } ], - "PaymentRequestRejectTooSmallWindows": [ + "PaymentHandlerDialogUseInitiatorInUrlLoad": [ { "platforms": [ "chromeos", @@ -18489,13 +17460,31 @@ { "name": "Enabled", "enable_features": [ - "PaymentRequestRejectTooSmallWindows" + "PaymentHandlerDialogUseInitiatorInUrlLoad" ] } ] } ], - "PaymentRequestUseRendererUrlLoader": [ + "PaymentRequestRejectTooSmallWindows": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PaymentRequestRejectTooSmallWindows" + ] + } + ] + } + ], + "PaymentRequestUseRendererUrlLoader": [ { "platforms": [ "android", @@ -18718,7 +17707,6 @@ "AvoidCloneArgsOnExtensionFunctionDispatch", "AvoidUnnecessaryGetMinimizeButtonOffset", "AvoidUnnecessaryShouldRenderRichAnimation", - "FastPathNoRaster", "GCOnArrayBufferAllocationFailure", "MvcUpdateViewWhenModelChanged", "ReducePPMs", @@ -18737,21 +17725,6 @@ ] } ], - "PerformDefaultBrowserCheckValidations": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PerformDefaultBrowserCheckValidations" - ] - } - ] - } - ], "PerformanceControlsPPMSurvey": [ { "platforms": [ @@ -18852,25 +17825,6 @@ ] } ], - "PermissionsAIP92": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows", - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PermissionsAIP92" - ] - } - ] - } - ], "PermissionsAIv4": [ { "platforms": [ @@ -18951,32 +17905,36 @@ ] } ], - "PersistentDefaultBrowserPromo": [ + "PermitTcpSocketPoolConnectBackupJobs": [ { "platforms": [ - "ios" + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "PersistentDefaultBrowserPromo" + "name": "Disabled", + "disable_features": [ + "PermitTcpSocketPoolConnectBackupJobs" ] } ] } ], - "PickerUI": [ + "PersistentDefaultBrowserPromo": [ { "platforms": [ - "chromeos" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "ModifierSplit", - "Picker" + "PersistentDefaultBrowserPromo" ] } ] @@ -19045,21 +18003,6 @@ ] } ], - "PlayReadyHardwareSecureDecryption": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "HardwareSecureDecryption" - ] - } - ] - } - ], "PlusAddressAcceptedFirstTimeCreateSurvey": [ { "platforms": [ @@ -19217,28 +18160,6 @@ ] } ], - "PlzDedicatedWorker": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DedicatedWorkerAblationStudyEnabled", - "ServiceWorkerClientIdAlignedWithSpec" - ] - } - ] - } - ], "PointerLockOnAndroid": [ { "platforms": [ @@ -19290,30 +18211,6 @@ ] } ], - "PompanoEnabled": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "EnabledeWithSummarizeSelected", - "enable_features": [ - "MahiPanelResizable", - "MahiSummarizeSelected", - "Pompano" - ] - }, - { - "name": "EnabledWithoutSummarizeSelected", - "enable_features": [ - "MahiPanelResizable", - "Pompano" - ] - } - ] - } - ], "PostDelayedTaskFocusTab": [ { "platforms": [ @@ -19501,19 +18398,36 @@ ] } ], - "PrefetchProxyDesktop": [ + "PrefetchPrerenderIntegration": [ { "platforms": [ + "android", "chromeos", "linux", "mac", - "windows" + "windows", + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PrefetchPrerenderIntegration" + ] + } + ] + } + ], + "PreloadMediaEngagementData": [ + { + "platforms": [ + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "PrefetchProxy" + "PreloadMediaEngagementData" ] } ] @@ -19557,6 +18471,26 @@ ] } ], + "PrepopulatedEnginesMigration": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_20260320", + "enable_features": [ + "PrepopulatedEnginesMigration" + ] + } + ] + } + ], "Prerender2EarlyDocumentLifecycleUpdateV2": [ { "platforms": [ @@ -19656,6 +18590,21 @@ ] } ], + "Prerender2WarmUpCompositorForWebView": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "Prerender2WarmUpCompositorForWebView" + ] + } + ] + } + ], "PreserveDiscardableImageMapQuality": [ { "platforms": [ @@ -19796,33 +18745,20 @@ ] } ], - "PrivacySandboxAdsAPIs": [ + "PrivacySandboxAdPrivacyUxDeprecation": [ { "platforms": [ "android", "chromeos", - "fuchsia", "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled_Notice_M1_AllAPIs_Expanded_NoOT_Stable", - "params": { - "implementation_type": "mparch" - }, + "name": "Enabled", "enable_features": [ - "AllowURNsInIframes", - "BrowsingTopics", - "FencedFrames", - "FencedFramesAPIChanges", - "InterestGroupStorage", - "KAnonymityService", - "PrivacySandboxAdsAPIs", - "PrivacySandboxAdsAPIsM1Override", - "PrivateAggregationApi", - "SharedStorageAPI" + "PrivacySandboxAdPrivacyUxDeprecation" ] } ] @@ -20090,42 +19026,6 @@ ] } ], - "ProfileRemoteCommands": [ - { - "platforms": [ - "android", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UserRemoteCommands", - "UserRemoteCommandsInvalidationWithDirectMessagesEnabled" - ] - } - ] - } - ], - "ProfileSignalsReportingEnabled": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ProfileSignalsReportingEnabled" - ] - } - ] - } - ], "ProfilesReordering": [ { "platforms": [ @@ -20163,54 +19063,25 @@ ] } ], - "PropagateWebViewNetworkingSignals": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "SignalAndConnecMigration_20230706", - "enable_features": [ - "MigrateSessionsOnNetworkChangeV2", - "webViewPropagateNetworkSignals" - ] - }, - { - "name": "Control_20230706", - "disable_features": [ - "MigrateSessionsOnNetworkChangeV2", - "webViewPropagateNetworkSignals" - ] - }, - { - "name": "SignalNoConnecMigration_20230706", - "enable_features": [ - "webViewPropagateNetworkSignals" - ], - "disable_features": [ - "MigrateSessionsOnNetworkChangeV2" - ] - } - ] - } - ], - "ProtoBasedEnterpriseReporting": [ + "ProjectsPanel": [ { "platforms": [ "chromeos", - "fuchsia", "linux", "mac", - "windows", - "android", - "ios" + "windows" ], "experiments": [ { "name": "Enabled", + "params": { + "include_threads_in_projects_panel": "true" + }, "enable_features": [ - "UploadRealtimeReportingEventsUsingProto" + "IPH_ResumptionRail", + "ProjectsPanel", + "SyncAIThreads", + "SyncGeminiThreads" ] } ] @@ -20270,6 +19141,21 @@ ] } ], + "PumpPeekMessageWithObserver": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PumpPeekMessageWithObserver" + ] + } + ] + } + ], "PushMessagingDisallowSenderIDs": [ { "platforms": [ @@ -20310,37 +19196,31 @@ ] } ], - "QUIC": [ + "QuicLongerIdleConnectionTimeout": [ { "platforms": [ "android", - "android_webview", "chromeos", + "ios", "linux", "mac", "windows" ], "experiments": [ { - "name": "EnabledNoId", - "params": { - "channel": "D", - "epoch": "20250423", - "retransmittable_on_wire_timeout_milliseconds": "200" - }, + "name": "Enabled", "enable_features": [ - "QuicDoesNotUseFeatures" + "QuicLongerIdleConnectionTimeout" ] } ] } ], - "QuicLongerIdleConnectionTimeout": [ + "RazeOldHistoryDatabase": [ { "platforms": [ "android", "chromeos", - "ios", "linux", "mac", "windows" @@ -20349,65 +19229,7 @@ { "name": "Enabled", "enable_features": [ - "QuicLongerIdleConnectionTimeout" - ] - } - ] - } - ], - "QuickShareV2": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "enable_features": [ - "QuickShareV2" - ] - }, - { - "name": "Enabled", - "enable_features": [ - "QuickShareV2" - ] - } - ] - } - ], - "RawDrawAndDrDc": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "DrDc_vulkan", - "params": { - "BlockListByDevice": "amber|chopin|secret|a03|SO-51B|on7xelte|j7xelte|F41B|doha|HWYAL|a20s|begonia|b2q|t2s|channel|galahad|rk322x_box|a32|ellis|dandelion|tonga|RMX3231" - }, - "disable_features": [ - "RawDraw" - ] - } - ] - } - ], - "RazeOldHistoryDatabase": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RazeOldHistoryDatabase" + "RazeOldHistoryDatabase" ] } ] @@ -20580,6 +19402,26 @@ ] } ], + "ReadClipboardDataOnClipboardItemGetType": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ReadClipboardDataOnClipboardItemGetType" + ] + } + ] + } + ], "RebindServiceBatchApi": [ { "platforms": [ @@ -20658,21 +19500,6 @@ ] } ], - "ReduceCpuUtilization2": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ReduceCpuUtilization2" - ] - } - ] - } - ], "ReduceIPCCombined": [ { "platforms": [ @@ -20728,21 +19555,6 @@ ] } ], - "RegisterOsUpdateHandlerWin": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RegisterOsUpdateHandlerWin" - ] - } - ] - } - ], "RejectWeakCiphertext": [ { "platforms": [ @@ -20758,69 +19570,6 @@ ] } ], - "RemotePageMetadataAndroid": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_20240514", - "params": { - "supported_countries": "*", - "supported_locales": "*" - }, - "enable_features": [ - "PageContentAnnotationsPersistSalientImageMetadata", - "RemotePageMetadata" - ] - } - ] - } - ], - "RemotePageMetadataBling": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_20240514", - "params": { - "supported_countries": "*", - "supported_locales": "*" - }, - "enable_features": [ - "PageContentAnnotationsPersistSalientImageMetadata", - "RemotePageMetadata" - ] - } - ] - } - ], - "RemotePageMetadataDesktopExpansion": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_20240514", - "params": { - "supported_countries": "*", - "supported_locales": "*" - }, - "enable_features": [ - "PageContentAnnotationsPersistSalientImageMetadata", - "RemotePageMetadata" - ] - } - ] - } - ], "RemoveCachedProcessFromBindingManager": [ { "platforms": [ @@ -20885,24 +19634,6 @@ ] } ], - "RemoveRendererProcessLimit": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RemoveRendererProcessLimit" - ] - } - ] - } - ], "RenderArcNotificationsByChrome": [ { "platforms": [ @@ -21120,24 +19851,6 @@ ] } ], - "ResolutionBasedDecoderPriority": [ - { - "platforms": [ - "linux", - "mac", - "windows", - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ResolutionBasedDecoderPriority" - ] - } - ] - } - ], "RestrictAbusePorts": [ { "platforms": [ @@ -21217,6 +19930,21 @@ ] } ], + "RetryCreateFileMappingOnCommitLimit": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "RetryCreateFileMappingOnCommitLimit" + ] + } + ] + } + ], "RetryGetVideoCaptureDeviceInfos": [ { "platforms": [ @@ -21269,37 +19997,62 @@ ] } ], - "RunDefaultStatusCheck": [ + "RustyBmpFeature": [ { "platforms": [ - "ios" + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled", + "name": "RustyBmpExperimentForTests", "enable_features": [ - "RunDefaultStatusCheck" + "RustyBmpFeature" ] } ] } ], - "RustyBmpFeature": [ + "SQLitePersistentCookieStoreEarlyInit": [ { "platforms": [ "android", "android_webview", "chromeos", - "ios", "linux", "mac", "windows" ], "experiments": [ { - "name": "RustyBmpExperimentForTests", + "name": "Enabled", + "params": { + "check_disk": "true" + }, "enable_features": [ - "RustyBmpFeature" + "SQLitePersistentCookieStoreEarlyInit" + ] + } + ] + } + ], + "SaasUsageReporting": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SaasUsageReporting" ] } ] @@ -21417,33 +20170,6 @@ ] } ], - "SafetyHubDisruptiveNotificationRevocationDesktop": [ - { - "platforms": [ - "windows", - "mac", - "linux", - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_Conservative_14d", - "params": { - "experiment_version": "2", - "max_engagement_score": "0.0", - "min_engagement_score_delta": "3.0", - "min_notification_count": "6", - "shadow_run": "false", - "waiting_for_metrics_days": "1", - "waiting_time_as_proposed": "14d" - }, - "enable_features": [ - "SafetyHubDisruptiveNotificationRevocation" - ] - } - ] - } - ], "SafetyHubIncreasePasswordCheckFrequency": [ { "platforms": [ @@ -21458,9 +20184,9 @@ "name": "Enabled", "params": { "background-password-check-interval": "10d", - "password-check-mon-weight": "5", - "password-check-sat-weight": "5", - "password-check-sun-weight": "5" + "password-check-mon-weight": "4", + "password-check-sat-weight": "4", + "password-check-sun-weight": "4" }, "enable_features": [ "SafetyHub" @@ -21488,26 +20214,6 @@ ] } ], - "SavedTabGroupUrlRestriction": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableUrlRestriction" - ] - } - ] - } - ], "ScaleScrollbarAnimationTiming": [ { "platforms": [ @@ -21651,7 +20357,7 @@ ] } ], - "SchoolToolsSpotlight": [ + "ScreencastForceEnableServerSideSpeechRecognition": [ { "platforms": [ "chromeos" @@ -21660,118 +20366,104 @@ { "name": "Enabled", "enable_features": [ - "BocaSpotlight" + "ForceEnableServerSideSpeechRecognition" ] } ] } ], - "SchoolToolsSpotlightRobotRequester": [ + "ScreencastServerBasedUSMLocales": [ { "platforms": [ "chromeos" ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "BocaSpotlightRobotRequester" - ] - } - ] - } - ], - "ScreenCaptureKitMacScreen": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", + "name": "Enabled_Dogfood", "enable_features": [ - "ScreenCaptureKitMacScreen" + "InternalServerSideSpeechRecognitionByFinch" ] } ] } ], - "ScreencastForceEnableServerSideSpeechRecognition": [ + "ScrollPredictorEnhancements": [ { "platforms": [ - "chromeos" + "android" ], "experiments": [ { - "name": "Enabled", + "name": "KalmanBypassOneEuroFilter_20260311", "enable_features": [ - "ForceEnableServerSideSpeechRecognition" + "ResamplingScrollEvents", + "ScrollPredictorFilteringBypassOnSynthetic", + "ScrollPredictorRefinedHasPrediction", + "ScrollPredictorSyntheticKalman" ] - } - ] - } - ], - "ScreencastServerBasedUSMLocales": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ + }, { - "name": "Enabled_Dogfood", + "name": "KalmanRetainOneEuroFilter_20260311", "enable_features": [ - "InternalServerSideSpeechRecognitionByFinch" + "ResamplingScrollEvents", + "ScrollPredictorRefinedHasPrediction", + "ScrollPredictorSyntheticKalman" + ], + "disable_features": [ + "ScrollPredictorFilteringBypassOnSynthetic" ] - } - ] - } - ], - "SeaPenQueryRewrite": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ + }, { - "name": "Enabled", + "name": "RefinedPredictionOnly_20260311", "enable_features": [ - "SeaPenQueryRewrite" + "ResamplingScrollEvents", + "ScrollPredictorRefinedHasPrediction" + ], + "disable_features": [ + "ScrollPredictorFilteringBypassOnSynthetic", + "ScrollPredictorSyntheticKalman" ] - } - ] - } - ], - "SeaPenTextInput": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ + }, { - "name": "Enabled", + "name": "ResampleLimit25ms_20260311", + "params": { + "max_resample_time": "25ms" + }, "enable_features": [ - "SeaPenTextInput" + "ResamplingScrollEvents", + "ScrollPredictorRefinedHasPrediction" + ], + "disable_features": [ + "ScrollPredictorFilteringBypassOnSynthetic", + "ScrollPredictorSyntheticKalman" ] - } - ] - } - ], - "SeaPenTextInputI18n": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ + }, { - "name": "Enabled", + "name": "ResampleLimit30ms_20260311", + "params": { + "max_resample_time": "30ms" + }, "enable_features": [ - "SeaPenTextInputTranslation" + "ResamplingScrollEvents", + "ScrollPredictorRefinedHasPrediction" + ], + "disable_features": [ + "ScrollPredictorFilteringBypassOnSynthetic", + "ScrollPredictorSyntheticKalman" ] }, { - "name": "Enabled_Dogfood", + "name": "ResampleLimit35ms_20260311", + "params": { + "max_resample_time": "35ms" + }, "enable_features": [ - "SeaPenTextInputTranslation" + "ResamplingScrollEvents", + "ScrollPredictorRefinedHasPrediction" + ], + "disable_features": [ + "ScrollPredictorFilteringBypassOnSynthetic", + "ScrollPredictorSyntheticKalman" ] } ] @@ -21792,26 +20484,6 @@ ] } ], - "SeamlessRenderFrameSwap": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SeamlessRenderFrameSwap" - ] - } - ] - } - ], "SeamlessSigninClank": [ { "platforms": [ @@ -21841,6 +20513,7 @@ { "name": "Enabled", "enable_features": [ + "HappinessTrackingSurveysForDesktopSEHijacking", "SearchEngineExplicitChoiceDialog", "SearchEngineUnconditionalDialog" ] @@ -21972,17 +20645,16 @@ ] } ], - "SecurePaymentConfirmationUxRefresh": [ + "SearchPrefetchIgnoreSaverModesOnPress": [ { "platforms": [ - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "SecurePaymentConfirmationUxRefresh" + "SearchPrefetchIgnoreSaverModesOnPress" ] } ] @@ -22029,21 +20701,6 @@ ] } ], - "SelectFileOpenDocument": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SelectFileOpenDocument" - ] - } - ] - } - ], "SelectivePermissionsIntervention": [ { "platforms": [ @@ -22146,28 +20803,156 @@ ] } ], - "ServiceWorkerAutoPreload": [ + "SeparateDefaultAndPinPrompt": [ { "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "PinFlow_AggressiveLimits_Message1_Arm", + "params": { + "message_version": "1", + "pin_cooldown_days": "7", + "pin_max_count": "10", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "DefaultBrowserFlow_Arm", + "params": { + "random_seed": "2" + }, + "enable_features": [ + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "ModeratePinLimits_Arm", + "params": { + "pin_cooldown_days": "14", + "pin_max_count": "5", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "LenientPinLimits_Arm", + "params": { + "pin_cooldown_days": "30", + "pin_max_count": "3", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion2_Arm", + "params": { + "message_version": "2", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion3_Arm", + "params": { + "message_version": "3", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion4_Arm", + "params": { + "message_version": "4", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion5_Arm", + "params": { + "message_version": "5", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion6_Arm", + "params": { + "message_version": "6", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion7_Arm", + "params": { + "message_version": "7", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion8_Arm", + "params": { + "message_version": "8", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion9_Arm", + "params": { + "message_version": "9", + "random_seed": "3" + }, + "enable_features": [ + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" + ] + }, + { + "name": "MessageVersion10_Arm", "params": { - "enable_only_when_service_worker_not_running": "true", - "enable_subresource_preload": "false", - "has_web_request_api_proxy": "true", - "respect_navigation_preload": "true" + "message_version": "10", + "random_seed": "3" }, "enable_features": [ - "ServiceWorkerAutoPreload" + "OfferPinToTaskbarInfoBar", + "SeparateDefaultAndPinPrompt" ] } ] @@ -22198,6 +20983,25 @@ ] } ], + "ServiceWorkerStaticRouterCORPCheck": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ServiceWorkerStaticRouterCORPCheck" + ] + } + ] + } + ], "ServiceWorkerSyntheticResponse": [ { "platforms": [ @@ -22311,21 +21115,6 @@ ] } ], - "ShareDefaultBrowserStatus": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ShareDefaultBrowserStatus" - ] - } - ] - } - ], "SharedHighlightingIphClank": [ { "platforms": [ @@ -22435,24 +21224,6 @@ ] } ], - "SharedWorkerBlobURLFix": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SharedWorkerBlobURLFix" - ] - } - ] - } - ], "SharingHubDesktopScreenshots": [ { "platforms": [ @@ -22541,75 +21312,16 @@ ] } ], - "SidePanelCompanionDesktopM116Plus": [ + "SigninLevelUpButton": [ { "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "EnableCompanionChromeOS_20240222", - "params": { - "open-companion-for-image-search": "false", - "open-companion-for-web-search": "false", - "open-contextual-lens-panel": "false", - "open-links-in-current-tab": "false" - }, - "enable_features": [ - "SidePanelCompanion", - "SidePanelCompanionChromeOS", - "VisualQuerySuggestions" - ], - "disable_features": [ - "SideSearch" - ] - } - ] - } - ], - "SidePanelFlyoverAnimation": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "SidePanelFlyoverAnimation" - ] - } - ] - } - ], - "SidePanelPinningWithResponsiveToolbar": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "EnabledWithSidePanelPinning", - "enable_features": [ - "IPH_SidePanelGenericPinnableFeature", - "ResponsiveToolbar", - "SidePanelPinning" - ] - }, - { - "name": "EnabledWithoutSidePanelPinning", - "enable_features": [ - "ResponsiveToolbar" + "SigninLevelUpButton" ] } ] @@ -22658,7 +21370,8 @@ { "name": "Enabled", "params": { - "en_site_id": "o2YBX3ZJc0tK1KeaPYj0UveLWhmf" + "en_site_id": "o2YBX3ZJc0tK1KeaPYj0UveLWhmf", + "probability": "1.0" }, "enable_features": [ "ChromeAndroidIdentitySurveyBookmarkPromo" @@ -22676,7 +21389,8 @@ { "name": "Enabled", "params": { - "en_site_id": "HhgAhQYhw0tK1KeaPYj0NeTaRKBh" + "en_site_id": "HhgAhQYhw0tK1KeaPYj0NeTaRKBh", + "probability": "1.0" }, "enable_features": [ "ChromeAndroidIdentitySurveyFirstRun" @@ -22694,7 +21408,8 @@ { "name": "Enabled", "params": { - "en_site_id": "DujcsCGkZ0tK1KeaPYj0RGm9FgKX" + "en_site_id": "DujcsCGkZ0tK1KeaPYj0RGm9FgKX", + "probability": "1.0" }, "enable_features": [ "ChromeAndroidIdentitySurveyNtpAccountAvatarTap" @@ -22712,7 +21427,8 @@ { "name": "Enabled", "params": { - "en_site_id": "15CWgMniG0tK1KeaPYj0RkWoZ4B9" + "en_site_id": "15CWgMniG0tK1KeaPYj0RkWoZ4B9", + "probability": "1.0" }, "enable_features": [ "ChromeAndroidIdentitySurveyNtpPromo" @@ -22730,7 +21446,8 @@ { "name": "Enabled", "params": { - "en_site_id": "yirfCKnhD0tK1KeaPYj0P9BTzPNw" + "en_site_id": "yirfCKnhD0tK1KeaPYj0P9BTzPNw", + "probability": "1.0" }, "enable_features": [ "ChromeAndroidIdentitySurveyNtpSigninButton" @@ -22748,7 +21465,8 @@ { "name": "Enabled", "params": { - "en_site_id": "36F2N72TP0tK1KeaPYj0SdXcHEJ4" + "en_site_id": "36F2N72TP0tK1KeaPYj0SdXcHEJ4", + "probability": "1.0" }, "enable_features": [ "ChromeAndroidIdentitySurveyWeb" @@ -22776,83 +21494,6 @@ ] } ], - "SimpleCachePrioritizedCaching": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SimpleCachePrioritizedCaching" - ] - } - ] - } - ], - "SingleCaCertVerificationPhase1": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SingleCaCertVerificationPhase1" - ] - } - ] - } - ], - "SingleCaCertVerificationPhase2": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SingleCaCertVerificationPhase2" - ] - } - ] - } - ], - "SingleNTPRemoveExtraNTPs": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_SingleNTP_RemoveExtraNTP", - "enable_features": [ - "RemoveExcessNTPs", - "SingleNTP" - ] - }, - { - "name": "Enabled_SingleNTP", - "enable_features": [ - "SingleNTP" - ] - }, - { - "name": "Enabled_RemoveExtraNTP", - "enable_features": [ - "RemoveExcessNTPs" - ] - } - ] - } - ], "SingleVideoFrameRateThrottling": [ { "platforms": [ @@ -22872,27 +21513,6 @@ ] } ], - "SiteInstanceGroupsForDataUrls": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SiteInstanceGroupsForDataUrls" - ] - } - ] - } - ], "SkiaGraphite": [ { "platforms": [ @@ -22943,25 +21563,42 @@ "min_path_size_for_msaa": "32" }, "enable_features": [ - "SkiaGraphiteSmallPathAtlas" + "SkiaGraphiteSmallPathAtlas" + ] + } + ] + } + ], + "Skills": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SkillsEnabled" ] } ] } ], - "Skills": [ + "SkillsAutocomplete": [ { "platforms": [ "chromeos", - "linux", "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20260401", "enable_features": [ - "SkillsEnabled" + "SkillsAutocomplete" ] } ] @@ -22982,11 +21619,10 @@ ] } ], - "SkipIPCChannelPausingForNonGuestsStudy": [ + "SkipImageClassificationScoringForNonPageLoadTriggers": [ { "platforms": [ "android", - "android_webview", "chromeos", "linux", "mac", @@ -22994,31 +21630,24 @@ ], "experiments": [ { - "name": "Enabled_20251030", - "params": { - "internal_webui_only": "false" - }, + "name": "Enabled", "enable_features": [ - "SkipIPCChannelPausingForNonGuests" + "SkipImageClassificationScoringForNonPageLoadTriggers" ] } ] } ], - "SkipImageClassificationScoringForNonPageLoadTriggers": [ + "SkipMediaCodecReallocation": [ { "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "SkipImageClassificationScoringForNonPageLoadTriggers" + "SkipMediaCodecReallocation" ] } ] @@ -23062,36 +21691,6 @@ ] } ], - "SkyVaultGA": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_SkyVaultV2", - "enable_features": [ - "SkyVaultV2" - ] - } - ] - } - ], - "SkyVaultTTBeta": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_SkyVault", - "enable_features": [ - "SkyVault" - ] - } - ] - } - ], "SlopBucket": [ { "platforms": [ @@ -23356,27 +21955,6 @@ ] } ], - "StaticStorageQuota": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "StaticStorageQuota" - ] - } - ] - } - ], "StickyActivationTest3": [ { "platforms": [ @@ -23439,24 +22017,6 @@ ] } ], - "StringWidthCache": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "StringWidthCache" - ] - } - ] - } - ], "StructuredCloningForMessaging": [ { "platforms": [ @@ -23493,24 +22053,6 @@ ] } ], - "SuppressMemoryListeners": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_Win_Cros", - "params": { - "suppress_memory_listeners_mask": "0000000200000200000000000000000000000000000000000" - }, - "enable_features": [ - "SuppressMemoryListeners" - ] - } - ] - } - ], "SuppressesNetworkActivitiesOnSlowNetwork": [ { "platforms": [ @@ -23552,11 +22094,28 @@ ] } ], + "SymphoniaAdditionalCodecs": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SymphoniaPcmDecoding", + "SymphoniaVorbisDecoding" + ] + } + ] + } + ], "SymphoniaAudioDecoding": [ { "platforms": [ - "android", - "android_webview", "chromeos", "linux", "mac", @@ -23633,6 +22192,26 @@ ] } ], + "SyncInvalidationsBypassScheduler": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncInvalidationsBypassScheduler" + ] + } + ] + } + ], "SyncRecordDeviceStatisticsMetrics": [ { "platforms": [ @@ -23723,63 +22302,6 @@ ] } ], - "SysUiHoldbackStudy": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Default", - "disable_features": [ - "SysUiShouldHoldbackGifRecording", - "SysUiShouldHoldbackTaskManagement" - ] - }, - { - "name": "SysUiHoldbackStudy", - "enable_features": [ - "SysUiShouldHoldbackGifRecording", - "SysUiShouldHoldbackTaskManagement" - ] - }, - { - "name": "NoFirstPartyIntegrations", - "enable_features": [ - "SysUiShouldHoldbackTaskManagement" - ], - "disable_features": [ - "SysUiShouldHoldbackGifRecording" - ] - } - ] - } - ], - "SysUiHoldbackStudyM129": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Default", - "disable_features": [ - "SysUiShouldHoldbackDriveIntegration", - "SysUiShouldHoldbackFocusMode", - "SysUiShouldHoldbackForest" - ] - }, - { - "name": "EnrolledInHoldback", - "enable_features": [ - "SysUiShouldHoldbackDriveIntegration", - "SysUiShouldHoldbackFocusMode", - "SysUiShouldHoldbackForest" - ] - } - ] - } - ], "SystemEmojiPickerGIFSupportByDefault": [ { "platforms": [ @@ -23795,23 +22317,6 @@ ] } ], - "SystemSignalCollectionImprovementEnabled": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SystemSignalCollectionImprovementEnabled" - ] - } - ] - } - ], "TLSTrustAnchorIDs": [ { "platforms": [ @@ -23838,11 +22343,10 @@ ] } ], - "TabAudioMuting": [ + "TabGroupHoverCards": [ { "platforms": [ "chromeos", - "fuchsia", "linux", "mac", "windows" @@ -23850,21 +22354,14 @@ "experiments": [ { "name": "Enabled", - "params": { - "availability": "any", - "event_trigger": "name:tab_audio_muting_iph_triggered;comparator:==0;window:120;storage:365", - "event_used": "name:tab_audio_muting_toggle_viewed;comparator:==0;window:120;storage:365", - "session_rate": "==0" - }, "enable_features": [ - "IPH_TabAudioMuting", - "TabAudioMuting" + "TabGroupHoverCards" ] } ] } ], - "TabGroupInteractionsDesktop": [ + "TabGroupInteractionsDesktop2": [ { "platforms": [ "chromeos", @@ -23951,46 +22448,6 @@ ] } ], - "TabModelInitFixes": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabModelInitFixes" - ] - } - ] - } - ], - "TabSearchInProductHelp": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "TabSearchIPH", - "params": { - "availability": "any", - "event_trigger": "name:tab_search_iph_tgr;comparator:==0;window:90;storage:360", - "event_used": "name:tab_search_opened;comparator:==0;window:90;storage:360", - "session_rate": "<3" - }, - "enable_features": [ - "IPH_TabSearch" - ] - } - ] - } - ], "TabStorageSqlitePrototype": [ { "platforms": [ @@ -24010,50 +22467,16 @@ { "platforms": [ "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabstripDeclutter" - ] - } - ] - } - ], - "TailoredSecurityIntegration": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "TailoredSecurityIntegration", - "enable_features": [ - "TailoredSecurityIntegration" - ] - } - ] - } - ], - "TailoredSecurityIntegrationAndroid": [ - { - "platforms": [ - "android" + "fuchsia", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled_20220302", + "name": "Enabled", "enable_features": [ - "TailoredSecurityIntegration" + "TabstripDeclutter" ] } ] @@ -24067,29 +22490,52 @@ "experiments": [ { "name": "Enabled_20260216", - "params": { - "choice_screen_surface": "all" - }, "enable_features": [ - "Taiyaki" + "TaiyakiAllSurfaces" ] } ] } ], - "TextInputClientNestedLoop": [ + "TcpSocketPoolProxyLimit": [ { "platforms": [ - "mac" + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "EnabledWithEventMask", + "name": "Enabled_64", + "params": { + "TcpSocketPoolProxyLimitNormal": "64", + "TcpSocketPoolProxyLimitWebSocket": "64" + }, + "enable_features": [ + "TcpSocketPoolProxyLimit" + ] + }, + { + "name": "Enabled_128", + "params": { + "TcpSocketPoolProxyLimitNormal": "128", + "TcpSocketPoolProxyLimitWebSocket": "128" + }, + "enable_features": [ + "TcpSocketPoolProxyLimit" + ] + }, + { + "name": "Enabled_256", "params": { - "enable_event_mask": "true" + "TcpSocketPoolProxyLimitNormal": "256", + "TcpSocketPoolProxyLimitWebSocket": "256" }, "enable_features": [ - "TextInputClientUseNestedLoop" + "TcpSocketPoolProxyLimit" ] } ] @@ -24232,6 +22678,26 @@ ] } ], + "ThrottleSendingCustomUserTimings": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ThrottleSendingCustomUserTimings" + ] + } + ] + } + ], "TokenHandleRefactoring": [ { "platforms": [ @@ -24512,29 +22978,6 @@ ] } ], - "TrustTokenOriginTrial": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "TrustTokenOperationsRequiringOriginTrial": "all-operations-require-origin-trial" - }, - "enable_features": [ - "TrustTokens" - ] - } - ] - } - ], "UMA-Pseudo-Metrics-Effect-Injection-25-Percent": [ { "platforms": [ @@ -24623,13 +23066,9 @@ ] } ], - "UnlockDuringGpuImageOperations": [ + "UnoPhase2Desktop": [ { "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", "linux", "mac", "windows" @@ -24638,13 +23077,15 @@ { "name": "Enabled", "enable_features": [ - "UnlockDuringGpuImageOperations" + "IPH_SignInBenefits", + "ReplaceSyncPromosWithSignInPromos", + "SyncEnableContactInfoDataTypeForCustomPassphraseUsers" ] } ] } ], - "UnoPhase2Desktop": [ + "UnoPhase2DesktopNewSignin": [ { "platforms": [ "linux", @@ -24652,30 +23093,11 @@ "windows" ], "experiments": [ - { - "name": "EnabledWithExplicitSigninForExtensionsAndBookmarks", - "params": { - "ExplicitSigninForBookmarks": "true", - "ExplicitSigninForExtensions": "true" - }, - "enable_features": [ - "ForcedDiceMigration", - "IPH_SignInBenefits", - "ReplaceSyncPromosWithSignInPromos", - "SyncEnableContactInfoDataTypeForCustomPassphraseUsers" - ] - }, { "name": "Enabled", - "params": { - "ExplicitSigninForBookmarks": "false", - "ExplicitSigninForExtensions": "false" - }, "enable_features": [ - "ForcedDiceMigration", - "IPH_SignInBenefits", - "ReplaceSyncPromosWithSignInPromos", - "SyncEnableContactInfoDataTypeForCustomPassphraseUsers" + "IPH_SignInBenefitsNewSignin", + "ReplaceSyncPromosWithSigninPromosNewSignin" ] } ] @@ -24768,21 +23190,6 @@ ] } ], - "UploadOfficeToCloud": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UploadOfficeToCloud" - ] - } - ] - } - ], "UseBoringSSLForRandBytes": [ { "platforms": [ @@ -24869,16 +23276,22 @@ ] } ], - "UseEncryptedReportingPipelineToReportArcAppInstallEvents": [ + "UseDynamicBackingAllocations": [ { "platforms": [ - "chromeos" + "android", + "android_webview", + "chromeos", + "fuchsia", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "UseEncryptedReportingPipelineToReportArcAppInstallEvents" + "UseDynamicBackingAllocations" ] } ] @@ -25001,6 +23414,21 @@ ] } ], + "UseSimpleScheduler": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "UseSimpleScheduler" + ] + } + ] + } + ], "UseSmartRefForGPUFenceHandle": [ { "platforms": [ @@ -25041,6 +23469,27 @@ ] } ], + "UseStrongRefToSharedImageInterface": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "UseStrongRefToSharedImageInterface" + ] + } + ] + } + ], "UseSurfaceViewForThinWebView": [ { "platforms": [ @@ -25161,26 +23610,6 @@ ] } ], - "V8DisableScavengerUpdatesAllocationLimit": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "disable_features": [ - "V8Flag_scavenger_updates_allocation_limit" - ] - } - ] - } - ], "V8EnforceGlobalHeapLimit": [ { "platforms": [ @@ -25219,29 +23648,6 @@ ] } ], - "V8ExternalMemoryAccountedInGlobalLimit": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "external_memory_max_growing_factor": "1.3" - }, - "enable_features": [ - "V8Flag_external_memory_accounted_in_global_limit" - ] - } - ] - } - ], "V8HighEndAndroid": [ { "platforms": [ @@ -25261,71 +23667,6 @@ ] } ], - "V8IneffectiveMarkCompact": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "HighSizeThreshold", - "params": { - "ineffective_gc_size_threshold": "0.95" - }, - "enable_features": [ - "V8Flag_detect_ineffective_gcs_near_heap_limit" - ] - } - ] - } - ], - "V8LargePagePool": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "V8Flag_large_page_pool" - ] - } - ] - } - ], - "V8LateHeapLimitCheck": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "V8Flag_late_heap_limit_check" - ] - } - ] - } - ], "V8ManagedZoneMemory": [ { "platforms": [ @@ -25395,53 +23736,16 @@ "android", "android_webview", "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "V8Flag_new_old_generation_heap_size" - ] - } - ] - } - ], - "V8NoTrimDescriptorArray": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", + "fuchsia", "linux", "mac", "windows" ], "experiments": [ { - "name": "NoTrimWithStack", - "enable_features": [ - "V8Flag_trim_descriptor_arrays_in_gc" - ], - "disable_features": [ - "V8Flag_trim_descriptor_arrays_in_gc_with_stack" - ] - }, - { - "name": "NoTrim", - "disable_features": [ - "V8Flag_trim_descriptor_arrays_in_gc", - "V8Flag_trim_descriptor_arrays_in_gc_with_stack" - ] - }, - { - "name": "Default", + "name": "Enabled", "enable_features": [ - "V8Flag_trim_descriptor_arrays_in_gc", - "V8Flag_trim_descriptor_arrays_in_gc_with_stack" + "V8Flag_new_old_generation_heap_size" ] } ] @@ -25697,30 +24001,6 @@ ] } ], - "VariationsStickyPersistence": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "PersistViaCommitWrite_20260107", - "params": { - "persistence_type": "commit" - }, - "enable_features": [ - "VariationsStickyPersistence" - ] - } - ] - } - ], "VerifyDidCommitParams": [ { "platforms": [ @@ -25835,16 +24115,21 @@ ] } ], - "VideoConferenceDLCUIRollout": [ + "VerticalTabsLaunch": [ { "platforms": [ - "chromeos" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "VcDlcUi" + "IPH_VerticalTabstripTutorialFeature", + "VerticalTabsLaunch", + "VerticalTabsNewBadge" ] } ] @@ -25934,21 +24219,6 @@ ] } ], - "VulkanV2": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "VulkanV2", - "enable_features": [ - "VulkanV2" - ] - } - ] - } - ], "WebApkBackupAndRestore": [ { "platforms": [ @@ -26010,6 +24280,24 @@ ] } ], + "WebAuthnOpportunisticRetrieval": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebAuthnOpportunisticRetrieval" + ] + } + ] + } + ], "WebContentsDiscard": [ { "platforms": [ @@ -26139,25 +24427,6 @@ ] } ], - "WebProtectDlpScanPastedImages": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DlpScanPastedImages" - ] - } - ] - } - ], "WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride": [ { "platforms": [ @@ -26385,26 +24654,6 @@ ] } ], - "WebRTC-DataChannelMessageInterleaving": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebRTC-DataChannelMessageInterleaving" - ] - } - ] - } - ], "WebRTC-EncoderSpeed": [ { "platforms": [ @@ -26649,49 +24898,6 @@ ] } ], - "WebRTC-Video-H26xPacketBuffer": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebRTC-Video-H26xPacketBuffer" - ] - } - ] - } - ], - "WebRTC-Video-ReceiveAndSendH265": [ - { - "platforms": [ - "android", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_SendReceive", - "enable_features": [ - "WebRtcAllowH265Receive", - "WebRtcAllowH265Send" - ] - }, - { - "name": "Enabled_ReceiveOnly", - "enable_features": [ - "WebRtcAllowH265Receive" - ] - } - ] - } - ], "WebRTC-Vp9ExternalRefCtrl": [ { "platforms": [ @@ -26903,21 +25109,6 @@ ] } ], - "WebUITabStripDeprecation": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Treatment", - "disable_features": [ - "WebUITabStrip" - ] - } - ] - } - ], "WebViewBypassProvisionalCookieManager": [ { "platforms": [ @@ -26933,21 +25124,6 @@ ] } ], - "WebViewCacheBoundaryInterfaceMethods": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebViewCacheBoundaryInterfaceMethods" - ] - } - ] - } - ], "WebViewDeferStartupGmsCalls": [ { "platforms": [ @@ -27140,6 +25316,21 @@ ] } ], + "WebViewNonBlockingCookieStoreHandoff": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled_20260326", + "enable_features": [ + "WebViewNonBlockingCookieStoreHandoff" + ] + } + ] + } + ], "WebViewOptInToGmsBindServiceOptimization": [ { "platforms": [ @@ -27155,6 +25346,21 @@ ] } ], + "WebViewPassNullFaviconToOnPageStarted": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebViewPassNullFaviconToOnPageStarted" + ] + } + ] + } + ], "WebViewPersistentMetricsInNoBackupDir": [ { "platforms": [ @@ -27266,7 +25472,7 @@ ] } ], - "WebViewSpareRendererProcessPriority": [ + "WebViewSkipFaviconJavaCopyUntilNeeded": [ { "platforms": [ "android_webview" @@ -27274,45 +25480,45 @@ "experiments": [ { "name": "Enabled", - "params": { - "not-perceptible-binding": "true" - }, "enable_features": [ - "SpareRendererProcessPriority" + "WebViewSkipFaviconJavaCopyUntilNeeded" ] } ] } ], - "WebViewStartupTasksExperiment": [ + "WebViewSpareRendererProcessPriority": [ { "platforms": [ "android_webview" ], "experiments": [ { - "name": "Enabled_Phase3", + "name": "Enabled", + "params": { + "not-perceptible-binding": "true" + }, "enable_features": [ - "WebViewStartupTasksYieldToNative" - ], - "disable_features": [ - "WebViewUseStartupTasksLogic", - "WebViewUseStartupTasksLogicP2" + "SpareRendererProcessPriority" ] } ] } ], - "WebViewStopBrowserStartupInIsMultiProcessEnabled": [ + "WebViewStartupTasksExperiment": [ { "platforms": [ "android_webview" ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_Phase3", "enable_features": [ - "WebViewStopBrowserStartupInIsMultiProcessEnabled" + "WebViewStartupTasksYieldToNative" + ], + "disable_features": [ + "WebViewUseStartupTasksLogic", + "WebViewUseStartupTasksLogicP2" ] } ] @@ -27396,21 +25602,6 @@ ] } ], - "WebXrEnableCardboard": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "Cardboard" - ] - } - ] - } - ], "WebrtcEncodeReadbackOptimization": [ { "platforms": [ @@ -27569,21 +25760,6 @@ ] } ], - "WindowsSystemTracing": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WindowsSystemTracing" - ] - } - ] - } - ], "XMLParsingRustNonXslt": [ { "platforms": [ @@ -27743,26 +25919,6 @@ ] } ], - "ZeroStateSuggestionsV2": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "ZSSMaxPinnedPagesForTriggeringSuggestions": "10" - }, - "enable_features": [ - "ZeroStateSuggestionsV2" - ] - } - ] - } - ], "ZstdForCrossSiteSpeculationRulesPrefetch": [ { "platforms": [ diff --git a/tools/under-control/src/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/tools/under-control/src/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom index cb23d2adf..12037afe9 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 @@ -3651,7 +3651,7 @@ enum WebFeature { kEligibleForImageLoadingPrioritizationFix = 4376, kExecutedNonTrivialJavaScriptURL = 4377, kStorageBucketsOpen = 4378, - kPerformanceEntryBufferSwaps = 4379, + kOBSOLETE_PerformanceEntryBufferSwaps = 4379, kClearPerformanceEntries = 4380, kViewportDependentLazyLoadedImageWithoutSizesAttribute = 4381, kV8MediaStreamTrack_ApplyConstraints_Method = 4382, @@ -4686,7 +4686,7 @@ enum WebFeature { kDOMWindowOpenPopup = 5377, kFencedFrameDisableUntrustedNetwork = 5378, kFencedFrameNotifyEvent = 5379, - kSharedStorageGetInFencedFrame = 5380, + kOBSOLETE_SharedStorageGetInFencedFrame = 5380, kOBSOLETE_Translator_MeasureInputUsage_Method = 5381, kOBSOLETE_Translator_InputQuota_AttributeGetter = 5382, kAriaNotify = 5383, @@ -5043,7 +5043,7 @@ enum WebFeature { kV8Origin_FromURL_Method = 5727, kV8Origin_Parse_Method = 5728, kExtendedTextMetrics = 5729, - kUseCssSizingProperties = 5730, + kOBSOLETE_UseCssSizingProperties = 5730, kSharedStorageAPIAll = 5731, kGamepadRawInputChangeEventListener = 5732, kLetterSpacingWithMargin = 5733, @@ -5133,6 +5133,57 @@ enum WebFeature { kHTMLInputElementTypeChangedWhileConnected = 5816, kHTMLButtonElementTypeChangedWhileDisconnected = 5817, kHTMLInputElementTypeChangedWhileDisconnected = 5818, + kSynthesizedMiddleClickAnchor = 5819, + kSynthesizedMiddleClickArea = 5820, + kSynthesizedMiddleClickSVGAnchor = 5821, + kWebAuthenticationCspDisallowsRpId = 5822, + kHistoryGoBackWouldSkipAd = 5823, + kHistoryGoForwardWouldSkipAd = 5824, + kHistoryGoBackWouldNotSkipAdDueToSameOriginExclusion = 5825, + kHistoryGoForwardWouldNotSkipAdDueToSameOriginExclusion = 5826, + kSvgFilterPaintedOnLocalFrame = 5827, + kSvgFilterPaintedOnRemoteFrame = 5828, + kSvgFilterPaintedOnWebPlugin = 5829, + kSubtleCryptoEncapsulateKey = 5830, + kSubtleCryptoEncapsulateBits = 5831, + kSubtleCryptoDecapsulateKey = 5832, + kSubtleCryptoDecapsulateBits = 5833, + kCSSDiscardedVarWithValidArgumentGrammar = 5834, + kCSSDiscardedAttrWithValidArgumentGrammar = 5835, + kCSSDiscardedEnvWithValidArgumentGrammar = 5836, + kCSSDiscardedIfWithValidArgumentGrammar = 5837, + kHttpOnlyCookieShadowedByNonHttpOnlyPartitioned = 5838, + kXRMeshDetection = 5839, + kXRFrameDetectedMeshes = 5840, + kCSSLightDarkImage = 5841, + kCSSTimelineLookupFoundNothing = 5842, + kCSSTimelineScopeAttachedMultiple = 5843, + kSVGForeignObjectInImage = 5844, + kSVGForeignObjectDrawnIntoCanvas = 5845, + kHTMLPatching = 5846, + kHTMLStreaming = 5847, + kHTMLPositionalSetters = 5848, + kLazyLoadVideoLoadingAttributeLazy = 5849, + kLazyLoadVideoLoadingAttributeEager = 5850, + kLazyLoadAudioLoadingAttributeLazy = 5851, + kLazyLoadAudioLoadingAttributeEager = 5852, + kResourceTimingWorkerMatchedSourceType = 5853, + kResourceTimingWorkerFinalSourceType = 5854, + kNoVarySearchWithBooleanParams = 5855, + kDataUrlWorkerBroadcastChannel = 5856, + kNoscriptMarkupWithScriptingDisabledTemplate = 5857, + kNoscriptMarkupWithScriptingDisabledIframeSandbox = 5858, + kNoscriptMarkupWithScriptingDisabledXHR = 5859, + kNoscriptMarkupWithScriptingDisabledDOMParser = 5860, + kNoscriptMarkupWithScriptingDisabledNoBrowsingContext = 5861, + kSingleAxisScroller = 5862, + kV8HoleyArrayReadthrough = 5863, + kLanguageModel_Create_Temperature = 5864, + kLanguageModel_Create_TopK = 5865, + kHTMLInCanvas = 5866, + kConnectionAllowlist = 5867, + kStyleTypeModule = 5868, + kShadowRootAdoptedStyleSheets = 5869, // 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 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 ec6f13d39..c63778351 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 @@ -5,6 +5,7 @@ module blink.mojom; import "mojo/public/mojom/base/string16.mojom"; +import "mojo/public/mojom/base/time.mojom"; import "skia/public/mojom/skcolor.mojom"; import "third_party/blink/public/mojom/css/preferred_color_scheme.mojom"; import "third_party/blink/public/mojom/css/preferred_contrast.mojom"; @@ -137,7 +138,7 @@ struct WebPreferences { bool shrinks_standalone_images_to_fit; bool text_areas_are_resizable; bool allow_scripts_to_close_windows; - bool allow_window_focus_without_user_gesture; + bool allow_unrestricted_window_focus; bool remote_fonts_enabled; bool javascript_can_access_clipboard; // We don't use dns_prefetching_enabled to disable DNS prefetching. Instead, @@ -518,6 +519,14 @@ struct WebPreferences { // devtools extension panels. bool ai_ot_apis_enabled = false; + // Whether IgnoreDuplicateNavs is enabled. Controlled by WebView settings on + // WebView and by `kIgnoreDuplicateNavs` feature flag everywhere. + bool ignore_duplicate_nav_enabled = false; + + // Threshold in ms for IgnoreDuplicateNavs. Controlled by WebView settings on + // WebView and by `kDuplicateNavThreshold` feature param everywhere. + mojo_base.mojom.TimeDelta duplicate_nav_threshold = default; + [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/cssom/css_color_value.idl b/tools/under-control/src/third_party/blink/renderer/core/css/cssom/css_color_value.idl index 07bc75e2c..a8e5e8abe 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/css/cssom/css_color_value.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/css/cssom/css_color_value.idl @@ -10,5 +10,5 @@ RuntimeEnabled=CSSColorTypedOM ] interface CSSColorValue { - [RaisesException, NewObject, Exposed=Window, CallWith=ExecutionContext] static (CSSColorValue or CSSStyleValue) parse(USVString cssText); + [RaisesException, NewObject, Exposed=Window, CallWith=ScriptState] static (CSSColorValue or CSSStyleValue) parse(USVString cssText); }; 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 e5a6fe329..2fa9205c1 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 @@ -169,8 +169,8 @@ MediaQueryParser::MediaQueryParser(ParserType parser_type, fake_context_(*MakeGarbageCollected( kHTMLStandardMode, SecureContextMode::kInsecureContext, - DynamicTo(execution_context) - ? DynamicTo(execution_context)->document() + IsA(execution_context) + ? To(*execution_context).document() : nullptr)) {} namespace { @@ -319,7 +319,7 @@ AtomicString MediaQueryParser::ConsumeAllowedName( } AtomicString name = stream.Peek().Value().ToAtomicString(); if (!feature_set.IsCaseSensitive(name)) { - name = name.LowerASCII(); + name = name.ToAsciiLower(); } if (!feature_set.IsAllowed(name)) { return g_null_atom; 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 e684c1f3d..0574e135b 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 @@ -28,10 +28,16 @@ interface mixin ChildNode { [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 = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void beforeHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void beforeHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void afterHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void afterHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void replaceWithHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void replaceWithHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamBeforeHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamBeforeHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamAfterHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamAfterHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamReplaceWithHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamReplaceWithHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); }; 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 6e22578ec..4be4d668e 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 @@ -118,21 +118,18 @@ dictionary SetHTMLUnsafeOptions { [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 - // 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 = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamAppendHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamPrependHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamAppendHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamPrependHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void appendHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void appendHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void prependHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] 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 = {}); 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 bf47ec926..99cba0fa9 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 @@ -80,7 +80,10 @@ interface mixin GlobalEventHandlers { attribute EventHandler onmouseover; attribute EventHandler onmouseup; attribute EventHandler onmousewheel; - [RuntimeEnabled=OverscrollGestures] attribute EventHandler onoverscroll; + [RuntimeEnabled=OverscrollGestures] attribute EventHandler onoverscrollcancel; + [RuntimeEnabled=OverscrollGestures] attribute EventHandler onoverscrollchanging; + [RuntimeEnabled=OverscrollGestures] attribute EventHandler onoverscrollend; + [RuntimeEnabled=OverscrollGestures] attribute EventHandler onoverscrollstart; attribute EventHandler onpause; attribute EventHandler onplay; attribute EventHandler onplaying; 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 e877eac34..137dce945 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,8 +48,6 @@ 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. @@ -61,19 +59,18 @@ interface ShadowRoot : DocumentFragment { [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 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 = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamAppendHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamAppendHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamPrependHTMLUnsafe(optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, CallWith=ScriptState, RaisesException, MeasureAs=HTMLStreaming] WritableStream streamPrependHTML(optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void appendHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void appendHTMLUnsafe((TrustedHTML or DOMString) html, optional (SetHTMLUnsafeOptions or TrustedParserOptions) options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] void prependHTML(DOMString html, optional SetHTMLOptions options = {}); + [RuntimeEnabled=NewHTMLSettingMethods, RaisesException, MeasureAs=HTMLPositionalSetters] 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 237d5582c..2076b397a 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,7 +15,6 @@ 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/events/event_type_names.json5 b/tools/under-control/src/third_party/blink/renderer/core/events/event_type_names.json5 index 75b56f14b..ce1a9c358 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 @@ -219,7 +219,10 @@ "online", "open", "orientationchange", - "overscroll", + "overscrollcancel", + "overscrollchanging", + "overscrollend", + "overscrollstart", "pagehide", "pagereveal", "pageshow", diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event.idl index 372123e0e..f2446be19 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event.idl @@ -51,4 +51,7 @@ enum SecurityPolicyViolationEventDisposition { // Contains the hashes of scripts that were blocked from being run through // eval due to unsafe-eval not being set. [RuntimeEnabled=CSPHashesV1] readonly attribute DOMString evalHash; + // Contains the hash of the URL of the script that was blocked from being + // loaded. + [RuntimeEnabled=CSPHashesV1] readonly attribute DOMString urlHash; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event_init.idl b/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event_init.idl index 090daa555..7f02f27ba 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/security_policy_violation_event_init.idl @@ -25,4 +25,5 @@ dictionary SecurityPolicyViolationEventInit : EventInit { DOMString violatedDirective = ""; [RuntimeEnabled=CSPHashesV1] DOMString evalHash; + [RuntimeEnabled=CSPHashesV1] DOMString urlHash; }; 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 f5bdcb817..b5a7e1b17 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 @@ -35,9 +35,6 @@ #include #include "base/command_line.h" -#include "base/debug/alias.h" -#include "base/debug/crash_logging.h" -#include "base/debug/dump_without_crashing.h" #include "base/memory/scoped_refptr.h" #include "base/metrics/histogram_macros.h" #include "base/observer_list.h" @@ -52,7 +49,6 @@ #include "third_party/blink/public/common/fingerprinting_protection/noise_token.h" #include "third_party/blink/public/common/history/session_history_constants.h" #include "third_party/blink/public/common/input/web_input_event.h" -#include "third_party/blink/public/common/input/web_menu_source_type.h" #include "third_party/blink/public/common/page/color_provider_color_maps.h" #include "third_party/blink/public/common/page/page_zoom.h" #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h" @@ -193,6 +189,7 @@ #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/mojom/menu_source_type.mojom-blink.h" #include "ui/base/ui_base_features.h" #include "ui/gfx/geometry/skia_conversions.h" @@ -276,43 +273,43 @@ typedef void (*SetFontFamilyWrapper)(blink::WebSettings*, void SetStandardFontFamilyWrapper(WebSettings* settings, const std::u16string& font, UScriptCode script) { - settings->SetStandardFontFamily(WebString::FromUTF16(font), script); + settings->SetStandardFontFamily(WebString::FromUtf16(font), script); } void SetFixedFontFamilyWrapper(WebSettings* settings, const std::u16string& font, UScriptCode script) { - settings->SetFixedFontFamily(WebString::FromUTF16(font), script); + settings->SetFixedFontFamily(WebString::FromUtf16(font), script); } void SetSerifFontFamilyWrapper(WebSettings* settings, const std::u16string& font, UScriptCode script) { - settings->SetSerifFontFamily(WebString::FromUTF16(font), script); + settings->SetSerifFontFamily(WebString::FromUtf16(font), script); } void SetSansSerifFontFamilyWrapper(WebSettings* settings, const std::u16string& font, UScriptCode script) { - settings->SetSansSerifFontFamily(WebString::FromUTF16(font), script); + settings->SetSansSerifFontFamily(WebString::FromUtf16(font), script); } void SetCursiveFontFamilyWrapper(WebSettings* settings, const std::u16string& font, UScriptCode script) { - settings->SetCursiveFontFamily(WebString::FromUTF16(font), script); + settings->SetCursiveFontFamily(WebString::FromUtf16(font), script); } void SetFantasyFontFamilyWrapper(WebSettings* settings, const std::u16string& font, UScriptCode script) { - settings->SetFantasyFontFamily(WebString::FromUTF16(font), script); + settings->SetFantasyFontFamily(WebString::FromUtf16(font), script); } void SetMathFontFamilyWrapper(WebSettings* settings, const std::u16string& font, UScriptCode script) { - settings->SetMathFontFamily(WebString::FromUTF16(font), script); + settings->SetMathFontFamily(WebString::FromUtf16(font), script); } // If |scriptCode| is a member of a family of "similar" script codes, returns @@ -547,20 +544,6 @@ void WebViewImpl::SetNoStatePrefetchClient( } void WebViewImpl::CloseWindow() { -#if !(BUILDFLAG(IS_ANDROID) || \ - (BUILDFLAG(IS_CHROMEOS) && defined(ARCH_CPU_ARM64))) - auto close_task_trace = close_task_posted_stack_trace_; - base::debug::Alias(&close_task_trace); - auto close_trace = close_called_stack_trace_; - base::debug::Alias(&close_trace); - auto prev_close_window_trace = close_window_called_stack_trace_; - base::debug::Alias(&prev_close_window_trace); - close_window_called_stack_trace_.emplace(); - auto cur_close_window_trace = close_window_called_stack_trace_; - base::debug::Alias(&cur_close_window_trace); -#endif - SCOPED_CRASH_KEY_BOOL("Bug1499519", "page_exists", !!page_); - // Have the browser process a close request. We should have either a // |local_main_frame_host_remote_| or |remote_main_frame_host_remote_|. // This method will not execute if Close has been called as WeakPtrs @@ -1069,7 +1052,7 @@ WebInputEventResult WebViewImpl::SendContextMenuEvent() { focused_local_frame->GetDocument()->FocusedElement()) focused_element->scrollIntoViewIfNeeded(); return focused_local_frame->GetEventHandler().ShowNonLocatedContextMenu( - nullptr, kMenuSourceKeyboard); + nullptr, ui::mojom::blink::MenuSourceType::kKeyboard); } } @@ -1182,20 +1165,6 @@ Frame* WebViewImpl::FocusedCoreFrame() const { // WebWidget ------------------------------------------------------------------ void WebViewImpl::Close() { -#if !(BUILDFLAG(IS_ANDROID) || \ - (BUILDFLAG(IS_CHROMEOS) && defined(ARCH_CPU_ARM64))) - auto close_task_trace = close_task_posted_stack_trace_; - base::debug::Alias(&close_task_trace); - auto prev_close_trace = close_called_stack_trace_; - base::debug::Alias(&prev_close_trace); - close_called_stack_trace_.emplace(); - auto cur_close_trace = close_called_stack_trace_; - base::debug::Alias(&cur_close_trace); - auto close_window_trace = close_window_called_stack_trace_; - base::debug::Alias(&close_window_trace); -#endif - SCOPED_CRASH_KEY_BOOL("Bug1499519", "page_exists", !!page_); - // Closership is a single relationship, so only 1 call to Close() should // occur. CHECK(page_); @@ -1599,7 +1568,7 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, settings->SetMinimumFontSize(prefs.minimum_font_size); settings->SetMinimumLogicalFontSize(prefs.minimum_logical_font_size); settings->SetDefaultTextEncodingName( - WebString::FromASCII(prefs.default_encoding)); + WebString::FromAscii(prefs.default_encoding)); settings->SetJavaScriptEnabled(prefs.javascript_enabled); settings->SetWebSecurityEnabled(prefs.web_security_enabled); settings->SetLoadsImagesAutomatically(prefs.loads_images_automatically); @@ -1608,8 +1577,8 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, settings->SetDOMPasteAllowed(prefs.dom_paste_enabled); settings->SetTextAreasAreResizable(prefs.text_areas_are_resizable); settings->SetAllowScriptsToCloseWindows(prefs.allow_scripts_to_close_windows); - settings->SetAllowWindowFocusWithoutUserGesture( - prefs.allow_window_focus_without_user_gesture); + settings->SetAllowUnrestrictedWindowFocus( + prefs.allow_unrestricted_window_focus); settings->SetDownloadableBinaryFontsEnabled(prefs.remote_fonts_enabled); settings->SetJavaScriptCanAccessClipboard( prefs.javascript_can_access_clipboard); @@ -1733,24 +1702,24 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, WebSettings::TextTrackKindUserPreference::kDefault); } settings->SetTextTrackBackgroundColor( - WebString::FromASCII(prefs.text_track_background_color)); + WebString::FromAscii(prefs.text_track_background_color)); settings->SetTextTrackTextColor( - WebString::FromASCII(prefs.text_track_text_color)); + WebString::FromAscii(prefs.text_track_text_color)); settings->SetTextTrackTextSize( - WebString::FromASCII(prefs.text_track_text_size)); + WebString::FromAscii(prefs.text_track_text_size)); settings->SetTextTrackTextShadow( - WebString::FromASCII(prefs.text_track_text_shadow)); + WebString::FromAscii(prefs.text_track_text_shadow)); settings->SetTextTrackFontFamily( - WebString::FromASCII(prefs.text_track_font_family)); + WebString::FromAscii(prefs.text_track_font_family)); settings->SetTextTrackFontStyle( - WebString::FromASCII(prefs.text_track_font_style)); + WebString::FromAscii(prefs.text_track_font_style)); settings->SetTextTrackFontVariant( - WebString::FromASCII(prefs.text_track_font_variant)); + WebString::FromAscii(prefs.text_track_font_variant)); settings->SetTextTrackMarginPercentage(prefs.text_track_margin_percentage); settings->SetTextTrackWindowColor( - WebString::FromASCII(prefs.text_track_window_color)); + WebString::FromAscii(prefs.text_track_window_color)); settings->SetTextTrackWindowRadius( - WebString::FromASCII(prefs.text_track_window_radius)); + WebString::FromAscii(prefs.text_track_window_radius)); // Needs to happen before SetDefaultPageScaleLimits below since that'll // recalculate the final page scale limits and that depends on this setting. @@ -1770,7 +1739,7 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, settings->SetDontSendKeyEventsToJavascript( prefs.dont_send_key_events_to_javascript); - settings->SetWebAppScope(WebString::FromASCII(prefs.web_app_scope.spec())); + settings->SetWebAppScope(WebString::FromAscii(prefs.web_app_scope.spec())); #if BUILDFLAG(IS_ANDROID) settings->SetAllowCustomScrollbarInMainFrame(false); @@ -1781,7 +1750,7 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, settings->SetDeviceScaleAdjustment(prefs.device_scale_adjustment); web_view_impl->SetIgnoreViewportTagScaleLimits(prefs.force_enable_zoom); settings->SetDefaultVideoPosterURL( - WebString::FromASCII(prefs.default_video_poster_url.spec())); + WebString::FromAscii(prefs.default_video_poster_url.spec())); settings->SetSupportDeprecatedTargetDensityDPI( prefs.support_deprecated_target_density_dpi); settings->SetWideViewportQuirkEnabled(prefs.wide_viewport_quirk); @@ -2531,8 +2500,10 @@ void WebViewImpl::SetPageLifecycleStateInternal( (new_state->pagehide_dispatch != mojom::blink::PagehideDispatch::kNotDispatched) && !GetPage()->DispatchedPagehideAndStillHidden(); - bool dispatching_pageshow = + last_page_lifecycle_state_update_restored_from_bfcache_ = IsRestoredFromBackForwardCache(old_state, new_state); + bool dispatching_pageshow = + last_page_lifecycle_state_update_restored_from_bfcache_; bool eviction_changed = new_state->eviction_enabled != old_state->eviction_enabled; @@ -2818,11 +2789,9 @@ void ValidatePausedStateConsistency() { if (!window) { continue; } - const bool microtasks_are_paused = window->GetAgent() - ->event_loop() - ->microtask_queue() - ->GetMicrotasksScopeDepth(); - CHECK(!microtasks_are_paused, base::NotFatalUntil::M148); + const bool microtasks_are_paused = + window->GetAgent()->event_loop()->AreMicrotasksPaused(); + CHECK(!microtasks_are_paused, base::NotFatalUntil::M150); } } } @@ -3159,6 +3128,20 @@ void WebViewImpl::DidAccessInitialMainDocument() { local_main_frame_host_remote_->DidAccessInitialMainDocument(); } +void WebViewImpl::DidChangeThemeColor(std::optional theme_color) { + // This is only called for main frames, so the remote must be bound. + CHECK(local_main_frame_host_remote_); + local_main_frame_host_remote_->DidChangeThemeColor(theme_color); +} + +void WebViewImpl::DidChangeBackgroundColor(SkColor4f background_color, + bool color_adjust) { + // This is only called for main frames, so the remote must be bound. + CHECK(local_main_frame_host_remote_); + local_main_frame_host_remote_->DidChangeBackgroundColor(background_color, + color_adjust); +} + #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) // TODO(https://crbug.com/40946306): Add timeouts to the callbacks and consider // queuing requests instead of rejecting them. @@ -3404,6 +3387,10 @@ void WebViewImpl::ResetScaleStateImmediately() { } void WebViewImpl::ResetScrollAndScaleState() { + // Skip scroll restoration when restoring from back-forward cache. + if (last_page_lifecycle_state_update_restored_from_bfcache_) { + return; + } GetPage()->GetVisualViewport().Reset(); auto* main_local_frame = DynamicTo(GetPage()->MainFrame()); @@ -3603,14 +3590,14 @@ void WebViewImpl::UpdateFontRenderingFromRendererPrefs() { #if BUILDFLAG(IS_WIN) // Cache the system font metrics in blink. WebFontRendering::SetMenuFontMetrics( - WebString::FromUTF16(renderer_preferences_.menu_font_family_name), + WebString::FromUtf16(renderer_preferences_.menu_font_family_name), renderer_preferences_.menu_font_height); WebFontRendering::SetSmallCaptionFontMetrics( - WebString::FromUTF16( + WebString::FromUtf16( renderer_preferences_.small_caption_font_family_name), renderer_preferences_.small_caption_font_height); WebFontRendering::SetStatusFontMetrics( - WebString::FromUTF16(renderer_preferences_.status_font_family_name), + WebString::FromUtf16(renderer_preferences_.status_font_family_name), renderer_preferences_.status_font_height); WebFontRendering::SetAntialiasedTextEnabled( renderer_preferences_.should_antialias_text); @@ -3757,10 +3744,10 @@ void WebViewImpl::UpdateRendererPreferences( if (old_accept_languages != renderer_preferences_.accept_languages) { FontCache::AcceptLanguagesChanged( - String::FromUTF8(renderer_preferences_.accept_languages)); + String::FromUtf8(renderer_preferences_.accept_languages)); if (GetPage()) { GetPage()->GetSettings().SetAcceptLanguages( - String::FromUTF8(renderer_preferences_.accept_languages)); + String::FromUtf8(renderer_preferences_.accept_languages)); } } @@ -3915,6 +3902,7 @@ void WebViewImpl::DidCommitLoad(bool is_new_navigation, GetPageScaleConstraintsSet().SetNeedsReset(true); } + last_page_lifecycle_state_update_restored_from_bfcache_ = false; // Give the visual viewport's scroll layer its initial size. GetPage()->GetVisualViewport().MainFrameDidChangeSize(); } @@ -4313,18 +4301,6 @@ void WebViewImpl::DraggableRegionsChanged() { } void WebViewImpl::MojoDisconnected() { -#if !(BUILDFLAG(IS_ANDROID) || \ - (BUILDFLAG(IS_CHROMEOS) && defined(ARCH_CPU_ARM64))) - auto prev_close_task_trace = close_task_posted_stack_trace_; - base::debug::Alias(&prev_close_task_trace); - close_task_posted_stack_trace_.emplace(); - auto cur_close_task_trace = close_task_posted_stack_trace_; - base::debug::Alias(&cur_close_task_trace); - auto close_trace = close_called_stack_trace_; - base::debug::Alias(&close_trace); - auto close_window_trace = close_window_called_stack_trace_; - base::debug::Alias(&close_window_trace); -#endif // This IPC can be called from re-entrant contexts. We can't destroy a // RenderViewImpl while references still exist on the stack, so we dispatch a // non-nestable task. This method is called exactly once by the browser diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/csp/csp_violation_report_body.idl b/tools/under-control/src/third_party/blink/renderer/core/frame/csp/csp_violation_report_body.idl index d63a870ba..3563c5bd0 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/frame/csp/csp_violation_report_body.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/csp/csp_violation_report_body.idl @@ -18,5 +18,7 @@ readonly attribute unsigned short statusCode; readonly attribute unsigned long? lineNumber; readonly attribute unsigned long? columnNumber; + [RuntimeEnabled=CSPHashesV1] readonly attribute DOMString? urlHash; + [RuntimeEnabled=CSPHashesV1] readonly attribute DOMString? evalHash; [CallWith=ScriptState] object toJSON(optional DOMString key); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/location.idl b/tools/under-control/src/third_party/blink/renderer/core/frame/location.idl index 62e54801d..cd85baded 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/frame/location.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/location.idl @@ -42,7 +42,6 @@ [CallWith=Isolate, CrossOrigin, RaisesException, LegacyUnforgeable] void replace(USVString url); [LegacyUnforgeable] void reload(); - // TODO(foolip): |ancestorOrigins| should have [LegacyUnforgeable, SameObject]. [LegacyUnforgeable] readonly attribute DOMStringList ancestorOrigins; [SetterCallWith=Isolate, CrossOrigin=Setter, RaisesException=Setter, LegacyUnforgeable] attribute USVString href; 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 d9d3a09b5..487ddf050 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 @@ -197,8 +197,13 @@ name: "allowScriptsToCloseWindows", initial: false, }, + + // Allows a window to focus itself or other windows programmatically + // without requiring a user gesture. + // This is primarily intended for Isolated Web Apps (IWAs) with the + // to allow them to manage window focus order like native applications. { - name: "allowWindowFocusWithoutUserGesture", + name: "allowUnrestrictedWindowFocus", initial: false, }, diff --git a/tools/under-control/src/third_party/blink/renderer/core/highlight/highlight.idl b/tools/under-control/src/third_party/blink/renderer/core/highlight/highlight.idl index 1b8ba982d..7d8d3edbc 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/highlight/highlight.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/highlight/highlight.idl @@ -15,8 +15,4 @@ enum HighlightType { setlike; attribute long priority; attribute HighlightType type; - // TODO(crbug.com/1344319): Inherit from EventTarget - [RuntimeEnabled = HighlightPointerEvents] void addEventListener(DOMString type, EventListener? listener, optional (AddEventListenerOptions or boolean) options); - [RuntimeEnabled = HighlightPointerEvents] void removeEventListener(DOMString type, EventListener? listener, optional (EventListenerOptions or boolean) options); - [ImplementedAs=dispatchEventForBindings, RaisesException, RuntimeCallStatsCounter=EventTargetDispatchEvent, RuntimeEnabled = HighlightPointerEvents] boolean dispatchEvent(Event event); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/highlight/highlight_pointer_event.idl b/tools/under-control/src/third_party/blink/renderer/core/highlight/highlight_pointer_event.idl deleted file mode 100755 index 4b829f0e5..000000000 --- a/tools/under-control/src/third_party/blink/renderer/core/highlight/highlight_pointer_event.idl +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -dictionary HighlightPointerEventInit : PointerEventInit { - Range? range = null; -}; - -[ - RuntimeEnabled = HighlightPointerEvents, - Exposed = Window -] interface HighlightPointerEvent : PointerEvent { - readonly attribute Range? range; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/element_image.idl b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/element_image.idl new file mode 100755 index 000000000..ad0c5559a --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/element_image.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. + +[RuntimeEnabled=CanvasDrawElement, Exposed=(Window,Worker), Transferable] +interface ElementImage { + // dimensions in canvas output bitmap pixels + readonly attribute unsigned long width; + readonly attribute unsigned long height; + + void close(); +}; 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 33612db4a..5b999adf4 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 @@ -39,7 +39,8 @@ [RuntimeEnabled=CanvasDrawElement] attribute boolean layoutSubtree; [RuntimeEnabled=CanvasDrawElement] attribute EventHandler onpaint; [RuntimeEnabled=CanvasDrawElement] void requestPaint(); - [RuntimeEnabled=CanvasDrawElement, RaisesException] DOMMatrix getElementTransform(Element element, DOMMatrix draw_transform); + [RuntimeEnabled=CanvasDrawElement, RaisesException] DOMMatrix getElementTransform((Element or ElementImage) element, DOMMatrix draw_transform); + [RuntimeEnabled=CanvasDrawElement, RaisesException] ElementImage captureElementImage(Element element); [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/attach_internals_options.idl b/tools/under-control/src/third_party/blink/renderer/core/html/custom/attach_internals_options.idl new file mode 100755 index 000000000..68beea118 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/custom/attach_internals_options.idl @@ -0,0 +1,9 @@ +// Copyright 2026 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Options for HTMLElement.attachInternals(). + +dictionary AttachInternalsOptions { + [RuntimeEnabled=ElementInternalsBehaviors] sequence behaviors; +}; 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 7bf597606..0862cc023 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 @@ -36,5 +36,9 @@ interface ElementInternals { // Access to shadowRoot from custom elements. See crbug.com/1042130 and // https://github.com/w3c/webcomponents/issues/871#issuecomment-672082936 [MeasureAs=ElementInternalsShadowRoot] readonly attribute ShadowRoot? shadowRoot; + + // Platform-provided behaviors. + // https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PlatformProvidedBehaviors/explainer.md + [RuntimeEnabled=ElementInternalsBehaviors] readonly attribute FrozenArray behaviors; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/element_behavior.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/element_behavior.idl new file mode 100755 index 000000000..253ebc95d --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/element_behavior.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. + +// Platform-provided behavior base interface. +// Behaviors can be attached to custom elements via +// attachInternals({ behaviors: [...] }). +// https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PlatformProvidedBehaviors/explainer.md +[ + Exposed=Window, + RuntimeEnabled=ElementInternalsBehaviors +] +interface ElementBehavior { +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_controls_collection.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_controls_collection.idl index 6842382d3..e10a11b79 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_controls_collection.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_controls_collection.idl @@ -24,7 +24,7 @@ [Exposed=Window] interface HTMLFormControlsCollection : HTMLCollection { // inherits length and item() - [ImplementedAs=namedGetter] getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem() + [ImplementedAs=namedGetter, CallWith=ScriptState] getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem() // FIXME: This getter is not in the spec. [ImplementedAs=item] getter Node (unsigned long index); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_element.idl index cbc2e823c..b01826398 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_form_element.idl @@ -41,7 +41,7 @@ readonly attribute long length; [ImplementedAs=item] getter Element (unsigned long index); // FIXME: This getter should not have [NotEnumerable]. - [NotEnumerable] getter (RadioNodeList or Element) (DOMString name); + [NotEnumerable, CallWith=ScriptState] getter (RadioNodeList or Element) (DOMString name); [ImplementedAs=submitFromJavaScript] void submit(); [RaisesException] void requestSubmit(optional HTMLElement? submitter = null); diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_submit_button_behavior.idl b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_submit_button_behavior.idl new file mode 100755 index 000000000..e5df9f442 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/forms/html_submit_button_behavior.idl @@ -0,0 +1,25 @@ +// 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. + +// HTMLSubmitButtonBehavior provides submit button behavior to +// custom elements. +// https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PlatformProvidedBehaviors/explainer.md +[ + Exposed=Window, + RuntimeEnabled=ElementInternalsBehaviors +] +interface HTMLSubmitButtonBehavior : ElementBehavior { + [CallWith=ExecutionContext] constructor(); + + attribute boolean disabled; + [RaisesException] readonly attribute HTMLFormElement? form; + attribute USVString formAction; + attribute DOMString formEnctype; + attribute DOMString formMethod; + attribute boolean formNoValidate; + attribute DOMString formTarget; + [RaisesException] readonly attribute NodeList labels; + attribute DOMString name; + attribute DOMString value; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_element.idl index cae176825..478966600 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_element.idl @@ -30,7 +30,7 @@ [CEReactions] attribute DOMString dir; // user interaction - [CEReactions] attribute (boolean or unrestricted double or DOMString)? hidden; + [CEReactions, GetterCallWith=ScriptState] attribute (boolean or unrestricted double or DOMString)? hidden; [RuntimeCallStatsCounter=HTMLElementClick] void click(); [CEReactions, Reflect] attribute boolean inert; @@ -40,7 +40,7 @@ [CEReactions] attribute boolean spellcheck; [Measure] attribute DOMString autocapitalize; - [RaisesException] ElementInternals attachInternals(); + [RaisesException] ElementInternals attachInternals(optional AttachInternalsOptions options); // EditContext // https://w3c.github.io/edit-context/ diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_script_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_script_element.idl index df559996e..3bb881219 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_script_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_script_element.idl @@ -29,7 +29,7 @@ [CEReactions] attribute boolean async; [CEReactions, Reflect] attribute boolean defer; [CEReactions, Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin; - [CEReactions, RaisesException=Setter] attribute (TrustedScript or DOMString) text; + [CEReactions, RaisesException=Setter, GetterCallWith=ScriptState] attribute (TrustedScript or DOMString) text; [CEReactions, Reflect, ReflectOnly=("", "no-referrer", "no-referrer-when-downgrade", "same-origin", "origin", "strict-origin", "origin-when-cross-origin", "strict-origin-when-cross-origin", "unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString? referrerPolicy; [CEReactions, MeasureAs=PriorityHints, Reflect, ReflectOnly=("low", "auto", "high"), ReflectMissing="auto", ReflectInvalid="auto"] attribute DOMString fetchPriority; 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 77fcf58de..d20304581 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 @@ -48,4 +48,7 @@ // Used by Scoped Element Registries [CEReactions, Reflect, RuntimeEnabled=ScopedCustomElementRegistry] attribute DOMString shadowRootCustomElementRegistry; + + // Used by document patching + [CEReactions, Reflect=for, RuntimeEnabled=DocumentPatching] attribute DOMString htmlFor; }; 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 5b15c36b7..38c0a13eb 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 @@ -6,6 +6,12 @@ [RuntimeEnabled=UserMediaElement, Exposed=Window] interface HTMLUserMediaElement : HTMLElement { [HTMLConstructor] constructor(); + + // Legacy migration support: presence of this attribute indicates the legacy + // behavior. When the 'type' attribute is explicitly defined, the element + // falls back to legacy behavior, the same as the legacy element. + // TODO(crbug.com/493632110): Deprecate `type` attribute once the adoption of + // element is stable. [CEReactions, Reflect] attribute DOMString type; attribute EventHandler onstream; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/track/track_event.idl b/tools/under-control/src/third_party/blink/renderer/core/html/track/track_event.idl index c66e7ed05..d5efce450 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/track/track_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/track/track_event.idl @@ -29,5 +29,5 @@ Exposed=Window ] interface TrackEvent : Event { constructor(DOMString type, optional TrackEventInit eventInitDict = {}); - readonly attribute (VideoTrack or AudioTrack or TextTrack)? track; + [GetterCallWith=ScriptState] readonly attribute (VideoTrack or AudioTrack or TextTrack)? track; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/track/vtt/vtt_cue.idl b/tools/under-control/src/third_party/blink/renderer/core/html/track/vtt/vtt_cue.idl index 1d424d2c9..5a1bbfcde 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/track/vtt/vtt_cue.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/track/vtt/vtt_cue.idl @@ -42,9 +42,9 @@ enum AlignSetting { "start", "center", "end", "left", "right" }; [RuntimeEnabled=WebVTTRegions] attribute VTTRegion? region; attribute DirectionSetting vertical; attribute boolean snapToLines; - attribute (double or AutoKeyword) line; + [GetterCallWith=ScriptState] attribute (double or AutoKeyword) line; // attribute LineAlignSetting lineAlign; - [RaisesException=Setter] attribute (double or AutoKeyword) position; + [RaisesException=Setter, GetterCallWith=ScriptState] attribute (double or AutoKeyword) position; // attribute PositionAlignSetting positionAlign; [RaisesException=Setter] attribute double size; attribute AlignSetting align; diff --git a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl index e1fe1c4ae..a8690b759 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigate_event.idl @@ -10,7 +10,6 @@ readonly attribute NavigationType navigationType; readonly attribute NavigationDestination destination; - [ImplementedAs=canIntercept, RuntimeEnabled=NavigateEventCanTransition] readonly attribute boolean canTransition; readonly attribute boolean canIntercept; readonly attribute boolean userInitiated; readonly attribute boolean hashChange; @@ -19,7 +18,7 @@ readonly attribute DOMString? downloadRequest; readonly attribute any info; [RuntimeEnabled=HasUAVisualTransition] readonly attribute boolean hasUAVisualTransition; - [RuntimeEnabled=NavigateEventSourceElement] readonly attribute Element? sourceElement; + readonly attribute Element? sourceElement; [RaisesException] void intercept(optional NavigationInterceptOptions options = {}); [RaisesException,RuntimeEnabled=NavigateEventDeferCrossDocumentCommit] void deferPageSwap(NavigationDeferPageSwapOptions options); 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 494de5935..39ddb2406 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 @@ -11,7 +11,7 @@ callback NavigationInterceptPrecommitHandler = Promise(NavigationPrec dictionary NavigationInterceptOptions { NavigationInterceptHandler handler; - [RuntimeEnabled=NavigateEventCommitBehavior] NavigationInterceptPrecommitHandler precommitHandler; + NavigationInterceptPrecommitHandler precommitHandler; NavigationFocusReset focusReset; NavigationScrollBehavior scroll; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_precommit_controller.idl b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_precommit_controller.idl index 0b3a0178c..169beffc8 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_precommit_controller.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_precommit_controller.idl @@ -3,10 +3,7 @@ // found in the LICENSE file. // https://wicg.github.io/navigation-api/ -[ - Exposed=Window, - RuntimeEnabled=NavigateEventCommitBehavior -] +[Exposed=Window] interface NavigationPrecommitController { [RaisesException] undefined redirect(USVString url, optional NavigationNavigateOptions options = {}); [RaisesException, RuntimeEnabled=NavigateEventAddHandlerOnPrecommit] undefined addHandler(NavigationInterceptHandler handler); diff --git a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_transition.idl b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_transition.idl index 08ba52b26..fb797350e 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_transition.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/navigation_api/navigation_transition.idl @@ -2,7 +2,7 @@ interface NavigationTransition { readonly attribute NavigationType navigationType; readonly attribute NavigationHistoryEntry from; - [RuntimeEnabled=NavigationTransitionDestination] readonly attribute NavigationDestination to; - [CallWith=ScriptState, RuntimeEnabled=NavigateEventCommitBehavior] readonly attribute Promise committed; + readonly attribute NavigationDestination to; + [CallWith=ScriptState] readonly attribute Promise committed; [CallWith=ScriptState] readonly attribute Promise finished; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.idl b/tools/under-control/src/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.idl index 86a8bf25a..c13e627e0 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.idl @@ -15,6 +15,8 @@ [CallWith=ScriptState, MeasureAs=OffscreenCanvasTransferToImageBitmap, RaisesException] ImageBitmap transferToImageBitmap(); [CallWith=ScriptState, MeasureAs=OffscreenCanvasConvertToBlob, RaisesException] Promise convertToBlob(optional ImageEncodeOptions options = {}); + [RuntimeEnabled=CanvasDrawElement, RaisesException] DOMMatrix getElementTransform((Element or ElementImage) element, DOMMatrix draw_transform); + attribute EventHandler oncontextlost; attribute EventHandler oncontextrestored; }; 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 7c2c43c13..dace1a3fb 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 @@ -558,12 +558,11 @@ bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) { } if (trial_name == "WebAppInstallation") { -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_CHROMEOS) return base::FeatureList::IsEnabled(blink::features::kWebAppInstallation); -#else - return false; -#endif + } + + if (trial_name == "InstallElement") { + return base::FeatureList::IsEnabled(blink::features::kInstallElement); } return true; } @@ -647,7 +646,7 @@ bool OriginTrialContext::EnableTrialFromToken( if (token_result.Status() == OriginTrialTokenStatus::kSuccess) { String trial_name = - String::FromUTF8(token_result.ParsedToken()->feature_name()); + String::FromUtf8(token_result.ParsedToken()->feature_name()); OriginTrialFeaturesEnabled result = EnableTrialFromName( trial_name, token_result.ParsedToken()->expiry_time()); trial_status = result.status; @@ -683,7 +682,7 @@ void OriginTrialContext::CacheToken(const String& raw_token, String trial_name = token_result.ParsedToken() && token_result.Status() != OriginTrialTokenStatus::kUnknownTrial - ? String::FromUTF8(token_result.ParsedToken()->feature_name()) + ? String::FromUtf8(token_result.ParsedToken()->feature_name()) : kDefaultTrialName; // Does nothing if key already exists. 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 index fb6821a41..3688aefa0 100755 --- 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 @@ -7,6 +7,7 @@ RuntimeEnabled=OverscrollGestures ] interface OverscrollEvent : Event { constructor(DOMString type, optional OverscrollEventInit eventInitDict = {}); - readonly attribute Element overscrollElement; + readonly attribute Element overscrollTarget; + readonly attribute boolean? overscrolling; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event_init.idl b/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event_init.idl index 78c07223b..2b980b443 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/overscroll/overscroll_event_init.idl @@ -3,5 +3,6 @@ // found in the LICENSE file. dictionary OverscrollEventInit : EventInit { - Element? overscrollElement = null; + Element? overscrollTarget = null; + boolean? overscrolling; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/resize_observer/resize_observer_options.idl b/tools/under-control/src/third_party/blink/renderer/core/resize_observer/resize_observer_options.idl index 60e4bfd7f..f7ac959fb 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/resize_observer/resize_observer_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/resize_observer/resize_observer_options.idl @@ -12,5 +12,4 @@ enum ResizeObserverBoxOptions { dictionary ResizeObserverOptions { ResizeObserverBoxOptions box = "content-box"; - [RuntimeEnabled=CanvasDrawElement] boolean fireOnEveryPaint = false; }; 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 41d53080d..cd7ffbc31 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 @@ -4,11 +4,14 @@ // https://webmachinelearning.github.io/webmcp/#model-context-container +dictionary ModelContextRegisterToolOptions { + AbortSignal signal; +}; + [ Exposed=Window, SecureContext, RuntimeEnabled=WebMCP ] interface ModelContext { - [CallWith=ScriptState, RaisesException, MeasureAs=ModelContextRegisterTool] undefined registerTool(ModelContextTool tool); - [RaisesException] undefined unregisterTool(DOMString name); + [CallWith=ScriptState, RaisesException, MeasureAs=ModelContextRegisterTool] undefined registerTool(ModelContextTool tool, optional ModelContextRegisterToolOptions options = {}); }; 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 cd54214b6..f2f381bf2 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 @@ -12,15 +12,12 @@ dictionary ExecuteToolOptions { AbortSignal signal; }; -callback ToolsChangedCallback = void (); - [ RuntimeEnabled=WebMCPTesting ] 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/timing/profiler_sample.idl b/tools/under-control/src/third_party/blink/renderer/core/timing/profiler_sample.idl index 15d90dc8a..c7565e809 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/timing/profiler_sample.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/timing/profiler_sample.idl @@ -9,5 +9,5 @@ enum ProfilerMarker { "gc", "layout", "paint", "script", "style" }; dictionary ProfilerSample { required DOMHighResTimeStamp timestamp; unsigned long long stackId; - [RuntimeEnabled=ExperimentalJSProfilerMarkers, CrossOriginIsolated] ProfilerMarker marker; + ProfilerMarker marker; }; 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 index 7f796e1ab..8e2a8fc5e 100755 --- 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 @@ -4,7 +4,7 @@ [ Exposed=(Window, Worker), - RuntimeEnabled=DocumentPatching + RuntimeEnabled=TrustedTypesCreateParserOptions ] interface TrustedParserOptions { readonly attribute (Sanitizer or SanitizerConfig or SanitizerPresets) sanitizer; 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 533a9fe0e..fb52e404b 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 @@ -12,5 +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); + [RaisesException, RuntimeEnabled=TrustedTypesCreateParserOptions] TrustedParserOptions createParserOptions(SetHTMLUnsafeOptions input); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/workers/shared_worker.idl b/tools/under-control/src/third_party/blink/renderer/core/workers/shared_worker.idl index 380c3f98b..79a70e870 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/workers/shared_worker.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/workers/shared_worker.idl @@ -33,8 +33,7 @@ // https://privacycg.github.io/saa-non-cookie-storage/#shared-worker dictionary SharedWorkerOptions : WorkerOptions { SharedWorkerSameSiteCookies sameSiteCookies; - // Experimental. - // See: https://github.com/whatwg/html/issues/10997 + // https://html.spec.whatwg.org/#dom-sharedworkeroptions-extendedlifetime [RuntimeEnabled=SharedWorkerExtendedLifetime] boolean extendedLifetime; }; 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 index 2a7bfbde0..95e930b89 100755 --- 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 @@ -9,5 +9,19 @@ [ IsolatedContext ] interface IsolatedWebApp { - // TODO(crbug.com/480146201): Introduce the `setShape` API. + // Sets the shape of the current window to the union of the given `rects`. + // Only areas of the window that are covered by at least one rectangle become + // visible and can be interacted with. + // + // Passing an empty list of `rects` resets the window shape back to normal. + // + // The returned promise is resolved when the operation is successful, and + // rejected if the shape couldn't be set (e.g. when `rects` are invalid, or + // the window could not be found). + [ + RuntimeEnabled=BlinkExtensionChromeOSIsolatedWebAppSetShape, + CallWith=ScriptState, + RaisesException + ] + Promise setShape(sequence rects); }; 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 c5017407b..c72e84e63 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,15 +40,16 @@ 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. + + // **EXPERIMENTAL**: Only available in extension and experimental contexts. [ MeasureAs=LanguageModel_Params, - RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + RuntimeEnabled=AIPromptAPILegacyParams, CallWith=ScriptState, RaisesException ] static Promise params(); + [ MeasureAs=LanguageModel_Prompt, CallWith=ScriptState, @@ -61,6 +62,7 @@ interface LanguageModel : EventTarget { LanguageModelPrompt input, optional LanguageModelPromptOptions options = {} ); + [ MeasureAs=LanguageModel_PromptStreaming, CallWith=ScriptState, @@ -73,6 +75,7 @@ interface LanguageModel : EventTarget { LanguageModelPrompt input, optional LanguageModelPromptOptions options = {} ); + [ MeasureAs=LanguageModel_Append, CallWith=ScriptState, @@ -93,11 +96,9 @@ interface LanguageModel : EventTarget { 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. + // **DEPRECATED**: This legacy alias for measureContextUsage will be removed. [ - RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + RuntimeEnabled=AIPromptAPILegacyIdentifiers, DeprecateAs=LanguageModel_MeasureInputUsage, CallWith=ScriptState, RaisesException @@ -112,31 +113,41 @@ interface LanguageModel : EventTarget { [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. + // **DEPRECATED**: This legacy alias for contextUsage will be removed. [ - RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + RuntimeEnabled=AIPromptAPILegacyIdentifiers, DeprecateAs=LanguageModel_InputUsage ] readonly attribute double inputUsage; + + // **DEPRECATED**: This legacy alias for contextWindow will be removed. [ - RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + RuntimeEnabled=AIPromptAPILegacyIdentifiers, DeprecateAs=LanguageModel_InputQuota ] readonly attribute unrestricted double inputQuota; - // LanguageModel.topK and LanguageModel.temperature are deprecated for - // non-extension contexts and will be removed in a future - // version. - [MeasureAs=LanguageModel_TopK, RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] + // **EXPERIMENTAL**: Only available in extension and experimental contexts. + [ + RuntimeEnabled=AIPromptAPILegacyParams, + MeasureAs=LanguageModel_TopK + ] readonly attribute unsigned long topK; - [MeasureAs=LanguageModel_Temperature, RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] + + // **EXPERIMENTAL**: Only available in extension and experimental contexts. + [ + RuntimeEnabled=AIPromptAPILegacyParams, + MeasureAs=LanguageModel_Temperature + ] readonly attribute float temperature; - [MeasureAs=LanguageModel_OnQuotaOverflow, RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] + // **DEPRECATED**: This legacy alias for oncontextoverflow will be removed. + [ + RuntimeEnabled=AIPromptAPILegacyIdentifiers, + DeprecateAs=LanguageModel_OnQuotaOverflow + ] attribute EventHandler onquotaoverflow; + [MeasureAs=LanguageModel_OnContextOverflow] attribute EventHandler oncontextoverflow; 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 59b646c8d..9db7169cc 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 @@ -67,7 +67,7 @@ dictionary LanguageModelToolResultContent { // Represents a tool call requested by the language model. [ Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), - RuntimeEnabled=AIPromptAPI, + RuntimeEnabled=AIPromptAPIToolUse, SecureContext ] interface LanguageModelToolCall { @@ -86,7 +86,7 @@ dictionary LanguageModelToolCallInit { // Successful tool execution result. [ Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), - RuntimeEnabled=AIPromptAPI, + RuntimeEnabled=AIPromptAPIToolUse, SecureContext ] interface LanguageModelToolSuccess { @@ -105,7 +105,7 @@ dictionary LanguageModelToolSuccessInit { // Failed tool execution result. [ Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), - RuntimeEnabled=AIPromptAPI, + RuntimeEnabled=AIPromptAPIToolUse, SecureContext ] interface LanguageModelToolError { @@ -133,16 +133,18 @@ dictionary LanguageModelToolDeclaration { }; dictionary LanguageModelCreateCoreOptions { + // **EXPERIMENTAL**: Only available in extension and experimental contexts. // 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. - [RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] unrestricted double topK; - [RuntimeEnabled=LanguageModelLegacyParamsAndAttributes] unrestricted double temperature; + [RuntimeEnabled=AIPromptAPILegacyParams] unrestricted double topK; + [RuntimeEnabled=AIPromptAPILegacyParams] unrestricted double temperature; // The expected types and languages for the session. sequence expectedInputs; sequence expectedOutputs; // Tools that the language model can use. + [RuntimeEnabled=AIPromptAPIToolUse] sequence tools; }; 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 4d16bf54f..8b989d79a 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 @@ -4,9 +4,10 @@ // https://github.com/webmachinelearning/prompt-api +// **EXPERIMENTAL**: Only available in extension and experimental contexts. [ Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), - RuntimeEnabled=LanguageModelLegacyParamsAndAttributes, + RuntimeEnabled=AIPromptAPILegacyParams, SecureContext ] interface LanguageModelParams { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl index 77b6afed4..0e8dc80cc 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl @@ -42,7 +42,7 @@ dictionary ProofreadCorrection { unsigned long long startIndex; unsigned long long endIndex; DOMString correction; - CorrectionType type; + sequence types; DOMString explanation; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_draw_element_image.idl b/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_draw_element_image.idl new file mode 100755 index 000000000..3184f5e20 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_draw_element_image.idl @@ -0,0 +1,37 @@ +// Copyright 2026 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +interface mixin CanvasDrawElementImage { + [RuntimeEnabled=CanvasDrawElement, RaisesException] + DOMMatrix drawElementImage((Element or ElementImage) element, + unrestricted double dx, + unrestricted double dy); + + [RuntimeEnabled=CanvasDrawElement, RaisesException] + DOMMatrix drawElementImage((Element or ElementImage) element, + unrestricted double dx, + unrestricted double dy, + unrestricted double dwidth, + unrestricted double dheight); + + [RuntimeEnabled=CanvasDrawElement, RaisesException] + DOMMatrix drawElementImage((Element or ElementImage) element, + unrestricted double sx, + unrestricted double sy, + unrestricted double swidth, + unrestricted double sheight, + unrestricted double dx, + unrestricted double dy); + + [RuntimeEnabled=CanvasDrawElement, RaisesException] + DOMMatrix drawElementImage((Element or ElementImage) element, + unrestricted double sx, + unrestricted double sy, + unrestricted double swidth, + unrestricted double sheight, + unrestricted double dx, + unrestricted double dy, + unrestricted double dwidth, + unrestricted double dheight); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl b/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl index 6f22db218..4eb5c63ec 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl @@ -54,54 +54,11 @@ interface CanvasRenderingContext2D { void drawFocusIfNeeded(Element element); void drawFocusIfNeeded(Path2D path, Element element); - [RuntimeEnabled=CanvasDrawElement, RaisesException] - DOMMatrix drawElement(Element element, - unrestricted double dx, - unrestricted double dy); - - [RuntimeEnabled=CanvasDrawElement, RaisesException] - DOMMatrix drawElement(Element element, - unrestricted double dx, - unrestricted double dy, - unrestricted double dwidth, - unrestricted double dheight); - - [RuntimeEnabled=CanvasDrawElement, RaisesException] - DOMMatrix drawElementImage(Element element, - unrestricted double dx, - unrestricted double dy); - - [RuntimeEnabled=CanvasDrawElement, RaisesException] - DOMMatrix drawElementImage(Element element, - unrestricted double dx, - unrestricted double dy, - unrestricted double dwidth, - unrestricted double dheight); - - [RuntimeEnabled=CanvasDrawElement, RaisesException] - DOMMatrix drawElementImage(Element element, - unrestricted double sx, - unrestricted double sy, - unrestricted double swidth, - unrestricted double sheight, - unrestricted double dx, - unrestricted double dy); - - [RuntimeEnabled=CanvasDrawElement, RaisesException] - DOMMatrix drawElementImage(Element element, - unrestricted double sx, - unrestricted double sy, - unrestricted double swidth, - unrestricted double sheight, - unrestricted double dx, - unrestricted double dy, - unrestricted double dwidth, - unrestricted double dheight); - [MeasureAs=GetCanvas2DContextAttributes] CanvasRenderingContext2DSettings getContextAttributes(); }; CanvasRenderingContext2D includes BaseRenderingContext2D; CanvasRenderingContext2D includes CanvasPath; +CanvasRenderingContext2D includes CanvasDrawElementImage; CanvasRenderingContext2D includes Canvas2dGPUTransfer; CanvasRenderingContext2D includes Canvas2DRecorderContext; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.idl b/tools/under-control/src/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.idl index b05b23a05..6a59f372a 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.idl @@ -9,7 +9,7 @@ Exposed=(Window,Worker) ] interface ImageBitmapRenderingContext { // back-reference to the canvas - [ImplementedAs=getHTMLOrOffscreenCanvas] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas; + [ImplementedAs=getHTMLOrOffscreenCanvas, GetterCallWith=ScriptState] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas; [RaisesException] void transferFromImageBitmap(ImageBitmap? bitmap); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl b/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl index 24b4af8d0..051244539 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl @@ -17,5 +17,6 @@ OffscreenCanvasRenderingContext2D includes BaseRenderingContext2D; OffscreenCanvasRenderingContext2D includes CanvasPath; +OffscreenCanvasRenderingContext2D includes CanvasDrawElementImage; OffscreenCanvasRenderingContext2D includes Canvas2dGPUTransfer; OffscreenCanvasRenderingContext2D includes Canvas2DRecorderContext; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential.idl index 89907441e..566ae40d3 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/credential.idl @@ -8,4 +8,5 @@ interface Credential { readonly attribute USVString id; readonly attribute DOMString type; + [CallWith=ScriptState] static Promise isConditionalMediationAvailable(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/payment_credential_instrument.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/payment_credential_instrument.idl index ac32300d7..a19a0bdf1 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/payment_credential_instrument.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/payment_credential_instrument.idl @@ -8,5 +8,5 @@ dictionary PaymentCredentialInstrument { required USVString displayName; required USVString icon; boolean iconMustBeShown = true; - [RuntimeEnabled=SecurePaymentConfirmationUxRefresh] USVString details; + USVString details; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/crypto/encapsulation.idl b/tools/under-control/src/third_party/blink/renderer/modules/crypto/encapsulation.idl new file mode 100755 index 000000000..ae478e38a --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/crypto/encapsulation.idl @@ -0,0 +1,15 @@ +// Copyright 2026 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// https://wicg.github.io/webcrypto-modern-algos/#encapsulation + +dictionary EncapsulatedKey { + CryptoKey sharedKey; + ArrayBuffer ciphertext; +}; + +dictionary EncapsulatedBits { + ArrayBuffer sharedKey; + ArrayBuffer ciphertext; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/crypto/json_web_key.idl b/tools/under-control/src/third_party/blink/renderer/modules/crypto/json_web_key.idl index 1a22151c2..b77e807aa 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/crypto/json_web_key.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/crypto/json_web_key.idl @@ -25,4 +25,6 @@ dictionary JsonWebKey { DOMString qi; sequence oth; DOMString k; + DOMString pub; + DOMString priv; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/crypto/subtle_crypto.idl b/tools/under-control/src/third_party/blink/renderer/modules/crypto/subtle_crypto.idl index f89f4e6a6..9d4a587bc 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/crypto/subtle_crypto.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/crypto/subtle_crypto.idl @@ -53,4 +53,10 @@ typedef (object or DOMString) AlgorithmIdentifier; [CallWith=ScriptState, MeasureAs=SubtleCryptoWrapKey, RaisesException] Promise wrapKey(KeyFormat format, CryptoKey key, CryptoKey wrappingKey, AlgorithmIdentifier wrapAlgorithm); [CallWith=ScriptState, MeasureAs=SubtleCryptoUnwrapKey, RaisesException] Promise unwrapKey(KeyFormat format, BufferSource wrappedKey, CryptoKey unwrappingKey, AlgorithmIdentifier unwrapAlgorithm, AlgorithmIdentifier unwrappedKeyAlgorithm, boolean extractable, sequence keyUsages); + + [CallWith=ScriptState, MeasureAs=SubtleCryptoEncapsulateKey, RaisesException, RuntimeEnabled=WebCryptoPQC] Promise encapsulateKey(AlgorithmIdentifier encapsulationAlgorithm, CryptoKey encapsulationKey, AlgorithmIdentifier sharedKeyAlgorithm, boolean extractable, sequence keyUsages); + [CallWith=ScriptState, MeasureAs=SubtleCryptoEncapsulateBits, RaisesException, RuntimeEnabled=WebCryptoPQC] Promise encapsulateBits(AlgorithmIdentifier encapsulationAlgorithm, CryptoKey encapsulationKey); + + [CallWith=ScriptState, MeasureAs=SubtleCryptoDecapsulateKey, RaisesException, RuntimeEnabled=WebCryptoPQC] Promise decapsulateKey(AlgorithmIdentifier decapsulationAlgorithm, CryptoKey decapsulationKey, BufferSource ciphertext, AlgorithmIdentifier sharedKeyAlgorithm, boolean extractable, sequence keyUsages); + [CallWith=ScriptState, MeasureAs=SubtleCryptoDecapsulateBits, RaisesException, RuntimeEnabled=WebCryptoPQC] Promise decapsulateBits(AlgorithmIdentifier decapsulationAlgorithm, CryptoKey decapsulationKey, BufferSource ciphertext); }; 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 e1c10be1f..735c9e4f4 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 @@ -5,8 +5,7 @@ SharedWorker DirectSocketsInSharedWorkers, ServiceWorker DirectSocketsInServiceWorkers ), - SecureContext, - IsolatedContext + SecureContext ] interface MulticastController { [CallWith=ScriptState, RaisesException, MeasureAs=MulticastControllerJoinGroupFunction] diff --git a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_server_socket.idl b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_server_socket.idl index d6bf6c7d4..a5a4950e8 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_server_socket.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_server_socket.idl @@ -9,8 +9,7 @@ SharedWorker DirectSocketsInSharedWorkers, ServiceWorker DirectSocketsInServiceWorkers ), - SecureContext, - IsolatedContext + SecureContext ] interface TCPServerSocket { [CallWith=ScriptState, RaisesException, MeasureAs=TCPServerSocketConstructor] constructor(DOMString localAddress, optional TCPServerSocketOptions options = {}); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl index c734b1fab..22f65bca2 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl @@ -12,8 +12,7 @@ ServiceWorker DirectSocketsInServiceWorkers ), ActiveScriptWrappable, - SecureContext, - IsolatedContext + SecureContext ] interface TCPSocket { [CallWith=ScriptState, RaisesException, MeasureAs=TCPSocketConstructor] constructor(DOMString remoteAddress, unsigned short remotePort, optional TCPSocketOptions options = {}); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl index 8d0210319..acdf51f88 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl @@ -12,8 +12,7 @@ ServiceWorker DirectSocketsInServiceWorkers ), ActiveScriptWrappable, - SecureContext, - IsolatedContext + SecureContext ] interface UDPSocket { [CallWith=ScriptState, RaisesException, MeasureAs=UDPSocketConstructor] constructor(UDPSocketOptions options); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.idl b/tools/under-control/src/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.idl index a72d0ae81..d1ffd7ae6 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.idl @@ -22,5 +22,5 @@ enum MediaKeyStatus { iterable ; readonly attribute unsigned long size; boolean has(BufferSource keyId); - (MediaKeyStatus or undefined) get(BufferSource keyId); + [CallWith=ScriptState] (MediaKeyStatus or undefined) get(BufferSource keyId); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/launch/dom_window_launch_queue.idl b/tools/under-control/src/third_party/blink/renderer/modules/launch/dom_window_launch_queue.idl index 6794fa0ad..8d41e1d99 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/launch/dom_window_launch_queue.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/launch/dom_window_launch_queue.idl @@ -6,7 +6,7 @@ // Explainer: https://github.com/WICG/file-handling/blob/main/explainer.md [ - ImplementedAs=DOMWindowLaunchQueue, + ImplementedAs=LaunchQueue, RuntimeEnabled=WebAppLaunchQueue ] partial interface Window { readonly attribute LaunchQueue launchQueue; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/media_capabilities/key_system_track_configuration.idl b/tools/under-control/src/third_party/blink/renderer/modules/media_capabilities/key_system_track_configuration.idl index 49bddb8ee..83565f39f 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/media_capabilities/key_system_track_configuration.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/media_capabilities/key_system_track_configuration.idl @@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://w3c.github.io/media-capabilities/#dictdef-keysystemtrackconfiguration +// https://www.w3.org/TR/media-capabilities/#keysystemtrackconfiguration dictionary KeySystemTrackConfiguration { DOMString robustness = ""; -}; \ No newline at end of file + [RuntimeEnabled=KeySystemTrackConfigurationEncryptionScheme] DOMString? encryptionScheme; +}; 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 index a7065ef3b..9f4e66bf3 100755 --- 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 @@ -5,4 +5,5 @@ [RuntimeEnabled=UserMediaElement, ImplementedAs=HTMLUserMediaElementMediaStream] partial interface HTMLUserMediaElement { readonly attribute MediaStream? stream; + [CallWith=ScriptState] readonly attribute any error; }; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/user_media_element_constraints.idl b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/user_media_element_constraints.idl new file mode 100755 index 000000000..bf47664a3 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/user_media_element_constraints.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=UserMediaElementConstraints] +partial interface HTMLUserMediaElement { + void setConstraints(MediaStreamConstraints constraints); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl b/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl index 25575589f..efdfde403 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl @@ -21,5 +21,5 @@ dictionary SecurePaymentConfirmationRequest { // A list of logos representing entities that are facilitating the payment // that this SPC call is for. - [RuntimeEnabled=SecurePaymentConfirmationUxRefresh] sequence paymentEntitiesLogos; + sequence paymentEntitiesLogos; }; 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 34cbd053a..dfbb196bd 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 @@ -43,4 +43,6 @@ dictionary RTCConfiguration { [RuntimeEnabled=RtcAudioJitterBufferMaxPackets] boolean rtcAudioJitterBufferFastAccelerate; [RuntimeEnabled=RtcAudioJitterBufferMaxPackets] long rtcAudioJitterBufferMinDelayMs; boolean encodedInsertableStreams = false; + // https://w3c.github.io/webrtc-extensions/#always-negotiating-datachannels + [RuntimeEnabled=RtcAlwaysNegotiateDataChannels] boolean alwaysNegotiateDataChannels = false; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/permissions/navigator_permissions.idl b/tools/under-control/src/third_party/blink/renderer/modules/permissions/navigator_permissions.idl index cff862a53..d952b9ad7 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/permissions/navigator_permissions.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/permissions/navigator_permissions.idl @@ -7,8 +7,7 @@ [ Exposed=(Window), - ImplementedAs=Permissions, - RuntimeEnabled=Permissions + ImplementedAs=Permissions ] partial interface Navigator { readonly attribute Permissions permissions; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/permissions/permission_status.idl b/tools/under-control/src/third_party/blink/renderer/modules/permissions/permission_status.idl index 12783e97b..ff3b3601c 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/permissions/permission_status.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/permissions/permission_status.idl @@ -7,8 +7,7 @@ [ ActiveScriptWrappable, - Exposed=(Window,Worker), - RuntimeEnabled=Permissions + Exposed=(Window,Worker) ] interface PermissionStatus : EventTarget { // TODO(crbug.com/1395451): This cannot be PermissionName because // it is the wrong format. diff --git a/tools/under-control/src/third_party/blink/renderer/modules/permissions/permissions.idl b/tools/under-control/src/third_party/blink/renderer/modules/permissions/permissions.idl index efa1a94df..5bb6d3041 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/permissions/permissions.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/permissions/permissions.idl @@ -6,8 +6,7 @@ // https://w3c.github.io/permissions/ [ - Exposed=(Window,Worker), - RuntimeEnabled=Permissions + Exposed=(Window,Worker) ] interface Permissions { [CallWith=ScriptState, RaisesException, Measure] Promise query(object permission); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/permissions/worker_navigator_permissions.idl b/tools/under-control/src/third_party/blink/renderer/modules/permissions/worker_navigator_permissions.idl index da1e96604..88033fe07 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/permissions/worker_navigator_permissions.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/permissions/worker_navigator_permissions.idl @@ -7,8 +7,7 @@ [ Exposed=(Worker), - ImplementedAs=Permissions, - RuntimeEnabled=Permissions + ImplementedAs=Permissions ] partial interface WorkerNavigator { readonly attribute Permissions permissions; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/service_worker/extendable_message_event.idl b/tools/under-control/src/third_party/blink/renderer/modules/service_worker/extendable_message_event.idl index 5cffcc0ed..936e576ec 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/service_worker/extendable_message_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/service_worker/extendable_message_event.idl @@ -11,6 +11,6 @@ [CallWith=ScriptState, CachedAttribute=isDataDirty] readonly attribute any data; readonly attribute DOMString origin; readonly attribute DOMString lastEventId; - [SameObject] readonly attribute (Client or ServiceWorker or MessagePort)? source; + [SameObject, GetterCallWith=ScriptState] readonly attribute (Client or ServiceWorker or MessagePort)? source; readonly attribute FrozenArray ports; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/shared_storage/shared_storage.idl b/tools/under-control/src/third_party/blink/renderer/modules/shared_storage/shared_storage.idl index 4e5b53084..aac3e3931 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/shared_storage/shared_storage.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/shared_storage/shared_storage.idl @@ -45,6 +45,7 @@ ] Promise batchUpdate(sequence methods, optional SharedStorageModifierMethodOptions options); [ + Exposed=SharedStorageWorklet, CallWith=ScriptState, RaisesException, DeprecateAs=SharedStorageAPIAll diff --git a/tools/under-control/src/third_party/blink/renderer/modules/speech/speech_recognition.idl b/tools/under-control/src/third_party/blink/renderer/modules/speech/speech_recognition.idl index b0811e04a..aacf526a0 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/speech/speech_recognition.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/speech/speech_recognition.idl @@ -39,9 +39,16 @@ enum AvailabilityStatus { "available", }; +enum SpeechRecognitionQuality { + "command", + "dictation", + "conversation", +}; + dictionary SpeechRecognitionOptions { required sequence langs; // BCP-47 language tags boolean processLocally = false; // Instructs the recognition to be performed on-device. If `false` (default), any available recognition method may be used. + SpeechRecognitionQuality quality = "command"; }; [ @@ -58,6 +65,7 @@ dictionary SpeechRecognitionOptions { attribute boolean continuous; attribute boolean interimResults; attribute unsigned long maxAlternatives; + [RuntimeEnabled=OnDeviceWebSpeechQuality] attribute SpeechRecognitionQuality quality; [RuntimeEnabled=OnDeviceWebSpeechAvailable] attribute boolean processLocally; [RuntimeEnabled=WebSpeechRecognitionContext] attribute ObservableArray phrases; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/spell_check_custom_dictionary.idl b/tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/spell_check_custom_dictionary.idl new file mode 100755 index 000000000..175b7f5d8 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/spell_check_custom_dictionary.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. + +// https://github.com/Igalia/explainers/tree/main/spell-check-dictionary + +[ + Exposed=Window, + SecureContext, + RuntimeEnabled=SpellCheckCustomDictionaryAPI +] interface SpellCheckCustomDictionary { + [CallWith=ScriptState] void addWords(sequence words); + [CallWith=ScriptState] void removeWords(sequence words); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/window_spell_check_custom_dictionary.idl b/tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/window_spell_check_custom_dictionary.idl new file mode 100755 index 000000000..7e41c34f9 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/spell_check_custom_dictionary/window_spell_check_custom_dictionary.idl @@ -0,0 +1,13 @@ +// 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://github.com/Igalia/explainers/tree/main/spell-check-dictionary + +[ + ImplementedAs=WindowSpellCheckCustomDictionary, + SecureContext, + RuntimeEnabled=SpellCheckCustomDictionaryAPI +] partial interface Window { + readonly attribute SpellCheckCustomDictionary spellCheckCustomDictionary; +}; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl index 66d1fe5dd..a9504b5cf 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl @@ -45,7 +45,7 @@ typedef [PassAsSpan] ([AllowShared, BufferSourceTypeNoSizeLimit] Uint32Array or interface mixin WebGLRenderingContextBase { - [ImplementedAs=getHTMLOrOffscreenCanvas] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas; + [ImplementedAs=getHTMLOrOffscreenCanvas, GetterCallWith=ScriptState] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas; /* ClearBufferMask */ const GLenum DEPTH_BUFFER_BIT = 0x00000100; @@ -647,36 +647,20 @@ interface mixin WebGLRenderingContextBase { [RuntimeEnabled=CanvasDrawElement, RaisesException] void texElementImage2D(GLenum target, GLint level, GLint internalformat, - GLenum format, GLenum type, Element element); + GLenum format, GLenum type, (Element or ElementImage) element); [RuntimeEnabled=CanvasDrawElement, RaisesException] void texElementImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, Element element); + GLenum type, (Element or ElementImage) element); [RuntimeEnabled=CanvasDrawElement, RaisesException] void texElementImage2D(GLenum target, GLint level, GLint internalformat, GLfloat sx, GLfloat sy, GLfloat swidth, GLfloat sheight, - GLenum format, GLenum type, Element element); + GLenum format, GLenum type, (Element or ElementImage) element); [RuntimeEnabled=CanvasDrawElement, RaisesException] void texElementImage2D(GLenum target, GLint level, GLint internalformat, GLfloat sx, GLfloat sy, GLfloat swidth, GLfloat sheight, GLsizei width, GLsizei height, GLenum format, - GLenum type, Element element); - [RuntimeEnabled=CanvasDrawElement, RaisesException] - void texElement2D(GLenum target, GLint level, GLint internalformat, - GLenum format, GLenum type, Element element); - [RuntimeEnabled=CanvasDrawElement, RaisesException] - void texElement2D(GLenum target, GLint level, GLint internalformat, - GLsizei width, GLsizei height, GLenum format, GLenum type, - Element element); - [RuntimeEnabled=CanvasDrawElement, RaisesException] - void texElement2D(GLenum target, GLint level, GLint internalformat, - GLfloat sx, GLfloat sy, GLfloat swidth, GLfloat sheight, - GLenum format, GLenum type, Element element); - [RuntimeEnabled=CanvasDrawElement, RaisesException] - void texElement2D(GLenum target, GLint level, GLint internalformat, - GLfloat sx, GLfloat sy, GLfloat swidth, GLfloat sheight, - GLsizei width, GLsizei height, GLenum format, GLenum type, - Element element); + GLenum type, (Element or ElementImage) element); void texSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.idl index 675840f9d..b4e1c4b27 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.idl @@ -9,7 +9,7 @@ SecureContext, ActiveScriptWrappable ] interface GPUCanvasContext { - [ImplementedAs=getHTMLOrOffscreenCanvas] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas; + [ImplementedAs=getHTMLOrOffscreenCanvas, GetterCallWith=ScriptState] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas; [RaisesException] void configure(GPUCanvasConfiguration descriptor); void unconfigure(); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_queue.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_queue.idl index caa2c0a77..37ff7e7fa 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_queue.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_queue.idl @@ -42,15 +42,15 @@ GPUExtent3D copySize); [RuntimeEnabled=CanvasDrawElement, RaisesException] void copyElementImageToTexture( - Element source, + (Element or ElementImage) source, GPUImageCopyTextureTagged destination); [RuntimeEnabled=CanvasDrawElement, RaisesException] void copyElementImageToTexture( - Element source, + (Element or ElementImage) source, GPUIntegerCoordinate width, GPUIntegerCoordinate height, GPUImageCopyTextureTagged destination); [RuntimeEnabled=CanvasDrawElement, RaisesException] void copyElementImageToTexture( - Element source, + (Element or ElementImage) source, float sx, float sy, float swidth, float sheight, GPUImageCopyTextureTagged destination); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture.idl index 2978c6cf4..eaee83676 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture.idl @@ -19,6 +19,6 @@ readonly attribute GPUTextureDimension dimension; readonly attribute GPUTextureFormat format; readonly attribute GPUFlagsConstant usage; - [RuntimeEnabled=WebGPUCompatibilityMode] readonly attribute (GPUTextureViewDimension or undefined) textureBindingViewDimension; + [RuntimeEnabled=WebGPUCompatibilityMode, GetterCallWith=ScriptState] readonly attribute (GPUTextureViewDimension or undefined) textureBindingViewDimension; }; GPUTexture includes GPUObjectBase; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport.idl b/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport.idl index 422cf43ad..beea6dbce 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport.idl @@ -26,6 +26,9 @@ [CallWith=ScriptState, RuntimeEnabled=WebTransportStats] Promise getStats(); + [RaisesException, RuntimeEnabled=WebTransportSendGroup] + WebTransportSendGroup createSendGroup(); + [RuntimeEnabled=WebTransportApplicationProtocol] readonly attribute DOMString protocol; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_group.idl b/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_group.idl new file mode 100755 index 000000000..bd4e92586 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_group.idl @@ -0,0 +1,13 @@ +// 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://w3c.github.io/webtransport/#webtransportsendgroup +[ + Exposed=(Window,Worker), + SecureContext, + RuntimeEnabled=WebTransportSendGroup +] interface WebTransportSendGroup { + [CallWith=ScriptState] + Promise getStats(); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_stream_stats.idl b/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_stream_stats.idl new file mode 100755 index 000000000..d86fc67d0 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webtransport/web_transport_send_stream_stats.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. + +// https://w3c.github.io/webtransport/#dictdef-webtransportsendstreamstats +dictionary WebTransportSendStreamStats { + unsigned long long bytesWritten = 0; + unsigned long long bytesSent = 0; + unsigned long long bytesAcknowledged = 0; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_frame.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_frame.idl index 6a2c8080c..b0af93c9b 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_frame.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_frame.idl @@ -43,4 +43,7 @@ // https://github.com/immersive-web/real-world-geometry/blob/master/plane-detection-explainer.md [RuntimeEnabled=WebXRPlaneDetection, RaisesException, MeasureAs=XRFrameDetectedPlanes] readonly attribute XRPlaneSet? detectedPlanes; + + [RuntimeEnabled=WebXRMeshDetection, RaisesException, MeasureAs=XRFrameDetectedMeshes] + readonly attribute XRMeshSet? detectedMeshes; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh.idl new file mode 100755 index 000000000..2e37cc566 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh.idl @@ -0,0 +1,20 @@ +// 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. + +// More details about the mesh detection API can be found here: +// https://immersive-web.github.io/real-world-meshing/#native-mesh-detection + +[ + SecureContext, + Exposed=Window, + RuntimeEnabled=WebXRMeshDetection +] +interface XRMesh { + [SameObject] readonly attribute XRSpace meshSpace; + + readonly attribute Float32Array vertices; + readonly attribute Uint32Array indices; + readonly attribute DOMHighResTimeStamp lastChangedTime; + readonly attribute DOMString? semanticLabel; +}; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh_set.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh_set.idl new file mode 100755 index 000000000..3a9387cf8 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_mesh_set.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. + +// More details about the mesh detection API can be found here: +// https://immersive-web.github.io/real-world-meshing/#native-mesh-detection +[ + SecureContext, + Exposed=Window, + RuntimeEnabled=WebXRMeshDetection +] +interface XRMeshSet { + readonly setlike; +}; 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 986b174d3..e35efdeaa 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 @@ -151,7 +151,7 @@ }, // Specify how the flag value is updated from the base::Feature value. This - // field is used only if base_feature is not empty. + // field works only if base_feature is not "none". // // * "enabled_or_overridden" // - If the base::Feature status is overridden to the enabled or disabled @@ -171,9 +171,10 @@ // // This is useful for Blink origin trial features especially those // implemented in both Chromium and Blink. As origin trial only controls - // the Blink features, for now we require the base::Feature to be enabled - // by default, but we don't want the default enabled status affect the - // Blink feature. See also https://crbug.com/1048656#c10. + // the Blink features, we require the base::Feature to be enabled + // by default, but we don't want the default enabled status to affect the + // Blink feature. See RuntimeEnabledFeatures.md for a detailed explanation + // of how this works. See also https://crbug.com/1048656#c10. // This can also be used for features that are enabled by default in // Chromium but not in Blink on all platforms and we want to use the Blink // status. However, we would prefer consistent Chromium and Blink status @@ -346,6 +347,11 @@ name: "AIPageContentConvertNodeTextToUtf8", status: "stable" }, + // When enabled, redact elements with --webkit-text-security. + { + name: "AIPageContentElementCSSRedaction", + status: "stable", + }, { name: "AIPageContentIncludeSVGSubtree", status: "stable" @@ -370,16 +376,12 @@ name: "AIPromptAPI", public: true, status: { - "Win": "experimental", - "Mac": "experimental", - "Linux": "experimental", - "ChromeOS": "experimental", + "Win": "stable", + "Mac": "stable", + "Linux": "stable", + "ChromeOS": "stable", "default": "", }, - origin_trial_feature_name: "AIPromptAPIMultimodalInput", - origin_trial_os: ["win", "mac", "linux", "chromeos"], - origin_trial_allows_third_party: true, - implied_by: ["AIPromptAPIMultimodalInput"], }, { // Extension access to "AIPromptAPI". @@ -397,8 +399,36 @@ name: "AIPromptAPIForWorkers", public: true, }, + { + // Gates access to legacy aliases of renamed "AIPromptAPI" identifiers. + // TODO(crbug.com/498228550): Remove after extension context usage drops. + name: "AIPromptAPILegacyIdentifiers", + public: true, + }, + { + // Gates access to legacy sampling parameter surfaces for "AIPromptAPI". + // Enabled in extension contexts, and for API enhancement experiments. + name: "AIPromptAPILegacyParams", + public: true, + origin_trial_feature_name: "AIPromptAPIParams", + origin_trial_os: ["win", "mac", "linux", "chromeos"], + origin_trial_allows_third_party: true, + implied_by: ["AIPromptAPIParams"], + }, { name: "AIPromptAPIMultimodalInput", + status: { + "Win": "stable", + "Mac": "stable", + "Linux": "stable", + "ChromeOS": "stable", + "default": "", + }, + }, + { + // Gates access to inference parameter enhancements for "AIPromptAPI". + // This feature alone does not expose any "AIPromptAPI" feature access. + name: "AIPromptAPIParams", status: { "Win": "experimental", "Mac": "experimental", @@ -406,11 +436,9 @@ "ChromeOS": "experimental", "default": "", }, - origin_trial_feature_name: "AIPromptAPIMultimodalInput", + origin_trial_feature_name: "AIPromptAPIParams", origin_trial_os: ["win", "mac", "linux", "chromeos"], origin_trial_allows_third_party: true, - base_feature_status: "enabled", - copied_from_base_feature_if: "overridden", }, { // Gates access to the responseConstraint enhancement for "AIPromptAPI". @@ -548,6 +576,15 @@ name: "AllowURNsInIframes", base_feature: "none", }, + { + // Instead of creating a new DOMStringList on every access to + // location.ancestorOrigins, return the ancestor origins list + // stored on Document. + // This was added in M147 and can be removed after M149. + // https://issues.chromium.org/issues/483610021 + name: "AncestorOriginsStoredOnDocument", + status: "stable", + }, { // Enables the new behavior for this spec change: // https://github.com/whatwg/html/pull/11457 @@ -569,12 +606,6 @@ name: "AnchorPositionAdjustmentWithoutOverflow", status: "stable", }, - { - // Switch for https://crbug.com/445371140 which changes the initial value - // for position-visibility to 'anchors-visible' per current spec. - name: "AnchorsVisibleInitialValue", - status: "stable", - }, { name: "AndroidDownloadableFontsMatching", base_feature: "none", @@ -818,6 +849,12 @@ name: "BlinkExtensionChromeOS", browser_process_read_write_access: true, }, + { + name: "BlinkExtensionChromeOSIsolatedWebAppSetShape", + status: {"ChromeOS": "experimental", "default": ""}, + browser_process_read_write_access: true, + depends_on: ["BlinkExtensionChromeOS"], + }, { name: "BlinkExtensionChromeOSKiosk", depends_on: ["BlinkExtensionChromeOS"], @@ -945,13 +982,8 @@ // https://github.com/WICG/html-in-canvas/blob/main/README.md // Note the API name has changed to `drawElementImage`. name: "CanvasDrawElement", - status: "test", - }, - { - // Remove the restriction that drawElementImage can only draw immediate children - // of the canvas, and allow drawing canvas descendants. - name: "CanvasDrawElementInSubtree", - depends_on: ["CanvasDrawElement"], + origin_trial_feature_name: "HTMLInCanvas", + status: "experimental", }, { name: "CanvasFloatingPoint", @@ -972,6 +1004,11 @@ name: "CanvasHDR", status: "experimental", }, + { + // https://crbug.com/479240778 + name: "CanvasTextMetricsPreciseBounds", + status: "experimental", + }, { // Canvas2D API for specifying HDR tone mapping behavior. // https:/crbug.com/448552449, https://github.com/whatwg/html/issues/11424 @@ -1081,13 +1118,6 @@ name: "ClickFocusDoesntPersistStatusBubble", status: "stable", }, - { - // Allows top-level sites to restrict collection of high-entropy UA client - // hints (from 3Ps, or itself) via the getHighEntropyValues API. - // crbug.com/385161047 - name: "ClientHintUAHighEntropyValuesPermissionPolicy", - status: "stable", - }, { // Enables clipboardchange event API for listening for changes to the // system clipboard @@ -1137,10 +1167,6 @@ name: "CollapseZeroWidthSpaceWhenReuseItem", status: "stable", }, - { - name: "CollectWidthAndHeightAsPresentationAttributesForUse", - status: "stable", - }, { name: "CollectWidthAndHeightAsStylesForNestedSvg", status: "stable", @@ -1262,6 +1288,33 @@ "default": "experimental", } }, + { + // When enabled, providing developers control over the resources loaded + // into their pages' contexts and the endpoints to which their pages can + // make requests. + // Note: To enable this feature, developers MUST include the origin trial + // token within the HTTP headers. Including the origin trial token via the + // tag in the head of any page does NOT enable the feature. + // See https://wicg.github.io/connection-allowlists/. + name: "ConnectionAllowlist", + origin_trial_feature_name: "ConnectionAllowlist", + // This feature flag is used for overriding origin trial requirements for + // testing purpose. See the comment below for `status` field for why this + // is required even though there already exists a + // `network::features::kConnectionAllowlists` for connection allowlist. + // Kill switch is `network::features::kConnectionAllowlists`. + base_feature: "OverrideConnectionAllowlistOriginTrial", + base_feature_status: "disabled", + // For the connection allowlist, its implementation is entirely within the + // browser processes. It does not involve any changes in the renderer + // process. The `status` field does not behave in the same manner for + // other web platform features. For example, setting it to "stable" does + // not enable the feature -- the renderer's internal state is updated, but + // does not get propagated to the browser process. So connection allowlist + // cannot know the status of the RuntimeEnabledFeature. + status: "experimental", + settable_from_internals: true, + }, { // Fix for https://crbug.com/40659076. When enabled, queryCommandState for // 'subscript' or 'superscript' with a caret selection will consider @@ -1280,11 +1333,12 @@ }, { name: "ContainerNameOnly", - status: "experimental", + status: "stable", }, { name: "ContainerTiming", origin_trial_feature_name: "ContainerTiming", + origin_trial_allows_third_party: true, status: "experimental", }, { @@ -1320,6 +1374,12 @@ public: true, status: "stable", }, + { + // Feature flag for stripping \t and space from Cookie names and values. + // https://crbug.com/437345480 + name: "CookieStoreAPIWhitespaceStripping", + status: "stable", + }, { name: "CoopRestrictProperties", origin_trial_feature_name: "CoopRestrictProperties", @@ -1385,6 +1445,12 @@ name: "CSSActiveCaptionMapsToCanvas", status: "stable", }, + { + // https://drafts.csswg.org/css-color-5/#relative-alpha + // https://chromestatus.com/feature/5070160203481088 + name: "CSSAlphaColorFunction", + status: "experimental", + }, { // Allows using counter() and counters() in alt text (after / in content property). name: "CSSAltCounter", @@ -1400,6 +1466,11 @@ name: "CSSAnimationIterationComposite", status: "experimental", }, + { + // https://drafts.csswg.org/css-values-5/#early-resolution + name: "CSSArgumentGrammar", + status: "test", + }, { // Whether values are allowed as counter style name: "CSSAtRuleCounterStyleImageSymbols", @@ -1409,6 +1480,10 @@ name: "CSSAtRuleCounterStyleSpeakAsDescriptor", status: "test", }, + { + name: "CSSBackgroundClipBorderArea", + status: "experimental", + }, // https://chromestatus.com/feature/5459864205393920 { // https://chromestatus.com/feature/5125388091260928 @@ -1486,11 +1561,6 @@ name: "CSSCrossFade", status: "experimental", }, - { - // Consistent cursor size validation. https://crbug.com/326091489 - name: "CSSCursorSizeCheckFix", - status: "stable", - }, { name: "CSSCustomMedia", status: "test", @@ -1514,6 +1584,13 @@ // crbug.com/417306102 name: "CssFitWidthTextReshaping", }, + { + // crbug.com/483689942 + // Serialize font-family names as space-separated idents when possible, + // per CSSWG resolution. See https://github.com/w3c/csswg-drafts/issues/5846. + name: "CSSFontFamilySerialization", + status: "experimental", + }, { name: "CSSFontSizeAdjust", status: "stable", @@ -1584,6 +1661,12 @@ name: "CSSLetterAndWordSpacingPercentage", status: "stable", }, + { + // light-dark() for image values (background-image, etc.) + // https://drafts.csswg.org/css-color-5/#light-dark + name: "CSSLightDarkImage", + status: "experimental", + }, { name: "CSSLineClamp", status: "experimental", @@ -1591,6 +1674,7 @@ { name: "CSSLineClampLineBreakingEllipsis", depends_on: ["CSSLineClamp"], + status: "experimental", }, { // This flag makes `(-webkit-)line-clamp: ` clamp by both lines @@ -1666,10 +1750,19 @@ name: "CSSPseudoColumn", status: "stable", }, + { + name: "CSSPseudoElementBackdrop", + status: "experimental", + }, { name: "CSSPseudoElementInterface", status: "experimental", }, + { + name: "CSSPseudoElementViewTransitions", + depends_on: ["CSSPseudoElementInterface"], + status: "test", + }, { // Enables the :has-slotted pseudo-selector. // https://chromestatus.com/feature/5134941143433216 @@ -1699,7 +1792,7 @@ }, { name: "CSSRandomFunction", - status: "test", + status: "experimental", }, { name: "CSSRandomFunctionTypedOM", @@ -1716,7 +1809,7 @@ }, { name: "CSSRevertRule", - status: "experimental", + status: "stable", }, { name: "CSSRubyOverhang", @@ -1796,6 +1889,13 @@ status: "experimental", base_feature: "CssSelectorFragmentAnchor", }, + { + // rect() and xywh() basic shapes for shape-outside. + // https://drafts.csswg.org/css-shapes-1/#basic-shape-functions + // https://drafts.csswg.org/css-shapes/#shape-outside-property + name: "CSSShapeOutsideRectAndXywhSupport", + status: "experimental", + }, { // https://drafts.csswg.org/cssom-1/#dom-cssstylesheetinit-baseurl name: "CSSStyleSheetInitBaseURL", @@ -1803,7 +1903,7 @@ }, { name: "CSSSupportsAtRuleFunction", - status: "experimental", + status: "stable", }, { name: "CSSSupportsForImportRules", @@ -1836,7 +1936,7 @@ { // https://issues.chromium.org/40675832: CSS `text-decoration-skip-ink: all` value name: "CSSTextDecorationSkipInkAll", - status: "experimental", + status: "stable", }, { // crbug.com/434361099 @@ -1847,12 +1947,6 @@ name: "CssTextIndentAsPrimitive", status: "stable", }, - { - // crbug.com/40321528 - name: "CssTextJustify", - status: "stable", - depends_on: ["JustifyWithoutLineText"], - }, { // crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand name: "CSSTextSpacing", @@ -1913,6 +2007,11 @@ name: "CSSViewTransitionAutoName", status: "experimental", }, + { + // Shipping in M148 (or backported earlier), can be removed in M150. + name: "CustomElementsDisableFormattingFixups", + status: "stable", + }, { // appearance:base for the element when it is invoked as a // picker from an . @@ -1922,17 +2021,10 @@ status: "experimental", depends_on: ["AppearanceBase"], }, - { - // appearance:base-select for - // https://issues.chromium.org/issues/357649033 - name: "CustomizableSelectListbox", - status: "stable", - }, { // appearance:base-select for