diff --git a/DEPS b/DEPS index 853eb53..aa71c000 100644 --- a/DEPS +++ b/DEPS
@@ -305,11 +305,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'src_internal_revision': 'd9853f3ce8dce7ce84f0c2701cf93bfbed617347', + 'src_internal_revision': '3ddd5788bd026e3ed8a3f674c273a6030f54e656', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '4cc541b8014920519c812cca60d48c584a9a7425', + 'skia_revision': '359f3d7cc7edfcb93e99ab5ed7e9f2f5fdd8ef85', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -317,7 +317,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'd82a5821d42ff564e2e45f69ad99bcb997f5ef4e', + 'angle_revision': '2d28e33f7a654e8e0553c13bac09fa688b6c1acb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -357,7 +357,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': '61a423426089e65c27699d824303f209026b2f05', + 'freetype_revision': 'c6cf32de3b3582d0eea9f6372121f0f07d22ae68', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling HarfBuzz # and whatever else without interference from each other. @@ -397,7 +397,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'c6af98d7a7a5cdb38791e6861f6e75cc98251ca7', + 'devtools_frontend_revision': '5c0782b1ec316a185616cd76223d66c8b2b4dbbb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -421,7 +421,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '6bab1bd9fd23c03ab2b0f26e9b489e0b6b1844f2', + 'dawn_revision': 'b0a54bfe2da42392af08f2cfa3d9cf023650a61e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -537,7 +537,7 @@ # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '65a5746fb4cc5fd7fdd1773b0c50bc556ff8900a', + 'libcxx_revision': '23b5bc93867b93b73f7be97cf2e8a71e95770e07', # GN CIPD package version. 'gn_version': 'git_revision:5d0a4153b0bcc86c5a23310d5b648a587be3c56d', @@ -1212,7 +1212,7 @@ 'packages': [ { 'package': 'chromium/chrome/android/orderfiles/arm64', - 'version': 'Ul34k1el1z0LA--qJ9VP_0h5ZIZ9blHmq8DRSB0FtHAC', + 'version': 'Y0AWgaivgW6UpW6RIrsVLJG2p5zUsR7Hrx1g6tkWnN0C', }, ], 'condition': 'checkout_android', @@ -1278,7 +1278,7 @@ 'packages': [ { 'package': 'chromium/third_party/updater/chrome_mac_universal_prod', - 'version': 'version:2@141.0.7340.0', + 'version': 'version:2@141.0.7376.0', }, ], }, @@ -1613,7 +1613,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'ced3635c6f861e027c3f1c20a71be39b4fd724d1', + 'adb0ed24d1920f5972d5e07ce95ed892fdb9e1f5', 'condition': 'checkout_android and checkout_src_internal', }, @@ -1763,7 +1763,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'PZIMSQQlA-lyFob400zXKrWJc17eh0huam1uufEo8WcC', + 'version': '9VwlGkB8Od7UMCZj0NCB0GkJNQ-pnEfIX1Sm0WH-udgC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2641,7 +2641,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '9e99848ef108842c9c6f1fefe5bf8d4fd44c8496', + Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + 'd17b40b3b5e36f3744f1d010fe3ba2d3c55559c0', 'src/base/tracing/test/data': { 'bucket': 'perfetto', @@ -3012,7 +3012,7 @@ Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '3f6f3decfcf874544fd2afff11e0c26bdf9b6fdb', + Var('webrtc_git') + '/src.git' + '@' + 'db0e64c5e80168839d74ae0cc6173ccd537ae211', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -3156,7 +3156,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'KgO-CzQigL3-F-4NZv58uZTilUmQAs8OT8rHVAG_zzAC', + 'version': 'ec0BRXe3YCu9PlxJCawlfnbd2ckGAWv6Co5au7j93ywC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -3167,7 +3167,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'gpSHAS6hX4m5EaoM0ftR_cQhzztQUhXygvk1ck6EqxEC', + 'version': '_bhVqXqUyoRAYI-5YOBCYLquNjw2jfPYdSnrpvSBQ-MC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -3793,7 +3793,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - '3feaf40d64066b385cb8b00b672e1aafe6d83978', + '684211821a75efa2da3fad3310385a55308a3da6', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 6a5d0525..c9468fa 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -7022,7 +7022,7 @@ results.append( output_api.PresubmitError( 'Do not include actual screenshots in the changelist. Run ' - 'tools/translate/upload_screenshots.py to upload them instead:', + 'tools/translation/upload_screenshots.py to upload them instead:', sorted(unnecessary_screenshots))) if missing_sha1: @@ -7038,7 +7038,7 @@ output_api.PresubmitError( 'The following files do not seem to contain valid sha1 hashes. ' 'Make sure they contain hashes created by ' - 'tools/translate/upload_screenshots.py:', + 'tools/translation/upload_screenshots.py:', sorted(invalid_sha1))) if missing_sha1_modified:
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py index b9e3c8f1..cc95f2e 100755 --- a/PRESUBMIT_test.py +++ b/PRESUBMIT_test.py
@@ -3698,7 +3698,7 @@ VALID_SHA1 = ('0000000000000000000000000000000000000000', ) DO_NOT_UPLOAD_PNG_MESSAGE = ('Do not include actual screenshots in the ' 'changelist. Run ' - 'tools/translate/upload_screenshots.py to ' + 'tools/translation/upload_screenshots.py to ' 'upload them instead:') ADD_SIGNATURES_MESSAGE = ('You are adding UI strings.\n' 'To ensure the best translations, take ' @@ -3714,7 +3714,7 @@ SHA1_FORMAT_MESSAGE = ( 'The following files do not seem to contain valid sha1 ' 'hashes. Make sure they contain hashes created by ' - 'tools/translate/upload_screenshots.py:') + 'tools/translation/upload_screenshots.py:') def makeInputApi(self, files): input_api = MockInputApi()
diff --git a/android_webview/browser/aw_web_contents_delegate.cc b/android_webview/browser/aw_web_contents_delegate.cc index 7d122dfa..20f9883 100644 --- a/android_webview/browser/aw_web_contents_delegate.cc +++ b/android_webview/browser/aw_web_contents_delegate.cc
@@ -39,6 +39,7 @@ #include "third_party/blink/public/common/mediastream/media_stream_request.h" #include "third_party/blink/public/common/permissions/permission_utils.h" #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h" +#include "url/gurl.h" // Must come after all headers that specialize FromJniType() / ToJniType(). #include "android_webview/browser_jni_headers/AwWebContentsDelegate_jni.h" @@ -377,7 +378,7 @@ } content::NavigationController::UserAgentOverrideOption -AwWebContentsDelegate::ShouldOverrideUserAgentForPrerender2() { +AwWebContentsDelegate::ShouldOverrideUserAgentForPrerender2(const GURL& url) { // For WebView, always use the user agent override, which is set every time // the user agent in AwSettings is modified. return content::NavigationController::UA_OVERRIDE_TRUE;
diff --git a/android_webview/browser/aw_web_contents_delegate.h b/android_webview/browser/aw_web_contents_delegate.h index 5291ac2c..31bf3a5 100644 --- a/android_webview/browser/aw_web_contents_delegate.h +++ b/android_webview/browser/aw_web_contents_delegate.h
@@ -5,6 +5,7 @@ #ifndef ANDROID_WEBVIEW_BROWSER_AW_WEB_CONTENTS_DELEGATE_H_ #define ANDROID_WEBVIEW_BROWSER_AW_WEB_CONTENTS_DELEGATE_H_ +#include "base/memory/scoped_refptr.h" #include "components/embedder_support/android/delegate/web_contents_delegate_android.h" namespace android_webview { @@ -87,7 +88,7 @@ content::PreloadingTriggerType trigger_type) override; int AllowedPrerenderingCount(content::WebContents& web_contents) override; content::NavigationController::UserAgentOverrideOption - ShouldOverrideUserAgentForPrerender2() override; + ShouldOverrideUserAgentForPrerender2(const GURL& url) override; bool ShouldAllowPartialParamMismatchOfPrerender2( content::NavigationHandle& navigation_handle) override;
diff --git a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index 382f67c..50bdda6b 100644 --- a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -1643,6 +1643,7 @@ attribute @@unscopables getter URL getter activeElement + getter activeViewTransition getter adoptedStyleSheets getter alinkColor getter all
diff --git a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt index f47a293..012bc2e 100644 --- a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt +++ b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
@@ -987,6 +987,9 @@ setter x setter y setter z +interface CSSRouteRule : CSSConditionRule + attribute @@toStringTag + method constructor interface CSSRule attribute @@toStringTag attribute CHARSET_RULE
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 4e9b789..28fa7a5 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -324,28 +324,6 @@ "ash_export.h", "ash_interfaces.cc", "ash_prefs.cc", - "assistant/assistant_alarm_timer_controller_impl.cc", - "assistant/assistant_alarm_timer_controller_impl.h", - "assistant/assistant_controller_impl.cc", - "assistant/assistant_controller_impl.h", - "assistant/assistant_interaction_controller_impl.cc", - "assistant/assistant_interaction_controller_impl.h", - "assistant/assistant_notification_controller_impl.cc", - "assistant/assistant_notification_controller_impl.h", - "assistant/assistant_notification_expiry_monitor.cc", - "assistant/assistant_notification_expiry_monitor.h", - "assistant/assistant_setup_controller.cc", - "assistant/assistant_setup_controller.h", - "assistant/assistant_state_controller.cc", - "assistant/assistant_state_controller.h", - "assistant/assistant_suggestions_controller_impl.cc", - "assistant/assistant_suggestions_controller_impl.h", - "assistant/assistant_ui_controller_impl.cc", - "assistant/assistant_ui_controller_impl.h", - "assistant/assistant_view_delegate_impl.cc", - "assistant/assistant_view_delegate_impl.h", - "assistant/assistant_web_view_delegate_impl.cc", - "assistant/assistant_web_view_delegate_impl.h", "auth/active_session_auth_controller_impl.cc", "auth/active_session_auth_controller_impl.h", "auth/active_session_auth_metrics_recorder.cc", @@ -572,6 +550,8 @@ "curtain/security_curtain_widget_controller.h", "curtain/session.cc", "curtain/session.h", + "curtain/stack_layout.cc", + "curtain/stack_layout.h", "dbus/ash_dbus_services.cc", "dbus/ash_dbus_services.h", "dbus/display_service_provider.cc", @@ -3351,8 +3331,6 @@ "//ash/app_list", "//ash/app_menu", "//ash/assistant/model", - "//ash/assistant/ui", - "//ash/assistant/ui:constants", "//ash/assistant/util", "//ash/birch:removed_items_proto", "//ash/constants", @@ -3623,7 +3601,6 @@ allow_circular_includes_from = [ "//ash/app_list", - "//ash/assistant/ui", "//ash/in_session_auth", "//ash/quick_pair/companion_app", "//ash/quick_pair/feature_status_tracker", @@ -4603,9 +4580,6 @@ "//ash/app_list:unit_tests", "//ash/app_menu", "//ash/assistant/model", - "//ash/assistant/ui", - "//ash/assistant/ui:constants", - "//ash/assistant/ui/colors:assistant_colors_views", "//ash/assistant/util", "//ash/constants", "//ash/dbus:privacy_screen_proto", @@ -4954,8 +4928,6 @@ ":test_support", "//ash/app_list", "//ash/app_list:test_support", - "//ash/assistant/ui", - "//ash/assistant/ui:constants", "//ash/in_session_auth", "//ash/public/cpp", "//ash/public/cpp:test_support", @@ -5427,8 +5399,6 @@ "//ash/app_list:test_support", "//ash/app_menu", "//ash/assistant/model", - "//ash/assistant/ui", - "//ash/assistant/ui:constants", "//ash/constants", "//ash/in_session_auth", "//ash/keyboard/ui",
diff --git a/ash/accelerators/accelerator_commands.cc b/ash/accelerators/accelerator_commands.cc index a6ce171..9eb0d68 100644 --- a/ash/accelerators/accelerator_commands.cc +++ b/ash/accelerators/accelerator_commands.cc
@@ -13,7 +13,6 @@ #include "ash/accessibility/magnifier/docked_magnifier_controller.h" #include "ash/accessibility/magnifier/fullscreen_magnifier_controller.h" #include "ash/app_list/app_list_controller_impl.h" -#include "ash/assistant/assistant_controller_impl.h" #include "ash/capture_mode/capture_mode_camera_controller.h" #include "ash/capture_mode/capture_mode_controller.h" #include "ash/clipboard/clipboard_history_controller_impl.h" @@ -33,7 +32,6 @@ #include "ash/public/cpp/accelerator_actions.h" #include "ash/public/cpp/annotator/annotator_controller_base.h" #include "ash/public/cpp/app_types_util.h" -#include "ash/public/cpp/assistant/assistant_state.h" #include "ash/public/cpp/capture_mode/capture_mode_api.h" #include "ash/public/cpp/new_window_delegate.h" #include "ash/public/cpp/system/toast_data.h" @@ -97,7 +95,7 @@ #include "base/time/time.h" #include "chromeos/ash/components/audio/cras_audio_handler.h" #include "chromeos/ash/components/dbus/biod/fake_biod_client.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_enums.h" +#include "chromeos/ash/services/assistant/public/cpp/assistant_browser_delegate.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/ui/base/display_util.h" #include "chromeos/ui/base/window_properties.h" @@ -145,8 +143,6 @@ // Percent by which the volume should be changed when a volume key is pressed. constexpr double kStepPercentage = 4.0; constexpr char kVirtualDesksToastId[] = "virtual_desks_toast"; -// Toast id for Assistant shortcuts. -constexpr char kAssistantErrorToastId[] = "assistant_error"; // Toast ID for the notification center tray "No notifications" toast. constexpr char kNotificationCenterTrayNoNotificationsToastId[] = "notification_center_tray_toast_ids.no_notifications"; @@ -1346,73 +1342,7 @@ } void ToggleAssistant() { - using assistant::AssistantAllowedState; - switch (AssistantState::Get()->allowed_state().value_or( - AssistantAllowedState::ALLOWED)) { - case AssistantAllowedState::DISALLOWED_BY_NONPRIMARY_USER: - // Show a toast if the active user is not primary. - ShowToast(kAssistantErrorToastId, ToastCatalogName::kAssistantError, - l10n_util::GetStringUTF16( - IDS_ASH_ASSISTANT_SECONDARY_USER_TOAST_MESSAGE)); - return; - case AssistantAllowedState::DISALLOWED_BY_LOCALE: - // Show a toast if the Assistant is disabled due to unsupported - // locales. - ShowToast(kAssistantErrorToastId, ToastCatalogName::kAssistantError, - l10n_util::GetStringUTF16( - IDS_ASH_ASSISTANT_LOCALE_UNSUPPORTED_TOAST_MESSAGE)); - return; - case AssistantAllowedState::DISALLOWED_BY_POLICY: - // Show a toast if the Assistant is disabled due to enterprise policy. - ShowToast(kAssistantErrorToastId, ToastCatalogName::kAssistantError, - l10n_util::GetStringUTF16( - IDS_ASH_ASSISTANT_DISABLED_BY_POLICY_MESSAGE)); - return; - case AssistantAllowedState::DISALLOWED_BY_DEMO_MODE: - // Show a toast if the Assistant is disabled due to being in Demo - // Mode. - ShowToast(kAssistantErrorToastId, ToastCatalogName::kAssistantError, - l10n_util::GetStringUTF16( - IDS_ASH_ASSISTANT_DISABLED_IN_DEMO_MODE_MESSAGE)); - return; - case AssistantAllowedState::DISALLOWED_BY_PUBLIC_SESSION: - // Show a toast if the Assistant is disabled due to being in public - // session. - ShowToast(kAssistantErrorToastId, ToastCatalogName::kAssistantError, - l10n_util::GetStringUTF16( - IDS_ASH_ASSISTANT_DISABLED_IN_PUBLIC_SESSION_MESSAGE)); - return; - case AssistantAllowedState::DISALLOWED_BY_INCOGNITO: - // Show a toast if the Assistant is disabled due to being in Incognito - // mode. - ShowToast(kAssistantErrorToastId, ToastCatalogName::kAssistantError, - l10n_util::GetStringUTF16( - IDS_ASH_ASSISTANT_DISABLED_IN_GUEST_MESSAGE)); - return; - case AssistantAllowedState::DISALLOWED_BY_ACCOUNT_TYPE: - // Show a toast if the Assistant is disabled due to the account type. - ShowToast(kAssistantErrorToastId, ToastCatalogName::kAssistantError, - l10n_util::GetStringUTF16( - IDS_ASH_ASSISTANT_DISABLED_BY_ACCOUNT_MESSAGE)); - return; - case AssistantAllowedState::DISALLOWED_BY_KIOSK_MODE: - // No need to show toast in KIOSK mode. - return; - case AssistantAllowedState::DISALLOWED_BY_NO_BINARY: - // No need to show toast. - return; - case AssistantAllowedState::DISALLOWED_BY_NEW_ENTRY_POINT: - // Showing new entry point instead. - AssistantUiController::Get()->ShowUi( - assistant::AssistantEntryPoint::kHotkey); - return; - case AssistantAllowedState::ALLOWED: - // Nothing need to do if allowed. - break; - } - AssistantUiController::Get()->ToggleUi( - /*entry_point=*/assistant::AssistantEntryPoint::kHotkey, - /*exit_point=*/assistant::AssistantExitPoint::kHotkey); + assistant::AssistantBrowserDelegate::Get()->OpenNewEntryPoint(); } void ToggleCalendar() {
diff --git a/ash/accelerators/accelerator_unittest.cc b/ash/accelerators/accelerator_unittest.cc index 1e186f48..d98e4a5 100644 --- a/ash/accelerators/accelerator_unittest.cc +++ b/ash/accelerators/accelerator_unittest.cc
@@ -9,8 +9,6 @@ #include "ash/accelerators/accelerator_controller_impl.h" #include "ash/app_list/test/app_list_test_helper.h" -#include "ash/assistant/model/assistant_ui_model.h" -#include "ash/public/cpp/assistant/controller/assistant_ui_controller.h" #include "ash/shell.h" #include "ash/shell_observer.h" #include "ash/system/network/network_observer.h" @@ -208,8 +206,6 @@ /*control=*/false, /*shift=*/false, /*alt=*/false, /*command=*/false); EXPECT_TRUE(open_new_entry_point_future.Wait()); - EXPECT_EQ(0, user_action_tester.GetActionCount( - "VoiceInteraction.Started.Assistant")); EXPECT_EQ(1, user_action_tester.GetActionCount( "Assistant.NewEntryPoint.AssistantKey")); }
diff --git a/ash/accelerators/keyboard_code_util.cc b/ash/accelerators/keyboard_code_util.cc index 5401b52..111fa92 100644 --- a/ash/accelerators/keyboard_code_util.cc +++ b/ash/accelerators/keyboard_code_util.cc
@@ -5,8 +5,6 @@ #include "ash/accelerators/keyboard_code_util.h" #include "ash/public/cpp/accelerators_util.h" -#include "ash/public/cpp/assistant/assistant_state.h" -#include "ash/public/cpp/assistant/assistant_state_base.h" #include "ash/resources/vector_icons/vector_icons.h" #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" @@ -71,12 +69,6 @@ return l10n_util::GetStringUTF16(msg_id); } -bool IsAssistantAvailable() { - AssistantStateBase* state = AssistantState::Get(); - return state->allowed_state() == assistant::AssistantAllowedState::ALLOWED && - state->settings_enabled().value_or(false); -} - } // namespace std::u16string GetStringForKeyboardCode(ui::KeyboardCode key_code, @@ -157,9 +149,7 @@ case ui::mojom::MetaKey::kSearch: return &kCaptureModeDemoToolsSearchIcon; case ui::mojom::MetaKey::kLauncher: - return IsAssistantAvailable() - ? &kCaptureModeDemoToolsLauncherAssistantOnIcon - : &kCaptureModeDemoToolsLauncherAssistantOffIcon; + return &kCaptureModeDemoToolsLauncherAssistantOffIcon; case ui::mojom::MetaKey::kLauncherRefresh: return &kCampbellHeroIcon; case ui::mojom::MetaKey::kExternalMeta:
diff --git a/ash/ambient/ambient_controller.cc b/ash/ambient/ambient_controller.cc index 848db1f2..68be7600 100644 --- a/ash/ambient/ambient_controller.cc +++ b/ash/ambient/ambient_controller.cc
@@ -34,7 +34,6 @@ #include "ash/ambient/ui/ambient_container_view.h" #include "ash/ambient/ui/ambient_view_delegate.h" #include "ash/ambient/util/ambient_util.h" -#include "ash/assistant/model/assistant_interaction_model.h" #include "ash/login/ui/lock_screen.h" #include "ash/public/cpp/ambient/ambient_backend_controller.h" #include "ash/public/cpp/ambient/ambient_client.h" @@ -43,7 +42,6 @@ #include "ash/public/cpp/ambient/ambient_ui_model.h" #include "ash/public/cpp/ambient/common/ambient_settings.h" #include "ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h" -#include "ash/public/cpp/assistant/controller/assistant_interaction_controller.h" #include "ash/public/cpp/shell_window_ids.h" #include "ash/root_window_controller.h" #include "ash/session/session_controller_impl.h" @@ -68,7 +66,6 @@ #include "build/buildflag.h" #include "cc/paint/skottie_wrapper.h" #include "chromeos/ash/components/assistant/buildflags.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" #include "chromeos/components/kiosk/kiosk_utils.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/power_manager/backlight.pb.h" @@ -319,10 +316,6 @@ ClearPreTargetHandler(); - // Should stop observing AssistantInteractionModel when ambient screen is - // not shown. - AssistantInteractionController::Get()->GetModel()->RemoveObserver(this); - if (visibility == AmbientUiVisibility::kHidden) { if (LockScreen::HasInstance()) { // Add observer for user activity. @@ -586,7 +579,7 @@ return; } // While |kPreview| is loading, don't |DismissUI| on user activity. - // Users can still |DismissUI| with mouse, touch, key or assistant events. + // Users can still |DismissUI| with mouse, touch, key. if (ambient_ui_model_.ui_visibility() == AmbientUiVisibility::kPreview && !IsShowing()) { return; @@ -629,14 +622,6 @@ DismissUI(); } -void AmbientController::OnInteractionStateChanged( - InteractionState interaction_state) { - if (interaction_state == InteractionState::kActive) { - // Assistant is active. - DismissUI(); - } -} - void AmbientController::SetUiVisibilityShouldShow() { DVLOG(1) << __func__; @@ -1214,9 +1199,6 @@ if (!user_activity_observer_.IsObserving()) user_activity_observer_.Observe(ui::UserActivityDetector::Get()); - // Add observer for assistant interaction model - AssistantInteractionController::Get()->GetModel()->AddObserver(this); - session_metrics_recorder_ = std::make_unique<AmbientSessionMetricsRecorder>( ambient_ui_launcher_->CreateMetricsDelegate(GetCurrentUiSettings()));
diff --git a/ash/ambient/ambient_controller.h b/ash/ambient/ambient_controller.h index 57974e75..16412bc 100644 --- a/ash/ambient/ambient_controller.h +++ b/ash/ambient/ambient_controller.h
@@ -19,7 +19,6 @@ #include "ash/ambient/resources/ambient_dlc_background_installer.h" #include "ash/ambient/ui/ambient_view_delegate.h" #include "ash/ash_export.h" -#include "ash/assistant/model/assistant_interaction_model_observer.h" #include "ash/public/cpp/ambient/ambient_ui_model.h" #include "ash/public/cpp/screen_backlight_observer.h" #include "ash/public/cpp/session/session_observer.h" @@ -68,7 +67,6 @@ public device::mojom::FingerprintObserver, public ui::UserActivityObserver, public ui::EventHandler, - public AssistantInteractionModelObserver, public AmbientUiLauncher::Observer { public: static void RegisterProfilePrefs(PrefRegistrySimple* registry); @@ -121,9 +119,6 @@ void OnMouseEvent(ui::MouseEvent* event) override; void OnTouchEvent(ui::TouchEvent* event) override; - // AssistantInteractionModelObserver: - void OnInteractionStateChanged(InteractionState interaction_state) override; - // AmbientUiLauncher::Observer: void OnReadyStateChanged(bool is_ready) override;
diff --git a/ash/ambient/ambient_controller_unittest.cc b/ash/ambient/ambient_controller_unittest.cc index 73d78354..1895b1d 100644 --- a/ash/ambient/ambient_controller_unittest.cc +++ b/ash/ambient/ambient_controller_unittest.cc
@@ -23,7 +23,6 @@ #include "ash/ambient/ui/photo_view.h" #include "ash/ambient/util/ambient_util.h" #include "ash/ambient/util/time_of_day_utils.h" -#include "ash/assistant/assistant_interaction_controller_impl.h" #include "ash/constants/ambient_time_of_day_constants.h" #include "ash/constants/ambient_video.h" #include "ash/constants/ash_paths.h" @@ -79,7 +78,6 @@ namespace { using ash::personalization_app::mojom::AmbientTheme; -using assistant::AssistantInteractionMetadata; constexpr char kUser1[] = "user1@gmail.com"; constexpr char kUser2[] = "user2@gmail.com"; @@ -1488,28 +1486,6 @@ EXPECT_FALSE(ctrl->power_status_observer_.IsObserving()); } -TEST_P(AmbientControllerTestForAnyUiSettings, - ShowDismissAmbientScreenUponAssistantQuery) { - if (ash::assistant::features::IsNewEntryPointEnabled()) { - GTEST_SKIP() << "Assistant is not available if new entry point is enabled. " - "crbug.com/388361414"; - } - - // Without user interaction, should show ambient mode. - SetAmbientShownAndWaitForWidgets(); - EXPECT_TRUE(ambient_controller()->ShouldShowAmbientUi()); - - // Trigger Assistant interaction. - static_cast<AssistantInteractionControllerImpl*>( - AssistantInteractionController::Get()) - ->OnInteractionStarted(AssistantInteractionMetadata()); - base::RunLoop().RunUntilIdle(); - - // Ambient screen should dismiss. - EXPECT_TRUE(GetContainerViews().empty()); - EXPECT_FALSE(ambient_controller()->ShouldShowAmbientUi()); -} - // For all test cases that depend on ash ambient resources (lottie files, image // assets, etc) being present to run. #if BUILDFLAG(HAS_ASH_AMBIENT_ANIMATION_RESOURCES)
diff --git a/ash/ambient/ui/photo_view_unittest.cc b/ash/ambient/ui/photo_view_unittest.cc index 20ac0006..b6fb1ef 100644 --- a/ash/ambient/ui/photo_view_unittest.cc +++ b/ash/ambient/ui/photo_view_unittest.cc
@@ -9,7 +9,6 @@ #include "ash/ambient/ambient_ui_settings.h" #include "ash/ambient/test/ambient_ash_test_base.h" #include "ash/ambient/ui/ambient_container_view.h" -#include "ash/assistant/ui/assistant_view_ids.h" #include "ash/public/cpp/ambient/proto/photo_cache_entry.pb.h" #include "ash/webui/personalization_app/mojom/personalization_app.mojom-shared.h" #include "base/strings/string_number_conversions.h"
diff --git a/ash/ash_prefs.cc b/ash/ash_prefs.cc index 5250336d..9343b39d 100644 --- a/ash/ash_prefs.cc +++ b/ash/ash_prefs.cc
@@ -13,7 +13,6 @@ #include "ash/ambient/managed/screensaver_images_policy_handler.h" #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/views/app_list_nudge_controller.h" -#include "ash/assistant/assistant_controller_impl.h" #include "ash/birch/birch_coral_provider.h" #include "ash/birch/birch_item.h" #include "ash/birch/birch_model.h"
diff --git a/ash/assistant/assistant_alarm_timer_controller_impl.cc b/ash/assistant/assistant_alarm_timer_controller_impl.cc deleted file mode 100644 index 1e931c8..0000000 --- a/ash/assistant/assistant_alarm_timer_controller_impl.cc +++ /dev/null
@@ -1,494 +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. - -#include "ash/assistant/assistant_alarm_timer_controller_impl.h" - -#include <cmath> -#include <utility> - -#include "ash/assistant/assistant_controller_impl.h" -#include "ash/assistant/assistant_notification_controller_impl.h" -#include "ash/assistant/util/deep_link_util.h" -#include "ash/strings/grit/ash_strings.h" -#include "base/containers/contains.h" -#include "base/functional/bind.h" -#include "base/i18n/message_formatter.h" -#include "base/strings/utf_string_conversions.h" -#include "base/time/time.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" -#include "chromeos/ash/services/assistant/public/cpp/features.h" -#include "chromeos/ash/services/libassistant/public/cpp/assistant_notification.h" -#include "chromeos/ash/services/libassistant/public/cpp/assistant_timer.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "third_party/icu/source/common/unicode/utypes.h" -#include "third_party/icu/source/i18n/unicode/measfmt.h" -#include "third_party/icu/source/i18n/unicode/measunit.h" -#include "third_party/icu/source/i18n/unicode/measure.h" -#include "ui/base/l10n/l10n_util.h" - -namespace ash { - -namespace { - -using assistant::AssistantNotification; -using assistant::AssistantNotificationButton; -using assistant::AssistantNotificationPriority; -using assistant::AssistantTimer; -using assistant::AssistantTimerState; -using assistant::util::AlarmTimerAction; - -// Grouping key and ID prefix for timer notifications. -constexpr char kTimerNotificationGroupingKey[] = "assistant/timer"; -constexpr char kTimerNotificationIdPrefix[] = "assistant/timer"; - -// Helpers --------------------------------------------------------------------- - -std::string ToFormattedTimeString(base::TimeDelta time, - UMeasureFormatWidth width) { - DCHECK(width == UMEASFMT_WIDTH_NARROW || width == UMEASFMT_WIDTH_NUMERIC); - - // Method aliases to prevent line-wrapping below. - const auto createHour = icu::MeasureUnit::createHour; - const auto createMinute = icu::MeasureUnit::createMinute; - const auto createSecond = icu::MeasureUnit::createSecond; - - // We round |total_seconds| to the nearest full second since we don't display - // our time string w/ millisecond granularity and because this method is - // called very near to full second boundaries. Otherwise, values like 4.99 sec - // would be displayed to the user as "0:04" instead of the expected "0:05". - const int64_t total_seconds = std::abs(std::round(time.InSecondsF())); - - // Calculate time in hours/minutes/seconds. - const int32_t hours = total_seconds / 3600; - const int32_t minutes = (total_seconds - hours * 3600) / 60; - const int32_t seconds = total_seconds % 60; - - // Success of the ICU APIs is tracked by |status|. - UErrorCode status = U_ZERO_ERROR; - - // Create our distinct |measures| to be formatted. - std::vector<icu::Measure> measures; - - // We only show |hours| if necessary. - if (hours) - measures.emplace_back(hours, createHour(status), status); - - // We only show |minutes| if necessary or if using numeric format |width|. - if (minutes || width == UMEASFMT_WIDTH_NUMERIC) - measures.emplace_back(minutes, createMinute(status), status); - - // We only show |seconds| if necessary or if using numeric format |width|. - if (seconds || width == UMEASFMT_WIDTH_NUMERIC) - measures.emplace_back(seconds, createSecond(status), status); - - // Format our |measures| into a |unicode_message|. - icu::UnicodeString unicode_message; - icu::FieldPosition field_position = icu::FieldPosition::DONT_CARE; - icu::MeasureFormat measure_format(icu::Locale::getDefault(), width, status); - measure_format.formatMeasures(measures.data(), measures.size(), - unicode_message, field_position, status); - - std::string formatted_time; - if (U_SUCCESS(status)) { - // If formatting was successful, convert our |unicode_message| into UTF-8. - unicode_message.toUTF8String(formatted_time); - } else { - // If something went wrong formatting w/ ICU, fall back to I18N messages. - LOG(ERROR) << "Error formatting time string: " << status; - formatted_time = - base::UTF16ToUTF8(base::i18n::MessageFormatter::FormatWithNumberedArgs( - l10n_util::GetStringUTF16( - width == UMEASFMT_WIDTH_NARROW - ? IDS_ASSISTANT_TIMER_NOTIFICATION_FORMATTED_TIME_NARROW_FALLBACK - : IDS_ASSISTANT_TIMER_NOTIFICATION_FORMATTED_TIME_NUMERIC_FALLBACK), - hours, minutes, seconds)); - } - - // If necessary, negate the amount of time remaining. - if (time.InSeconds() < 0) { - formatted_time = - base::UTF16ToUTF8(base::i18n::MessageFormatter::FormatWithNumberedArgs( - l10n_util::GetStringUTF16( - IDS_ASSISTANT_TIMER_NOTIFICATION_FORMATTED_TIME_NEGATE), - formatted_time)); - } - - return formatted_time; -} - -// Returns a string representation of the original duration for a given |timer|. -std::string ToOriginalDurationString(const AssistantTimer& timer) { - return ToFormattedTimeString(timer.original_duration, UMEASFMT_WIDTH_NARROW); -} - -// Returns a string representation of the remaining time for the given |timer|. -std::string ToRemainingTimeString(const AssistantTimer& timer) { - return ToFormattedTimeString(timer.remaining_time, UMEASFMT_WIDTH_NUMERIC); -} - -// Creates a notification ID for the given |timer|. It is guaranteed that this -// method will always return the same notification ID given the same timer. -std::string CreateTimerNotificationId(const AssistantTimer& timer) { - return std::string(kTimerNotificationIdPrefix) + timer.id; -} - -// Creates a notification title for the given |timer|. -std::string CreateTimerNotificationTitle(const AssistantTimer& timer) { - return ToRemainingTimeString(timer); -} - -// Creates a notification message for the given |timer|. -std::string CreateTimerNotificationMessage(const AssistantTimer& timer) { - if (timer.label.empty()) { - return base::UTF16ToUTF8( - base::i18n::MessageFormatter::FormatWithNumberedArgs( - l10n_util::GetStringUTF16( - timer.state == AssistantTimerState::kFired - ? IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WHEN_FIRED - : IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE), - ToOriginalDurationString(timer))); - } - return base::UTF16ToUTF8(base::i18n::MessageFormatter::FormatWithNumberedArgs( - l10n_util::GetStringUTF16( - timer.state == AssistantTimerState::kFired - ? IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WHEN_FIRED_WITH_LABEL - : IDS_ASSISTANT_TIMER_NOTIFICATION_MESSAGE_WITH_LABEL), - ToOriginalDurationString(timer), timer.label)); -} - -// Creates notification buttons for the given |timer|. -std::vector<AssistantNotificationButton> CreateTimerNotificationButtons( - const AssistantTimer& timer) { - std::vector<AssistantNotificationButton> buttons; - - if (timer.state != AssistantTimerState::kFired) { - if (timer.state == AssistantTimerState::kPaused) { - // "RESUME" button. - buttons.push_back({l10n_util::GetStringUTF8( - IDS_ASSISTANT_TIMER_NOTIFICATION_RESUME_BUTTON), - assistant::util::CreateAlarmTimerDeepLink( - AlarmTimerAction::kResumeTimer, timer.id) - .value(), - /*remove_notification_on_click=*/false}); - } else { - // "PAUSE" button. - buttons.push_back({l10n_util::GetStringUTF8( - IDS_ASSISTANT_TIMER_NOTIFICATION_PAUSE_BUTTON), - assistant::util::CreateAlarmTimerDeepLink( - AlarmTimerAction::kPauseTimer, timer.id) - .value(), - /*remove_notification_on_click=*/false}); - } - } - - if (timer.state == AssistantTimerState::kFired) { - // "STOP" button. - buttons.push_back( - {l10n_util::GetStringUTF8(IDS_ASSISTANT_TIMER_NOTIFICATION_STOP_BUTTON), - assistant::util::CreateAlarmTimerDeepLink( - AlarmTimerAction::kRemoveAlarmOrTimer, timer.id) - .value(), - /*remove_notification_on_click=*/true}); - - // "ADD 1 MIN" button. - buttons.push_back( - {l10n_util::GetStringUTF8( - IDS_ASSISTANT_TIMER_NOTIFICATION_ADD_1_MIN_BUTTON), - assistant::util::CreateAlarmTimerDeepLink( - AlarmTimerAction::kAddTimeToTimer, timer.id, base::Minutes(1)) - .value(), - /*remove_notification_on_click=*/false}); - } else { - // "CANCEL" button. - buttons.push_back({l10n_util::GetStringUTF8( - IDS_ASSISTANT_TIMER_NOTIFICATION_CANCEL_BUTTON), - assistant::util::CreateAlarmTimerDeepLink( - AlarmTimerAction::kRemoveAlarmOrTimer, timer.id) - .value(), - /*remove_notification_on_click=*/true}); - } - - return buttons; -} - -// Creates a timer notification priority for the given |timer|. -AssistantNotificationPriority CreateTimerNotificationPriority( - const AssistantTimer& timer) { - // In timers v2, a notification for a |kFired| timer is |kHigh| priority. - // This will cause the notification to pop up to the user. - if (timer.state == AssistantTimerState::kFired) - return AssistantNotificationPriority::kHigh; - - // If the notification has lived for at least |kPopupThreshold|, drop the - // priority to |kLow| so that the notification will not pop up to the user. - constexpr base::TimeDelta kPopupThreshold = base::Seconds(6); - const base::TimeDelta lifetime = - base::Time::Now() - timer.creation_time.value_or(base::Time::Now()); - if (lifetime >= kPopupThreshold) - return AssistantNotificationPriority::kLow; - - // Otherwise, the notification is |kDefault| priority. This means that it - // may or may not pop up to the user, depending on the presence of other - // notifications. - return AssistantNotificationPriority::kDefault; -} - -// Creates a notification for the given |timer|. -AssistantNotification CreateTimerNotification( - const AssistantTimer& timer, - const AssistantNotification* existing_notification = nullptr) { - AssistantNotification notification; - notification.title = CreateTimerNotificationTitle(timer); - notification.message = CreateTimerNotificationMessage(timer); - notification.buttons = CreateTimerNotificationButtons(timer); - notification.client_id = CreateTimerNotificationId(timer); - notification.grouping_key = kTimerNotificationGroupingKey; - notification.priority = CreateTimerNotificationPriority(timer); - notification.remove_on_click = false; - notification.is_pinned = false; - - // If we are creating a notification to replace an |existing_notification| and - // our new notification has higher priority, we want the system to "renotify" - // the user of the notification change. This will cause the new notification - // to popup to the user even if it was previously marked as read. - if (existing_notification && - notification.priority > existing_notification->priority) { - notification.renotify = true; - } - - return notification; -} - -// Returns whether an |update| from LibAssistant to the specified |original| -// timer is allowed. Updates are always allowed in v1, only conditionally in v2. -bool ShouldAllowUpdateFromLibAssistant(const AssistantTimer& original, - const AssistantTimer& update) { - // If |id| is not equal, then |update| does refer to the |original| timer. - DCHECK_EQ(original.id, update.id); - - // In v2, updates are only allowed from LibAssistant if they are significant. - // We may receive an update due to a state change in another timer, and we'd - // want to discard the update to this timer to avoid introducing UI jank by - // updating its notification outside of its regular tick interval. In v2, we - // also update timer state from |kScheduled| to |kFired| ourselves to work - // around latency in receiving the event from LibAssistant. When we do so, we - // expect to later receive the state change from LibAssistant but discard it. - return !original.IsEqualInLibAssistantTo(update); -} - -} // namespace - -// AssistantAlarmTimerControllerImpl ------------------------------------------ - -AssistantAlarmTimerControllerImpl::AssistantAlarmTimerControllerImpl( - AssistantControllerImpl* assistant_controller) - : assistant_controller_(assistant_controller) { - model_.AddObserver(this); - assistant_controller_observation_.Observe(AssistantController::Get()); -} - -AssistantAlarmTimerControllerImpl::~AssistantAlarmTimerControllerImpl() { - model_.RemoveObserver(this); -} - -void AssistantAlarmTimerControllerImpl::SetAssistant( - assistant::Assistant* assistant) { - assistant_ = assistant; -} - -const AssistantAlarmTimerModel* AssistantAlarmTimerControllerImpl::GetModel() - const { - return &model_; -} - -void AssistantAlarmTimerControllerImpl::OnTimerStateChanged( - const std::vector<AssistantTimer>& new_or_updated_timers) { - // First we remove all old timers that no longer exist. - for (const auto* old_timer : model_.GetAllTimers()) { - if (!base::Contains(new_or_updated_timers, old_timer->id, - &AssistantTimer::id)) { - model_.RemoveTimer(old_timer->id); - } - } - - // Then we add any new timers and update existing ones (if allowed). - for (const auto& new_or_updated_timer : new_or_updated_timers) { - const auto* original_timer = model_.GetTimerById(new_or_updated_timer.id); - const bool is_new_timer = original_timer == nullptr; - if (is_new_timer || ShouldAllowUpdateFromLibAssistant( - *original_timer, new_or_updated_timer)) { - model_.AddOrUpdateTimer(std::move(new_or_updated_timer)); - } - } -} - -void AssistantAlarmTimerControllerImpl::OnAssistantControllerConstructed() { - AssistantState::Get()->AddObserver(this); -} - -void AssistantAlarmTimerControllerImpl::OnAssistantControllerDestroying() { - AssistantState::Get()->RemoveObserver(this); -} - -void AssistantAlarmTimerControllerImpl::OnDeepLinkReceived( - assistant::util::DeepLinkType type, - const std::map<std::string, std::string>& params) { - using assistant::util::DeepLinkParam; - using assistant::util::DeepLinkType; - - if (type != DeepLinkType::kAlarmTimer) - return; - - const std::optional<AlarmTimerAction>& action = - assistant::util::GetDeepLinkParamAsAlarmTimerAction(params); - if (!action.has_value()) - return; - - const std::optional<std::string>& alarm_timer_id = - assistant::util::GetDeepLinkParam(params, DeepLinkParam::kId); - if (!alarm_timer_id.has_value()) - return; - - // Duration is optional. Only used for adding time to timer. - const std::optional<base::TimeDelta>& duration = - assistant::util::GetDeepLinkParamAsTimeDelta(params, - DeepLinkParam::kDurationMs); - - PerformAlarmTimerAction(action.value(), alarm_timer_id.value(), duration); -} - -void AssistantAlarmTimerControllerImpl::OnAssistantStatusChanged( - assistant::AssistantStatus status) { - // If LibAssistant is no longer running we need to clear our cache to - // accurately reflect LibAssistant alarm/timer state. - if (status == assistant::AssistantStatus::NOT_READY) - model_.RemoveAllTimers(); -} - -void AssistantAlarmTimerControllerImpl::OnTimerAdded( - const AssistantTimer& timer) { - // Schedule the next tick of |timer|. - ScheduleNextTick(timer); - - // Create a notification for the added alarm/timer. - assistant_controller_->notification_controller()->AddOrUpdateNotification( - CreateTimerNotification(timer)); -} - -void AssistantAlarmTimerControllerImpl::OnTimerUpdated( - const AssistantTimer& timer) { - // Schedule the next tick of |timer|. - ScheduleNextTick(timer); - - auto* notification_controller = - assistant_controller_->notification_controller(); - const auto* existing_notification = - notification_controller->model()->GetNotificationById( - CreateTimerNotificationId(timer)); - - // When a |timer| is updated we need to update the corresponding notification - // unless it has already been dismissed by the user. - if (existing_notification) { - notification_controller->AddOrUpdateNotification( - CreateTimerNotification(timer, existing_notification)); - } -} - -void AssistantAlarmTimerControllerImpl::OnTimerRemoved( - const AssistantTimer& timer) { - // Clean up the ticker for |timer|, if one exists. - tickers_.erase(timer.id); - - // Remove any notification associated w/ |timer|. - assistant_controller_->notification_controller()->RemoveNotificationById( - CreateTimerNotificationId(timer), /*from_server=*/false); -} - -void AssistantAlarmTimerControllerImpl::PerformAlarmTimerAction( - const AlarmTimerAction& action, - const std::string& alarm_timer_id, - const std::optional<base::TimeDelta>& duration) { - DCHECK(assistant_); - - switch (action) { - case AlarmTimerAction::kAddTimeToTimer: - if (!duration.has_value()) { - LOG(ERROR) << "Ignoring add time to timer action duration."; - return; - } - assistant_->AddTimeToTimer(alarm_timer_id, duration.value()); - break; - case AlarmTimerAction::kPauseTimer: - DCHECK(!duration.has_value()); - assistant_->PauseTimer(alarm_timer_id); - break; - case AlarmTimerAction::kRemoveAlarmOrTimer: - DCHECK(!duration.has_value()); - assistant_->RemoveAlarmOrTimer(alarm_timer_id); - break; - case AlarmTimerAction::kResumeTimer: - DCHECK(!duration.has_value()); - assistant_->ResumeTimer(alarm_timer_id); - break; - } -} - -void AssistantAlarmTimerControllerImpl::ScheduleNextTick( - const AssistantTimer& timer) { - auto& ticker = tickers_[timer.id]; - if (ticker.IsRunning()) - return; - - // The next tick of |timer| should occur at its next full second of remaining - // time. Here we are calculating the number of milliseconds to that next full - // second. - int millis_to_next_full_sec = timer.remaining_time.InMilliseconds() % 1000; - - // If |timer| has already fired, |millis_to_next_full_sec| will be negative. - // In this case, we take the inverse of the value to get the correct number of - // milliseconds to the next full second of remaining time. - if (millis_to_next_full_sec < 0) - millis_to_next_full_sec = 1000 + millis_to_next_full_sec; - - // If we are exactly at the boundary of a full second, we want to make sure - // we wait until the next second to perform the next tick. Otherwise we'll end - // up w/ a superfluous tick that is unnecessary. - if (millis_to_next_full_sec == 0) - millis_to_next_full_sec = 1000; - - // NOTE: We pass a copy of |timer.id| here as |timer| may no longer exist - // when Tick() is called due to the possibility of the |model_| being updated - // via a call to OnTimerStateChanged(), such as might happen if a timer is - // created, paused, resumed, or removed by LibAssistant. - ticker.Start(FROM_HERE, base::Milliseconds(millis_to_next_full_sec), - base::BindOnce(&AssistantAlarmTimerControllerImpl::Tick, - base::Unretained(this), timer.id)); -} - -void AssistantAlarmTimerControllerImpl::Tick(const std::string& timer_id) { - const auto* timer = model_.GetTimerById(timer_id); - DCHECK(timer); - - // We don't tick paused timers. Once the |timer| resumes, ticking will resume. - if (timer->state == AssistantTimerState::kPaused) - return; - - // Update |timer| to reflect the new amount of |remaining_time|. - AssistantTimer updated_timer(*timer); - updated_timer.remaining_time = updated_timer.fire_time - base::Time::Now(); - - // If there is no remaining time left on the timer, we ensure that our timer - // is marked as |kFired|. Since LibAssistant may be a bit slow to notify us of - // the change in state, we set the value ourselves to eliminate UI jank. - // NOTE: We use the rounded value of |remaining_time| since that's what we are - // displaying to the user and otherwise would be out of sync for ticks - // occurring at full second boundary values. - if (std::round(updated_timer.remaining_time.InSecondsF()) <= 0.f) - updated_timer.state = AssistantTimerState::kFired; - - model_.AddOrUpdateTimer(std::move(updated_timer)); -} - -} // namespace ash
diff --git a/ash/assistant/assistant_alarm_timer_controller_impl.h b/ash/assistant/assistant_alarm_timer_controller_impl.h deleted file mode 100644 index 69dd0a69..0000000 --- a/ash/assistant/assistant_alarm_timer_controller_impl.h +++ /dev/null
@@ -1,101 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_ALARM_TIMER_CONTROLLER_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_ALARM_TIMER_CONTROLLER_IMPL_H_ - -#include <map> -#include <string> -#include <vector> - -#include "ash/assistant/model/assistant_alarm_timer_model.h" -#include "ash/assistant/model/assistant_alarm_timer_model_observer.h" -#include "ash/public/cpp/assistant/assistant_state.h" -#include "ash/public/cpp/assistant/controller/assistant_alarm_timer_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" -#include "base/memory/raw_ptr.h" -#include "base/scoped_observation.h" -#include "base/timer/timer.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" - -namespace ash { - -namespace assistant { -namespace util { -enum class AlarmTimerAction; -} // namespace util -} // namespace assistant - -class AssistantControllerImpl; - -// The AssistantAlarmTimerControllerImpl is a sub-controller of -// AssistantController tasked with tracking alarm/timer state and providing -// alarm/timer APIs. -class AssistantAlarmTimerControllerImpl - : public AssistantAlarmTimerController, - public AssistantControllerObserver, - public AssistantStateObserver, - public AssistantAlarmTimerModelObserver { - public: - explicit AssistantAlarmTimerControllerImpl( - AssistantControllerImpl* assistant_controller); - - AssistantAlarmTimerControllerImpl(const AssistantAlarmTimerControllerImpl&) = - delete; - AssistantAlarmTimerControllerImpl& operator=( - const AssistantAlarmTimerControllerImpl&) = delete; - - ~AssistantAlarmTimerControllerImpl() override; - - // Provides a pointer to the |assistant| owned by AssistantService. - void SetAssistant(assistant::Assistant* assistant); - - // AssistantAlarmTimerController: - const AssistantAlarmTimerModel* GetModel() const override; - void OnTimerStateChanged( - const std::vector<assistant::AssistantTimer>& timers) override; - - // AssistantControllerObserver: - void OnAssistantControllerConstructed() override; - void OnAssistantControllerDestroying() override; - void OnDeepLinkReceived( - assistant::util::DeepLinkType type, - const std::map<std::string, std::string>& params) override; - - // AssistantStateObserver: - void OnAssistantStatusChanged(assistant::AssistantStatus status) override; - - // AssistantAlarmTimerModelObserver: - void OnTimerAdded(const assistant::AssistantTimer& timer) override; - void OnTimerUpdated(const assistant::AssistantTimer& timer) override; - void OnTimerRemoved(const assistant::AssistantTimer& timer) override; - - private: - void PerformAlarmTimerAction(const assistant::util::AlarmTimerAction& action, - const std::string& alarm_timer_id, - const std::optional<base::TimeDelta>& duration); - - void ScheduleNextTick(const assistant::AssistantTimer& timer); - void Tick(const std::string& timer_id); - - const raw_ptr<AssistantControllerImpl> - assistant_controller_; // Owned by Shell. - - AssistantAlarmTimerModel model_; - - // We independently tick timers in our |model_| to update their respective - // remaining times. This map contains these tickers, keyed by timer id. - std::map<std::string, base::OneShotTimer> tickers_; - - // Owned by AssistantService. - raw_ptr<assistant::Assistant> assistant_; - - base::ScopedObservation<AssistantController, AssistantControllerObserver> - assistant_controller_observation_{this}; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_ALARM_TIMER_CONTROLLER_IMPL_H_
diff --git a/ash/assistant/assistant_controller_impl.cc b/ash/assistant/assistant_controller_impl.cc deleted file mode 100644 index 63fbc7f..0000000 --- a/ash/assistant/assistant_controller_impl.cc +++ /dev/null
@@ -1,377 +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. - -#include "ash/assistant/assistant_controller_impl.h" - -#include <algorithm> -#include <utility> - -#include "ash/accessibility/accessibility_controller.h" -#include "ash/assistant/util/deep_link_util.h" -#include "ash/capture_mode/capture_mode_controller.h" -#include "ash/constants/ash_features.h" -#include "ash/public/cpp/android_intent_helper.h" -#include "ash/public/cpp/assistant/assistant_state.h" -#include "ash/public/cpp/new_window_delegate.h" -#include "ash/public/cpp/session/session_types.h" -#include "ash/public/mojom/assistant_volume_control.mojom.h" -#include "ash/session/session_controller_impl.h" -#include "ash/shell.h" -#include "base/functional/bind.h" -#include "base/memory/scoped_refptr.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_browser_delegate.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_enums.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_prefs.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" -#include "chromeos/ash/services/assistant/public/cpp/features.h" -#include "chromeos/ash/services/libassistant/public/cpp/assistant_feedback.h" -#include "components/account_id/account_id.h" -#include "components/prefs/pref_registry_simple.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "url/gurl.h" - -namespace ash { - -namespace { - -const AccountId& GetActiveUserAccountId() { - const UserSession* active_user_session = - Shell::Get()->session_controller()->GetUserSession(0); - DCHECK(active_user_session); - return active_user_session->user_info.account_id; -} - -} // namespace - -AssistantControllerImpl::AssistantControllerImpl() { - Shell::Get()->AddShellObserver(this); - assistant_state_controller_.AddObserver(this); - CrasAudioHandler::Get()->AddAudioObserver(this); - AddObserver(this); - - // The Assistant service needs to have accessibility state synced with ash - // and be notified of any accessibility status changes in the future to - // provide an opportunity to turn on/off A11Y features. - Shell::Get()->accessibility_controller()->AddObserver(this); - - color_mode_observer_.Observe(DarkLightModeControllerImpl::Get()); - - NotifyConstructed(); -} - -AssistantControllerImpl::~AssistantControllerImpl() = default; - -void AssistantControllerImpl::BindReceiver( - mojo::PendingReceiver<mojom::AssistantVolumeControl> receiver) { - if (assistant_volume_control_receiver_.is_bound()) { - assistant_volume_control_receiver_.reset(); - } - assistant_volume_control_receiver_.Bind(std::move(receiver)); -} - -void AssistantControllerImpl::SetAssistant(assistant::Assistant* assistant) { - assistant_ = assistant; - - // Provide reference to sub-controllers. - assistant_alarm_timer_controller_.SetAssistant(assistant); - assistant_interaction_controller_.SetAssistant(assistant); - assistant_notification_controller_.SetAssistant(assistant); - assistant_ui_controller_.SetAssistant(assistant); - - if (assistant) { - for (AssistantControllerObserver& observer : observers_) - observer.OnAssistantReady(); - } -} - -void AssistantControllerImpl::SendAssistantFeedback( - bool assistant_debug_info_allowed, - const std::string& feedback_description, - const std::string& screenshot_png) { - if (!IsAssistantReady()) { - return; - } - - assistant::AssistantFeedback assistant_feedback; - assistant_feedback.assistant_debug_info_allowed = - assistant_debug_info_allowed; - assistant_feedback.description = feedback_description; - assistant_feedback.screenshot_png = - std::vector<uint8_t>(screenshot_png.begin(), screenshot_png.end()); - assistant_->SendAssistantFeedback(std::move(assistant_feedback)); -} - -void AssistantControllerImpl::StartSpeakerIdEnrollmentFlow() { - setup_controller()->StartOnboarding(false /* relaunch */, - FlowType::kSpeakerIdEnrollment); -} - -void AssistantControllerImpl::DownloadImage( - const GURL& url, - ImageDownloader::DownloadCallback callback) { - constexpr net::NetworkTrafficAnnotationTag kNetworkTrafficAnnotationTag = - net::DefineNetworkTrafficAnnotation("image_downloader", R"( - semantics { - sender: "Google Assistant" - description: - "The Google Assistant requires dynamic loading of images to " - "provide a media rich user experience. Images are downloaded " - "on an as needed basis." - trigger: - "Generally triggered in direct response to a user issued " - "query. A single query may necessitate the downloading of " - "multiple images." - data: "None." - destination: GOOGLE_OWNED_SERVICE - } - policy { - cookies_allowed: NO - setting: - "The Google Assistant can be enabled/disabled in Chrome " - "Settings and is subject to eligibility requirements." - policy_exception_justification: - "The users can disable this feature. This does not send/store " - "user data." - })"); - - ImageDownloader::Get()->Download(url, kNetworkTrafficAnnotationTag, - GetActiveUserAccountId(), - std::move(callback)); -} - -void AssistantControllerImpl::AddObserver( - AssistantControllerObserver* observer) { - observers_.AddObserver(observer); -} - -void AssistantControllerImpl::RemoveObserver( - AssistantControllerObserver* observer) { - observers_.RemoveObserver(observer); -} - -void AssistantControllerImpl::OpenUrl(const GURL& url, - bool in_background, - bool from_server) { - // app_list search result will be opened by `OpenUrl()`. However, the - // `assistant_` may not be ready. Show a toast to indicate it. - if (!IsAssistantReady()) { - assistant_ui_controller_.ShowUnboundErrorToast(); - return; - } - - if (assistant::util::IsDeepLinkUrl(url)) { - NotifyDeepLinkReceived(url); - return; - } - - auto* android_helper = AndroidIntentHelper::GetInstance(); - if (IsAndroidIntent(url) && !android_helper) { - NOTREACHED(); - } - - // Give observers an opportunity to perform any necessary handling before we - // open the specified |url| in a new browser tab. - NotifyOpeningUrl(url, in_background, from_server); - - if (IsAndroidIntent(url)) { - android_helper->LaunchAndroidIntent(url.spec()); - } else { - assistant::AssistantBrowserDelegate::Get()->OpenUrl(url); - } - NotifyUrlOpened(url, from_server); -} - -void AssistantControllerImpl::OpenAssistantSettings() { - // Launch Assistant settings via deeplink. - OpenUrl(assistant::util::CreateAssistantSettingsDeepLink(), - /*in_background=*/false, /*from_server=*/false); -} - -base::WeakPtr<ash::AssistantController> AssistantControllerImpl::GetWeakPtr() { - return weak_factory_.GetWeakPtr(); -} - -void AssistantControllerImpl::OnDeepLinkReceived( - assistant::util::DeepLinkType type, - const std::map<std::string, std::string>& params) { - using assistant::util::DeepLinkParam; - using assistant::util::DeepLinkType; - - switch (type) { - case DeepLinkType::kChromeSettings: { - // Chrome Settings deep links are opened in a new browser tab. - OpenUrl( - assistant::util::GetChromeSettingsUrl( - assistant::util::GetDeepLinkParam(params, DeepLinkParam::kPage)), - /*in_background=*/false, /*from_server=*/false); - break; - } - case DeepLinkType::kFeedback: - NewWindowDelegate::GetInstance()->OpenFeedbackPage( - NewWindowDelegate::FeedbackSource::kFeedbackSourceAssistant); - - // Close the assistant UI so that the feedback page is visible. - assistant_ui_controller_.CloseUi( - assistant::AssistantExitPoint::kUnspecified); - break; - case DeepLinkType::kScreenshot: - // We close the UI before taking the screenshot as it's probably not the - // user's intention to include the Assistant in the picture. - assistant_ui_controller_.CloseUi( - assistant::AssistantExitPoint::kScreenshot); - CaptureModeController::Get()->CaptureScreenshotsOfAllDisplays(); - break; - case DeepLinkType::kTaskManager: - // Open task manager window. - NewWindowDelegate::GetInstance()->ShowTaskManager(); - break; - case DeepLinkType::kUnsupported: - case DeepLinkType::kAlarmTimer: - case DeepLinkType::kLists: - case DeepLinkType::kNotes: - case DeepLinkType::kOnboarding: - case DeepLinkType::kQuery: - case DeepLinkType::kReminders: - case DeepLinkType::kSettings: - // No action needed. - break; - } -} - -void AssistantControllerImpl::SetVolume(int volume, bool user_initiated) { - volume = std::min(100, volume); - volume = std::max(volume, 0); - CrasAudioHandler::Get()->SetOutputVolumePercent(volume); -} - -void AssistantControllerImpl::SetMuted(bool muted) { - CrasAudioHandler::Get()->SetOutputMute(muted); -} - -void AssistantControllerImpl::AddVolumeObserver( - mojo::PendingRemote<mojom::VolumeObserver> observer) { - volume_observers_.Add(std::move(observer)); - - int output_volume = CrasAudioHandler::Get()->GetOutputVolumePercent(); - bool mute = CrasAudioHandler::Get()->IsOutputMuted(); - OnOutputMuteChanged(mute); - OnOutputNodeVolumeChanged(0 /* node */, output_volume); -} - -void AssistantControllerImpl::OnOutputMuteChanged(bool mute_on) { - for (auto& observer : volume_observers_) - observer->OnMuteStateChanged(mute_on); -} - -void AssistantControllerImpl::OnOutputNodeVolumeChanged(uint64_t node, - int volume) { - // |node| refers to the active volume device, which we don't care here. - for (auto& observer : volume_observers_) - observer->OnVolumeChanged(volume); -} - -void AssistantControllerImpl::OnAccessibilityStatusChanged() { - if (!IsAssistantReady()) { - return; - } - - // The Assistant service needs to be informed of changes to accessibility - // state so that it can turn on/off A11Y features appropriately. - assistant_->OnAccessibilityStatusChanged( - Shell::Get()->accessibility_controller()->spoken_feedback().enabled()); -} - -void AssistantControllerImpl::OnColorModeChanged(bool dark_mode_enabled) { - if (!IsAssistantReady()) { - return; - } - - assistant_->OnColorModeChanged(dark_mode_enabled); -} - -void AssistantControllerImpl::OnShellDestroying() { - NotifyDestroying(); - CrasAudioHandler::Get()->RemoveAudioObserver(this); - Shell::Get()->accessibility_controller()->RemoveObserver(this); - assistant_state_controller_.RemoveObserver(this); - Shell::Get()->RemoveShellObserver(this); - RemoveObserver(this); -} - -bool AssistantControllerImpl::IsAssistantReady() const { - if (!assistant_) { - return false; - } - - if (AssistantState::Get()->assistant_status() == - assistant::AssistantStatus::NOT_READY) { - return false; - } - - return true; -} - -void AssistantControllerImpl::NotifyConstructed() { - for (AssistantControllerObserver& observer : observers_) - observer.OnAssistantControllerConstructed(); -} - -void AssistantControllerImpl::NotifyDestroying() { - for (AssistantControllerObserver& observer : observers_) - observer.OnAssistantControllerDestroying(); -} - -void AssistantControllerImpl::NotifyDeepLinkReceived(const GURL& deep_link) { - using assistant::util::DeepLinkType; - - // Retrieve deep link type and parsed parameters. - DeepLinkType type = assistant::util::GetDeepLinkType(deep_link); - const std::map<std::string, std::string> params = - assistant::util::GetDeepLinkParams(deep_link); - - for (AssistantControllerObserver& observer : observers_) - observer.OnDeepLinkReceived(type, params); -} - -void AssistantControllerImpl::NotifyOpeningUrl(const GURL& url, - bool in_background, - bool from_server) { - for (AssistantControllerObserver& observer : observers_) - observer.OnOpeningUrl(url, in_background, from_server); -} - -void AssistantControllerImpl::NotifyUrlOpened(const GURL& url, - bool from_server) { - for (AssistantControllerObserver& observer : observers_) - observer.OnUrlOpened(url, from_server); -} - -void AssistantControllerImpl::OnAssistantStatusChanged( - assistant::AssistantStatus status) { - switch (status) { - case assistant::AssistantStatus::NOT_READY: - assistant_volume_control_receiver_.reset(); - assistant_ui_controller_.CloseUi( - assistant::AssistantExitPoint::kUnspecified); - break; - case assistant::AssistantStatus::READY: - OnAccessibilityStatusChanged(); - OnColorModeChanged( - DarkLightModeControllerImpl::Get()->IsDarkModeEnabled()); - break; - } -} - -void AssistantControllerImpl::OnLockedFullScreenStateChanged(bool enabled) { - if (enabled) - assistant_ui_controller_.CloseUi( - assistant::AssistantExitPoint::kUnspecified); -} - -void AssistantControllerImpl::BindVolumeControl( - mojo::PendingReceiver<mojom::AssistantVolumeControl> receiver) { - Shell::Get()->assistant_controller()->BindReceiver(std::move(receiver)); -} - -} // namespace ash
diff --git a/ash/assistant/assistant_controller_impl.h b/ash/assistant/assistant_controller_impl.h deleted file mode 100644 index 887aa969..0000000 --- a/ash/assistant/assistant_controller_impl.h +++ /dev/null
@@ -1,173 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_CONTROLLER_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_CONTROLLER_IMPL_H_ - -#include <map> -#include <memory> -#include <string> -#include <vector> - -#include "ash/accessibility/accessibility_observer.h" -#include "ash/ash_export.h" -#include "ash/assistant/assistant_alarm_timer_controller_impl.h" -#include "ash/assistant/assistant_interaction_controller_impl.h" -#include "ash/assistant/assistant_notification_controller_impl.h" -#include "ash/assistant/assistant_setup_controller.h" -#include "ash/assistant/assistant_state_controller.h" -#include "ash/assistant/assistant_suggestions_controller_impl.h" -#include "ash/assistant/assistant_ui_controller_impl.h" -#include "ash/assistant/assistant_view_delegate_impl.h" -#include "ash/assistant/ui/assistant_view_delegate.h" -#include "ash/public/cpp/assistant/assistant_interface_binder.h" -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" -#include "ash/public/cpp/image_downloader.h" -#include "ash/public/cpp/style/color_mode_observer.h" -#include "ash/public/mojom/assistant_volume_control.mojom.h" -#include "ash/shell_observer.h" -#include "ash/style/dark_light_mode_controller_impl.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/weak_ptr.h" -#include "base/observer_list.h" -#include "base/scoped_observation.h" -#include "chromeos/ash/components/audio/cras_audio_handler.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" -#include "components/prefs/pref_service.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/receiver_set.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "mojo/public/cpp/bindings/remote_set.h" - -namespace ash { - -class ASH_EXPORT AssistantControllerImpl - : public AssistantController, - public AssistantControllerObserver, - public AssistantStateObserver, - public mojom::AssistantVolumeControl, - public CrasAudioHandler::AudioObserver, - public AccessibilityObserver, - public AssistantInterfaceBinder, - public ColorModeObserver, - public ShellObserver { - public: - AssistantControllerImpl(); - - AssistantControllerImpl(const AssistantControllerImpl&) = delete; - AssistantControllerImpl& operator=(const AssistantControllerImpl&) = delete; - - ~AssistantControllerImpl() override; - - void BindReceiver( - mojo::PendingReceiver<mojom::AssistantVolumeControl> receiver); - - // Downloads the image found at the specified |url|. On completion, the - // supplied |callback| will be run with the downloaded image. If the download - // attempt is unsuccessful, a NULL image is returned. - void DownloadImage(const GURL& url, - ImageDownloader::DownloadCallback callback); - - // AssistantController: - void AddObserver(AssistantControllerObserver* observer) override; - void RemoveObserver(AssistantControllerObserver* observer) override; - void OpenAssistantSettings() override; - void OpenUrl(const GURL& url, bool in_background, bool from_server) override; - base::WeakPtr<ash::AssistantController> GetWeakPtr() override; - void SetAssistant(assistant::Assistant* assistant) override; - void StartSpeakerIdEnrollmentFlow() override; - void SendAssistantFeedback(bool assistant_debug_info_allowed, - const std::string& feedback_description, - const std::string& screenshot_png) override; - - // AssistantControllerObserver: - void OnDeepLinkReceived( - assistant::util::DeepLinkType type, - const std::map<std::string, std::string>& params) override; - - // mojom::VolumeControl: - void SetVolume(int volume, bool user_initiated) override; - void SetMuted(bool muted) override; - void AddVolumeObserver( - mojo::PendingRemote<mojom::VolumeObserver> observer) override; - - // CrasAudioHandler::AudioObserver: - void OnOutputMuteChanged(bool mute_on) override; - void OnOutputNodeVolumeChanged(uint64_t node, int volume) override; - - // AccessibilityObserver: - void OnAccessibilityStatusChanged() override; - - // ColorModeObserver: - void OnColorModeChanged(bool dark_mode_enabled) override; - - // ShellObserver: - void OnShellDestroying() override; - - AssistantAlarmTimerControllerImpl* alarm_timer_controller() { - return &assistant_alarm_timer_controller_; - } - - AssistantNotificationControllerImpl* notification_controller() { - return &assistant_notification_controller_; - } - - AssistantSetupController* setup_controller() { - return &assistant_setup_controller_; - } - - AssistantViewDelegate* view_delegate() { return &view_delegate_; } - - bool IsAssistantReady() const; - - private: - void NotifyConstructed(); - void NotifyDestroying(); - void NotifyDeepLinkReceived(const GURL& deep_link); - void NotifyOpeningUrl(const GURL& url, bool in_background, bool from_server); - void NotifyUrlOpened(const GURL& url, bool from_server); - - // AssistantStateObserver: - void OnAssistantStatusChanged(assistant::AssistantStatus status) override; - void OnLockedFullScreenStateChanged(bool enabled) override; - - // AssistantInterfaceBinder implementation: - void BindVolumeControl( - mojo::PendingReceiver<mojom::AssistantVolumeControl> receiver) override; - - // The observer list should be initialized early so that sub-controllers may - // register as observers during their construction. - base::ObserverList<AssistantControllerObserver> observers_; - - mojo::Receiver<mojom::AssistantVolumeControl> - assistant_volume_control_receiver_{this}; - mojo::RemoteSet<mojom::VolumeObserver> volume_observers_; - - // |assistant_| can be nullptr if libassistant creation is not yet completed, - // i.e. it cannot take a request. - raw_ptr<assistant::Assistant> assistant_ = nullptr; - - // Assistant sub-controllers. - AssistantAlarmTimerControllerImpl assistant_alarm_timer_controller_{this}; - AssistantInteractionControllerImpl assistant_interaction_controller_{this}; - AssistantNotificationControllerImpl assistant_notification_controller_; - AssistantStateController assistant_state_controller_; - AssistantSetupController assistant_setup_controller_{this}; - AssistantSuggestionsControllerImpl assistant_suggestions_controller_; - AssistantUiControllerImpl assistant_ui_controller_{this}; - - AssistantViewDelegateImpl view_delegate_{this}; - - base::ScopedObservation<DarkLightModeControllerImpl, ColorModeObserver> - color_mode_observer_{this}; - - base::WeakPtrFactory<AssistantControllerImpl> weak_factory_{this}; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_CONTROLLER_IMPL_H_
diff --git a/ash/assistant/assistant_interaction_controller_impl.h b/ash/assistant/assistant_interaction_controller_impl.h deleted file mode 100644 index 1c535a7d..0000000 --- a/ash/assistant/assistant_interaction_controller_impl.h +++ /dev/null
@@ -1,155 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_INTERACTION_CONTROLLER_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_INTERACTION_CONTROLLER_IMPL_H_ - -#include <map> -#include <memory> -#include <string> -#include <vector> - -#include "ash/assistant/model/assistant_interaction_model.h" -#include "ash/assistant/model/assistant_interaction_model_observer.h" -#include "ash/assistant/model/assistant_ui_model_observer.h" -#include "ash/assistant/ui/assistant_view_delegate.h" -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" -#include "ash/public/cpp/assistant/controller/assistant_interaction_controller.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/weak_ptr.h" -#include "base/scoped_observation.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "ui/display/display_observer.h" -#include "ui/display/screen.h" - -namespace display { -enum class TabletState; -} // namespace display - -namespace ash { - -class AssistantControllerImpl; -enum class AssistantButtonId; - -class AssistantInteractionControllerImpl - : public AssistantInteractionController, - public assistant::AssistantInteractionSubscriber, - public AssistantControllerObserver, - public AssistantInteractionModelObserver, - public AssistantUiModelObserver, - public AssistantViewDelegateObserver, - public display::DisplayObserver { - public: - using AssistantInteractionMetadata = assistant::AssistantInteractionMetadata; - using AssistantInteractionResolution = - assistant::AssistantInteractionResolution; - using AssistantInteractionType = assistant::AssistantInteractionType; - using AssistantQuerySource = assistant::AssistantQuerySource; - using AssistantSuggestion = assistant::AssistantSuggestion; - using AssistantSuggestionType = assistant::AssistantSuggestionType; - - explicit AssistantInteractionControllerImpl( - AssistantControllerImpl* assistant_controller); - - AssistantInteractionControllerImpl( - const AssistantInteractionControllerImpl&) = delete; - AssistantInteractionControllerImpl& operator=( - const AssistantInteractionControllerImpl&) = delete; - - ~AssistantInteractionControllerImpl() override; - - // Provides a pointer to the |assistant| owned by AssistantService. - void SetAssistant(assistant::Assistant* assistant); - - // AssistantInteractionController: - const AssistantInteractionModel* GetModel() const override; - base::TimeDelta GetTimeDeltaSinceLastInteraction() const override; - bool HasHadInteraction() const override; - void StartTextInteraction(const std::string& text, - bool allow_tts, - AssistantQuerySource query_source) override; - - // AssistantControllerObserver: - void OnAssistantControllerConstructed() override; - void OnAssistantControllerDestroying() override; - void OnDeepLinkReceived( - assistant::util::DeepLinkType type, - const std::map<std::string, std::string>& params) override; - - // AssistantInteractionModelObserver: - void OnInputModalityChanged(InputModality input_modality) override; - void OnMicStateChanged(MicState mic_state) override; - void OnCommittedQueryChanged(const AssistantQuery& assistant_query) override; - - // AssistantUiModelObserver: - void OnUiVisibilityChanged( - AssistantVisibility new_visibility, - AssistantVisibility old_visibility, - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) override; - - // assistant::AssistantInteractionSubscriber: - void OnInteractionStarted( - const AssistantInteractionMetadata& metadata) override; - void OnInteractionFinished( - AssistantInteractionResolution resolution) override; - void OnHtmlResponse(const std::string& response, - const std::string& fallback) override; - void OnSuggestionsResponse( - const std::vector<AssistantSuggestion>& response) override; - void OnTextResponse(const std::string& response) override; - void OnOpenUrlResponse(const GURL& url, bool in_background) override; - void OnOpenAppResponse(const assistant::AndroidAppInfo& app_info) override; - void OnSpeechRecognitionStarted() override; - void OnSpeechRecognitionIntermediateResult( - const std::string& high_confidence_text, - const std::string& low_confidence_text) override; - void OnSpeechRecognitionEndOfUtterance() override; - void OnSpeechRecognitionFinalResult(const std::string& final_result) override; - void OnSpeechLevelUpdated(float speech_level) override; - void OnTtsStarted(bool due_to_error) override; - void OnWaitStarted() override; - - // AssistantViewDelegateObserver: - void OnDialogPlateButtonPressed(AssistantButtonId id) override; - void OnDialogPlateContentsCommitted(const std::string& text) override; - void OnSuggestionPressed( - const base::UnguessableToken& suggestion_id) override; - - // display::DisplayObserver: - void OnDisplayTabletStateChanged(display::TabletState state) override; - - private: - bool HasActiveInteraction() const; - void OnUiVisible(AssistantEntryPoint entry_point); - void StartVoiceInteraction(); - void StopActiveInteraction(bool cancel_conversation); - - InputModality GetDefaultInputModality() const; - AssistantResponse* GetResponseForActiveInteraction(); - AssistantVisibility GetVisibility() const; - bool IsVisible() const; - - const raw_ptr<AssistantControllerImpl> - assistant_controller_; // Owned by Shell. - AssistantInteractionModel model_; - bool has_had_interaction_ = false; - - // Owned by AssistantService. - raw_ptr<assistant::Assistant> assistant_ = nullptr; - - base::ScopedObservation<AssistantController, AssistantControllerObserver> - assistant_controller_observation_{this}; - - base::ScopedObservation<display::Screen, display::DisplayObserver> - display_observation_{this}; - - base::WeakPtrFactory<AssistantInteractionControllerImpl> weak_factory_{this}; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_INTERACTION_CONTROLLER_IMPL_H_
diff --git a/ash/assistant/assistant_notification_controller_impl.cc b/ash/assistant/assistant_notification_controller_impl.cc deleted file mode 100644 index aa40d7ee..0000000 --- a/ash/assistant/assistant_notification_controller_impl.cc +++ /dev/null
@@ -1,239 +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. - -#include "ash/assistant/assistant_notification_controller_impl.h" - -#include <memory> -#include <utility> - -#include "ash/assistant/assistant_controller_impl.h" -#include "ash/assistant/assistant_notification_expiry_monitor.h" -#include "ash/assistant/util/deep_link_util.h" -#include "ash/constants/notifier_catalogs.h" -#include "ash/public/cpp/assistant/assistant_state.h" -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "ash/public/cpp/notification_utils.h" -#include "ash/shell.h" -#include "ash/strings/grit/ash_strings.h" -#include "base/strings/utf_string_conversions.h" -#include "chromeos/ash/services/libassistant/public/cpp/assistant_notification.h" -#include "chromeos/ui/vector_icons/vector_icons.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "ui/base/l10n/l10n_util.h" -#include "ui/message_center/message_center.h" -#include "ui/message_center/public/cpp/notification.h" -#include "url/gurl.h" - -namespace ash { - -namespace { - -constexpr char kNotifierId[] = "assistant"; - -// Helpers --------------------------------------------------------------------- - -std::unique_ptr<message_center::Notification> CreateSystemNotification( - const message_center::NotifierId& notifier_id, - const assistant::AssistantNotification& notification) { - const std::u16string title = base::UTF8ToUTF16(notification.title); - const std::u16string message = base::UTF8ToUTF16(notification.message); - const std::u16string display_source = - l10n_util::GetStringUTF16(IDS_ASH_ASSISTANT_NOTIFICATION_DISPLAY_SOURCE); - - message_center::RichNotificationData data; - for (const auto& button : notification.buttons) - data.buttons.emplace_back(base::UTF8ToUTF16(button.label)); - - std::unique_ptr<message_center::Notification> system_notification = - ash::CreateSystemNotificationPtr( - message_center::NOTIFICATION_TYPE_SIMPLE, notification.client_id, - title, message, display_source, GURL(), notifier_id, data, - /*delegate=*/nullptr, chromeos::kNotificationAssistantIcon, - message_center::SystemNotificationWarningLevel::NORMAL); - - system_notification->set_renotify(notification.renotify); - system_notification->set_pinned(notification.is_pinned); - - switch (notification.priority) { - case assistant::AssistantNotificationPriority::kLow: - system_notification->set_priority(message_center::LOW_PRIORITY); - break; - case assistant::AssistantNotificationPriority::kDefault: - system_notification->set_priority(message_center::DEFAULT_PRIORITY); - break; - case assistant::AssistantNotificationPriority::kHigh: - system_notification->set_priority(message_center::HIGH_PRIORITY); - break; - } - - return system_notification; -} - -message_center::NotifierId GetNotifierId() { - return message_center::NotifierId( - message_center::NotifierType::SYSTEM_COMPONENT, kNotifierId, - NotificationCatalogName::kAssistantNotification); -} - -bool IsValidActionUrl(const GURL& action_url) { - return action_url.is_valid() && (action_url.SchemeIsHTTPOrHTTPS() || - assistant::util::IsDeepLinkUrl(action_url)); -} - -} // namespace - -// AssistantNotificationControllerImpl -// --------------------------------------------- - -AssistantNotificationControllerImpl::AssistantNotificationControllerImpl() - : expiry_monitor_(this), notifier_id_(GetNotifierId()) { - model_.AddObserver(this); - message_center::MessageCenter::Get()->AddObserver(this); -} - -AssistantNotificationControllerImpl::~AssistantNotificationControllerImpl() { - message_center::MessageCenter::Get()->RemoveObserver(this); - model_.RemoveObserver(this); -} - -void AssistantNotificationControllerImpl::SetAssistant( - assistant::Assistant* assistant) { - receiver_.reset(); - - assistant_ = assistant; - - if (assistant) - receiver_.Bind(assistant_->GetPendingNotificationDelegate()); -} - -// AssistantNotificationController -------------------------------------- - -void AssistantNotificationControllerImpl::RemoveNotificationById( - const std::string& id, - bool from_server) { - model_.RemoveNotificationById(id, from_server); -} - -void AssistantNotificationControllerImpl::SetQuietMode(bool enabled) { - message_center::MessageCenter::Get()->SetQuietMode(enabled); -} - -// NotificationDelegate ------------------------------------------------------ - -void AssistantNotificationControllerImpl::AddOrUpdateNotification( - AssistantNotification notification) { - model_.AddOrUpdateNotification(std::move(notification)); -} - -void AssistantNotificationControllerImpl::RemoveNotificationByGroupingKey( - const std::string& grouping_key, - bool from_server) { - model_.RemoveNotificationsByGroupingKey(grouping_key, from_server); -} - -void AssistantNotificationControllerImpl::RemoveAllNotifications( - bool from_server) { - model_.RemoveAllNotifications(from_server); -} - -// AssistantNotificationModelObserver ------------------------------------------ - -void AssistantNotificationControllerImpl::OnNotificationAdded( - const AssistantNotification& notification) { - // Do not show system notifications if the setting is disabled. - if (!AssistantState::Get()->notification_enabled().value_or(true)) - return; - - message_center::MessageCenter::Get()->AddNotification( - CreateSystemNotification(notifier_id_, notification)); -} - -void AssistantNotificationControllerImpl::OnNotificationUpdated( - const AssistantNotification& notification) { - // Do not show system notifications if the setting is disabled. - if (!AssistantState::Get()->notification_enabled().value_or(true)) - return; - - message_center::MessageCenter::Get()->UpdateNotification( - notification.client_id, - CreateSystemNotification(notifier_id_, notification)); -} - -void AssistantNotificationControllerImpl::OnNotificationRemoved( - const AssistantNotification& notification, - bool from_server) { - // Remove the notification from the message center. - message_center::MessageCenter::Get()->RemoveNotification( - notification.client_id, /*by_user=*/false); - - // Dismiss the notification on the server to sync across devices. - if (!from_server && AssistantState::Get()->assistant_status() == - assistant::AssistantStatus::READY) { - assistant_->DismissNotification(notification); - } -} - -void AssistantNotificationControllerImpl::OnAllNotificationsRemoved( - bool from_server) { - message_center::MessageCenter::Get()->RemoveNotificationsForNotifierId( - notifier_id_); -} - -// message_center::MessageCenterObserver --------------------------------------- - -void AssistantNotificationControllerImpl::OnNotificationClicked( - const std::string& id, - const std::optional<int>& button_index, - const std::optional<std::u16string>& reply) { - const AssistantNotification* notification = model_.GetNotificationById(id); - if (!notification) - return; - - const auto& action_url = - button_index.has_value() - ? notification->buttons[button_index.value()].action_url - : notification->action_url; - - // Open the action url if it is valid. - if (IsValidActionUrl(action_url)) { - // NOTE: We copy construct a new GURL as our |notification| may be destroyed - // during the OpenUrl() sequence leaving |action_url| in a bad state. - AssistantController::Get()->OpenUrl(GURL(action_url)); - - const bool remove_notification = - button_index.has_value() ? notification->buttons[button_index.value()] - .remove_notification_on_click - : notification->remove_on_click; - - if (remove_notification) - model_.RemoveNotificationById(id, /*from_server=*/false); - return; - } - - if (!notification->from_server) - return; - - // If the notification is from the server, we retrieve the notification - // payload using the following indexing scheme: - // - // Index: | [0] | [1] | [2] | ... - // ------------------------------------------------- - // Action: | Top Level | Button 1 | Button 2 | ... - const int action_index = button_index.value_or(-1) + 1; - if (AssistantState::Get()->assistant_status() == - assistant::AssistantStatus::READY) { - assistant_->RetrieveNotification(*notification, action_index); - } -} - -void AssistantNotificationControllerImpl::OnNotificationRemoved( - const std::string& notification_id, - bool by_user) { - // Update our notification model to remain in sync w/ Message Center. - if (model_.GetNotificationById(notification_id)) - model_.RemoveNotificationById(notification_id, /*from_server=*/false); -} - -} // namespace ash
diff --git a/ash/assistant/assistant_notification_controller_impl.h b/ash/assistant/assistant_notification_controller_impl.h deleted file mode 100644 index c92ed15..0000000 --- a/ash/assistant/assistant_notification_controller_impl.h +++ /dev/null
@@ -1,92 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_NOTIFICATION_CONTROLLER_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_NOTIFICATION_CONTROLLER_IMPL_H_ - -#include <string> - -#include "ash/ash_export.h" -#include "ash/assistant/assistant_notification_expiry_monitor.h" -#include "ash/assistant/model/assistant_notification_model.h" -#include "ash/assistant/model/assistant_notification_model_observer.h" -#include "ash/public/cpp/assistant/controller/assistant_notification_controller.h" -#include "base/memory/raw_ptr.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" -#include "chromeos/ash/services/libassistant/public/cpp/assistant_notification.h" -#include "chromeos/ash/services/libassistant/public/mojom/notification_delegate.mojom.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "ui/message_center/message_center_observer.h" -#include "ui/message_center/public/cpp/notifier_id.h" - -namespace ash { - -// The class to manage Assistant notifications. -class ASH_EXPORT AssistantNotificationControllerImpl - : public AssistantNotificationController, - public AssistantNotificationModelObserver, - public message_center::MessageCenterObserver, - public libassistant::mojom::NotificationDelegate { - public: - using AssistantNotification = assistant::AssistantNotification; - - AssistantNotificationControllerImpl(); - - AssistantNotificationControllerImpl( - const AssistantNotificationControllerImpl&) = delete; - AssistantNotificationControllerImpl& operator=( - const AssistantNotificationControllerImpl&) = delete; - - ~AssistantNotificationControllerImpl() override; - - // Returns the underlying model. - const AssistantNotificationModel* model() const { return &model_; } - - // Provides a pointer to the |assistant| owned by AssistantController. - void SetAssistant(assistant::Assistant* assistant); - - // AssistantNotificationController: - void RemoveNotificationById(const std::string& id, bool from_server) override; - void SetQuietMode(bool enabled) override; - - // libassistant::mojom::NotificationDelegate: - void AddOrUpdateNotification(AssistantNotification notification) override; - void RemoveNotificationByGroupingKey(const std::string& grouping_id, - bool from_server) override; - void RemoveAllNotifications(bool from_server) override; - - // AssistantNotificationModelObserver: - void OnNotificationAdded(const AssistantNotification& notification) override; - void OnNotificationUpdated( - const AssistantNotification& notification) override; - void OnNotificationRemoved(const AssistantNotification& notification, - bool from_server) override; - void OnAllNotificationsRemoved(bool from_server) override; - - // message_center::MessageCenterObserver: - void OnNotificationAdded(const std::string& id) override {} - void OnNotificationClicked( - const std::string& id, - const std::optional<int>& button_index, - const std::optional<std::u16string>& reply) override; - void OnNotificationUpdated(const std::string& notification) override {} - void OnNotificationRemoved(const std::string& notification_id, - bool by_user) override; - - private: - AssistantNotificationModel model_; - AssistantNotificationExpiryMonitor expiry_monitor_; - - // Owned by AssistantService - raw_ptr<assistant::Assistant> assistant_ = nullptr; - - const message_center::NotifierId notifier_id_; - - mojo::Receiver<libassistant::mojom::NotificationDelegate> receiver_{this}; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_NOTIFICATION_CONTROLLER_IMPL_H_
diff --git a/ash/assistant/assistant_notification_expiry_monitor.cc b/ash/assistant/assistant_notification_expiry_monitor.cc deleted file mode 100644 index cb2c823..0000000 --- a/ash/assistant/assistant_notification_expiry_monitor.cc +++ /dev/null
@@ -1,137 +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. - -#include "ash/assistant/assistant_notification_expiry_monitor.h" - -#include <algorithm> - -#include "ash/assistant/assistant_notification_controller_impl.h" -#include "ash/assistant/model/assistant_notification_model.h" -#include "ash/assistant/model/assistant_notification_model_observer.h" -#include "base/functional/bind.h" -#include "base/memory/raw_ptr.h" -#include "base/time/time.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" - -namespace ash { - -namespace { - -bool HasExpired(const AssistantNotificationExpiryMonitor::AssistantNotification* - notification) { - return notification->expiry_time.has_value() && - (notification->expiry_time.value() <= base::Time::Now()); -} - -// Returns the minimum of the base::Time instances that actually have a value. -std::optional<base::Time> Min(std::optional<base::Time> left, - std::optional<base::Time> right) { - if (!left.has_value()) - return right; - - if (!right.has_value()) - return left; - - return std::min(left.value(), right.value()); -} - -} // namespace - -class AssistantNotificationExpiryMonitor::Observer - : public AssistantNotificationModelObserver { - public: - explicit Observer(AssistantNotificationExpiryMonitor* monitor) - : monitor_(monitor) {} - - Observer(const Observer&) = delete; - Observer& operator=(const Observer&) = delete; - - ~Observer() override = default; - - void OnNotificationAdded(const AssistantNotification& notification) override { - monitor_->UpdateTimer(); - } - - void OnNotificationUpdated( - const AssistantNotification& notification) override { - monitor_->UpdateTimer(); - } - - void OnNotificationRemoved(const AssistantNotification& notification, - bool from_server) override { - monitor_->UpdateTimer(); - } - - void OnAllNotificationsRemoved(bool from_server) override { - monitor_->UpdateTimer(); - } - - private: - const raw_ptr<AssistantNotificationExpiryMonitor> monitor_; -}; - -AssistantNotificationExpiryMonitor::AssistantNotificationExpiryMonitor( - AssistantNotificationControllerImpl* controller) - : controller_(controller), observer_(std::make_unique<Observer>(this)) { - DCHECK(controller_); - controller_->model()->AddObserver(observer_.get()); -} - -AssistantNotificationExpiryMonitor::~AssistantNotificationExpiryMonitor() = - default; - -void AssistantNotificationExpiryMonitor::UpdateTimer() { - std::optional<base::TimeDelta> timeout = GetTimerTimeout(); - if (timeout) { - timer_.Start( - FROM_HERE, timeout.value(), - base::BindOnce( - &AssistantNotificationExpiryMonitor::RemoveExpiredNotifications, - base::Unretained(this))); - } else { - timer_.Stop(); - } -} - -std::optional<base::TimeDelta> -AssistantNotificationExpiryMonitor::GetTimerTimeout() const { - std::optional<base::Time> endtime = GetTimerEndTime(); - if (endtime) - return endtime.value() - base::Time::Now(); - return std::nullopt; -} - -std::optional<base::Time> AssistantNotificationExpiryMonitor::GetTimerEndTime() - const { - std::optional<base::Time> result = std::nullopt; - for (const AssistantNotification* notification : GetNotifications()) - result = Min(result, notification->expiry_time); - return result; -} - -void AssistantNotificationExpiryMonitor::RemoveExpiredNotifications() { - for (const NotificationId& id : GetExpiredNotifications()) { - VLOG(1) << "Removing expired notification '" << id << "'"; - controller_->RemoveNotificationById(id, /*from_server=*/false); - } - - UpdateTimer(); -} - -std::vector<AssistantNotificationExpiryMonitor::NotificationId> -AssistantNotificationExpiryMonitor::GetExpiredNotifications() const { - std::vector<NotificationId> result; - for (const AssistantNotification* notification : GetNotifications()) { - if (HasExpired(notification)) - result.push_back(notification->client_id); - } - return result; -} - -std::vector<const AssistantNotificationExpiryMonitor::AssistantNotification*> -AssistantNotificationExpiryMonitor::GetNotifications() const { - return controller_->model()->GetNotifications(); -} - -} // namespace ash
diff --git a/ash/assistant/assistant_notification_expiry_monitor.h b/ash/assistant/assistant_notification_expiry_monitor.h deleted file mode 100644 index 34d6355..0000000 --- a/ash/assistant/assistant_notification_expiry_monitor.h +++ /dev/null
@@ -1,61 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_NOTIFICATION_EXPIRY_MONITOR_H_ -#define ASH_ASSISTANT_ASSISTANT_NOTIFICATION_EXPIRY_MONITOR_H_ - -#include <memory> -#include <optional> -#include <string> -#include <vector> - -#include "ash/assistant/model/assistant_notification_model_observer.h" -#include "base/memory/raw_ptr.h" -#include "base/timer/timer.h" - -namespace ash { - -class AssistantNotificationControllerImpl; - -// Will track all Assistant notifications by subscribing to the given -// |controller| and will call -// |AssistantNotificationController::RemoveNotificationById| when the -// notification expires (i.e. when the current time passes the value in the -// expiry_time| field). -class AssistantNotificationExpiryMonitor { - public: - using AssistantNotification = assistant::AssistantNotification; - - explicit AssistantNotificationExpiryMonitor( - AssistantNotificationControllerImpl* controller); - - AssistantNotificationExpiryMonitor( - const AssistantNotificationExpiryMonitor&) = delete; - AssistantNotificationExpiryMonitor& operator=( - const AssistantNotificationExpiryMonitor&) = delete; - - ~AssistantNotificationExpiryMonitor(); - - private: - using NotificationId = std::string; - class Observer; - - // Start/stop the timer waiting for the next expiry time. - // If the timer is already running this will start a new timer with the - // (new) expiry time that will expire first. - void UpdateTimer(); - - std::optional<base::TimeDelta> GetTimerTimeout() const; - std::optional<base::Time> GetTimerEndTime() const; - void RemoveExpiredNotifications(); - std::vector<NotificationId> GetExpiredNotifications() const; - std::vector<const AssistantNotification*> GetNotifications() const; - - base::OneShotTimer timer_; - const raw_ptr<AssistantNotificationControllerImpl> controller_; - std::unique_ptr<Observer> observer_; -}; - -} // namespace ash -#endif // ASH_ASSISTANT_ASSISTANT_NOTIFICATION_EXPIRY_MONITOR_H_
diff --git a/ash/assistant/assistant_setup_controller.cc b/ash/assistant/assistant_setup_controller.cc deleted file mode 100644 index a15003b..0000000 --- a/ash/assistant/assistant_setup_controller.cc +++ /dev/null
@@ -1,84 +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. - -#include "ash/assistant/assistant_setup_controller.h" - -#include "ash/assistant/assistant_controller_impl.h" -#include "ash/assistant/util/deep_link_util.h" -#include "ash/assistant/util/i18n_util.h" -#include "ash/public/cpp/assistant/controller/assistant_ui_controller.h" -#include "base/functional/bind.h" -#include "base/functional/callback_helpers.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_prefs.h" -#include "chromeos/ash/services/assistant/public/cpp/features.h" - -namespace { - -constexpr char kGSuiteAdministratorInstructionsUrl[] = - "https://support.google.com/a/answer/6304876"; - -} // namespace - -namespace ash { - -AssistantSetupController::AssistantSetupController( - AssistantControllerImpl* assistant_controller) - : assistant_controller_(assistant_controller) { - assistant_controller_observation_.Observe(AssistantController::Get()); -} - -AssistantSetupController::~AssistantSetupController() = default; - -void AssistantSetupController::OnAssistantControllerConstructed() { - assistant_controller_->view_delegate()->AddObserver(this); -} - -void AssistantSetupController::OnAssistantControllerDestroying() { - assistant_controller_->view_delegate()->RemoveObserver(this); -} - -void AssistantSetupController::OnDeepLinkReceived( - assistant::util::DeepLinkType type, - const std::map<std::string, std::string>& params) { - if (type != assistant::util::DeepLinkType::kOnboarding) - return; - - std::optional<bool> relaunch = assistant::util::GetDeepLinkParamAsBool( - params, assistant::util::DeepLinkParam::kRelaunch); - - StartOnboarding(relaunch.value_or(false)); -} - -void AssistantSetupController::OnOptInButtonPressed() { - using assistant::prefs::ConsentStatus; - if (AssistantState::Get()->consent_status().value_or( - ConsentStatus::kUnknown) == ConsentStatus::kUnauthorized) { - AssistantController::Get()->OpenUrl(assistant::util::CreateLocalizedGURL( - kGSuiteAdministratorInstructionsUrl)); - } else { - StartOnboarding(/*relaunch=*/true); - } -} - -void AssistantSetupController::StartOnboarding(bool relaunch, FlowType type) { - auto* assistant_setup = AssistantSetup::GetInstance(); - if (!assistant_setup) - return; - - AssistantUiController::Get()->CloseUi(assistant::AssistantExitPoint::kSetup); - - assistant_setup->StartAssistantOptInFlow( - type, base::BindOnce(&AssistantSetupController::OnOptInFlowFinished, - weak_ptr_factory_.GetWeakPtr(), relaunch)); -} - -void AssistantSetupController::OnOptInFlowFinished(bool relaunch, - bool completed) { - if (relaunch && completed) { - AssistantUiController::Get()->ShowUi( - assistant::AssistantEntryPoint::kSetup); - } -} - -} // namespace ash
diff --git a/ash/assistant/assistant_setup_controller.h b/ash/assistant/assistant_setup_controller.h deleted file mode 100644 index f597638..0000000 --- a/ash/assistant/assistant_setup_controller.h +++ /dev/null
@@ -1,60 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_SETUP_CONTROLLER_H_ -#define ASH_ASSISTANT_ASSISTANT_SETUP_CONTROLLER_H_ - -#include <map> -#include <string> - -#include "ash/assistant/ui/assistant_view_delegate.h" -#include "ash/public/cpp/assistant/assistant_setup.h" -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/weak_ptr.h" -#include "base/scoped_observation.h" - -namespace ash { - -class AssistantControllerImpl; - -class AssistantSetupController : public AssistantControllerObserver, - public AssistantViewDelegateObserver { - public: - explicit AssistantSetupController( - AssistantControllerImpl* assistant_controller); - - AssistantSetupController(const AssistantSetupController&) = delete; - AssistantSetupController& operator=(const AssistantSetupController&) = delete; - - ~AssistantSetupController() override; - - // AssistantControllerObserver: - void OnAssistantControllerConstructed() override; - void OnAssistantControllerDestroying() override; - void OnDeepLinkReceived( - assistant::util::DeepLinkType type, - const std::map<std::string, std::string>& params) override; - - // AssistantViewDelegateObserver: - void OnOptInButtonPressed() override; - - void StartOnboarding(bool relaunch, FlowType type = FlowType::kConsentFlow); - - private: - void OnOptInFlowFinished(bool relaunch, bool completed); - - const raw_ptr<AssistantControllerImpl> - assistant_controller_; // Owned by Shell. - - base::ScopedObservation<AssistantController, AssistantControllerObserver> - assistant_controller_observation_{this}; - - base::WeakPtrFactory<AssistantSetupController> weak_ptr_factory_{this}; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_SETUP_CONTROLLER_H_
diff --git a/ash/assistant/assistant_state_controller.cc b/ash/assistant/assistant_state_controller.cc deleted file mode 100644 index 2de95d6..0000000 --- a/ash/assistant/assistant_state_controller.cc +++ /dev/null
@@ -1,27 +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. - -#include "ash/assistant/assistant_state_controller.h" - -#include "ash/session/session_controller_impl.h" -#include "ash/shell.h" - -namespace ash { - -AssistantStateController::AssistantStateController() - : session_observer_(this) {} - -AssistantStateController::~AssistantStateController() = default; - -void AssistantStateController::OnActiveUserPrefServiceChanged( - PrefService* pref_service) { - // For non-primary prefs, calling the method with nullptr will reset the - // current registry. - PrefService* primary_user_prefs = - Shell::Get()->session_controller()->GetPrimaryUserPrefService(); - RegisterPrefChanges(primary_user_prefs == pref_service ? primary_user_prefs - : nullptr); -} - -} // namespace ash
diff --git a/ash/assistant/assistant_state_controller.h b/ash/assistant/assistant_state_controller.h deleted file mode 100644 index 83998e3..0000000 --- a/ash/assistant/assistant_state_controller.h +++ /dev/null
@@ -1,34 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_STATE_CONTROLLER_H_ -#define ASH_ASSISTANT_ASSISTANT_STATE_CONTROLLER_H_ - -#include "ash/ash_export.h" -#include "ash/public/cpp/assistant/assistant_state.h" -#include "ash/public/cpp/session/session_observer.h" - -namespace ash { - -// Provide access of Assistant related prefs and states to the clients. -class ASH_EXPORT AssistantStateController : public AssistantState, - public SessionObserver { - public: - AssistantStateController(); - - AssistantStateController(const AssistantStateController&) = delete; - AssistantStateController& operator=(const AssistantStateController&) = delete; - - ~AssistantStateController() override; - - private: - // SessionObserver: - void OnActiveUserPrefServiceChanged(PrefService* pref_service) override; - - ScopedSessionObserver session_observer_; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_STATE_CONTROLLER_H_
diff --git a/ash/assistant/assistant_suggestions_controller_impl.cc b/ash/assistant/assistant_suggestions_controller_impl.cc deleted file mode 100644 index 281b5261..0000000 --- a/ash/assistant/assistant_suggestions_controller_impl.cc +++ /dev/null
@@ -1,208 +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. - -#include "ash/assistant/assistant_suggestions_controller_impl.h" - -#include <algorithm> -#include <string> -#include <utility> -#include <vector> - -#include "ash/assistant/model/assistant_ui_model.h" -#include "ash/assistant/util/assistant_util.h" -#include "ash/assistant/util/deep_link_util.h" -#include "ash/assistant/util/resource_util.h" -#include "ash/public/cpp/assistant/controller/assistant_ui_controller.h" -#include "ash/shell.h" -#include "ash/strings/grit/ash_strings.h" -#include "base/functional/bind.h" -#include "base/rand_util.h" -#include "base/unguessable_token.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_prefs.h" -#include "chromeos/ash/services/assistant/public/cpp/features.h" -#include "chromeos/ash/services/libassistant/public/cpp/assistant_suggestion.h" -#include "ui/base/l10n/l10n_util.h" - -namespace ash { - -namespace { - -using assistant::AssistantSuggestion; -using assistant::AssistantSuggestionType; -using assistant::prefs::AssistantOnboardingMode; - -// Conversation starters ------------------------------------------------------- - -constexpr int kMaxNumOfConversationStarters = 3; - -} // namespace - -// AssistantSuggestionsControllerImpl ------------------------------------------ - -AssistantSuggestionsControllerImpl::AssistantSuggestionsControllerImpl() { - UpdateConversationStarters(); - assistant_controller_observation_.Observe(AssistantController::Get()); -} - -AssistantSuggestionsControllerImpl::~AssistantSuggestionsControllerImpl() = - default; - -const AssistantSuggestionsModel* AssistantSuggestionsControllerImpl::GetModel() - const { - return &model_; -} - -void AssistantSuggestionsControllerImpl::OnAssistantControllerConstructed() { - AssistantUiController::Get()->GetModel()->AddObserver(this); - AssistantState::Get()->AddObserver(this); -} - -void AssistantSuggestionsControllerImpl::OnAssistantControllerDestroying() { - AssistantState::Get()->RemoveObserver(this); - AssistantUiController::Get()->GetModel()->RemoveObserver(this); -} - -void AssistantSuggestionsControllerImpl::OnUiVisibilityChanged( - AssistantVisibility new_visibility, - AssistantVisibility old_visibility, - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) { - // When Assistant is finishing a session, we update our cache of conversation - // starters so that they're fresh for the next launch. - if (assistant::util::IsFinishingSession(new_visibility)) - UpdateConversationStarters(); -} - -void AssistantSuggestionsControllerImpl::OnAssistantContextEnabled( - bool enabled) { - // We currently assume that the context setting is not being modified while - // Assistant UI is visible. - DCHECK_NE(AssistantVisibility::kVisible, - AssistantUiController::Get()->GetModel()->visibility()); - UpdateConversationStarters(); -} - -void AssistantSuggestionsControllerImpl::OnAssistantOnboardingModeChanged( - AssistantOnboardingMode onboarding_mode) { - UpdateOnboardingSuggestions(); -} - -void AssistantSuggestionsControllerImpl::UpdateConversationStarters() { - std::vector<AssistantSuggestion> conversation_starters; - - // Adds a conversation starter for the given |message_id| and |action_url|. - auto AddConversationStarter = [&conversation_starters]( - int message_id, GURL action_url = GURL()) { - AssistantSuggestion starter; - starter.id = base::UnguessableToken::Create(); - starter.type = AssistantSuggestionType::kConversationStarter; - starter.text = l10n_util::GetStringUTF8(message_id); - starter.action_url = action_url; - conversation_starters.push_back(std::move(starter)); - }; - - // Always show the "What can you do?" conversation starter. - AddConversationStarter(IDS_ASH_ASSISTANT_CHIP_WHAT_CAN_YOU_DO); - - // The rest of the conversation starters will be shuffled... - std::vector<int> shuffled_message_ids; - - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_IM_BORED); - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_OPEN_FILES); - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_PLAY_MUSIC); - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_SEND_AN_EMAIL); - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_SET_A_REMINDER); - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_TELL_ME_A_JOKE); - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_WHATS_ON_MY_CALENDAR); - shuffled_message_ids.push_back(IDS_ASH_ASSISTANT_CHIP_WHATS_THE_WEATHER); - - base::RandomShuffle(shuffled_message_ids.begin(), shuffled_message_ids.end()); - - // ...and added until we have no more than |kMaxNumOfConversationStarters|. - for (int i = 0; - conversation_starters.size() < kMaxNumOfConversationStarters && - i < static_cast<int>(shuffled_message_ids.size()); - ++i) { - AddConversationStarter(shuffled_message_ids[i]); - } - - model_.SetConversationStarters(std::move(conversation_starters)); -} - -void AssistantSuggestionsControllerImpl::UpdateOnboardingSuggestions() { - auto CreateIconResourceLink = [](int message_id) { - switch (message_id) { - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_CONVERSION: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kConversionPath); - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_KNOWLEDGE: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kPersonPinCircle); - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_KNOWLEDGE_EDU: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kStraighten); - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_LANGUAGE: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kTranslate); - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_MATH: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kCalculate); - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_PERSONALITY: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kSentimentVerySatisfied); - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_PRODUCTIVITY: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kTimer); - case IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_TECHNICAL: - return assistant::util::CreateIconResourceLink( - assistant::util::IconName::kScreenshot); - default: - NOTREACHED(); - } - }; - - std::vector<AssistantSuggestion> onboarding_suggestions; - - using assistant::AssistantBetterOnboardingType; - auto AddSuggestion = [&CreateIconResourceLink, &onboarding_suggestions]( - int message_id, AssistantBetterOnboardingType type) { - onboarding_suggestions.emplace_back(); - auto& suggestion = onboarding_suggestions.back(); - suggestion.id = base::UnguessableToken::Create(); - suggestion.type = AssistantSuggestionType::kBetterOnboarding; - suggestion.better_onboarding_type = type; - suggestion.text = l10n_util::GetStringUTF8(message_id); - suggestion.icon_url = CreateIconResourceLink(message_id); - suggestion.action_url = GURL(); - }; - - switch (AssistantState::Get()->onboarding_mode().value_or( - AssistantOnboardingMode::kDefault)) { - case AssistantOnboardingMode::kEducation: - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_MATH, - AssistantBetterOnboardingType::kMath); - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_KNOWLEDGE_EDU, - AssistantBetterOnboardingType::kKnowledgeEdu); - break; - case AssistantOnboardingMode::kDefault: - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_CONVERSION, - AssistantBetterOnboardingType::kConversion); - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_KNOWLEDGE, - AssistantBetterOnboardingType::kKnowledge); - break; - } - - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_PRODUCTIVITY, - AssistantBetterOnboardingType::kProductivity); - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_PERSONALITY, - AssistantBetterOnboardingType::kPersonality); - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_LANGUAGE, - AssistantBetterOnboardingType::kLanguage); - AddSuggestion(IDS_ASH_ASSISTANT_ONBOARDING_SUGGESTION_TECHNICAL, - AssistantBetterOnboardingType::kTechnical); - - model_.SetOnboardingSuggestions(std::move(onboarding_suggestions)); -} - -} // namespace ash
diff --git a/ash/assistant/assistant_suggestions_controller_impl.h b/ash/assistant/assistant_suggestions_controller_impl.h deleted file mode 100644 index d7de226..0000000 --- a/ash/assistant/assistant_suggestions_controller_impl.h +++ /dev/null
@@ -1,70 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_SUGGESTIONS_CONTROLLER_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_SUGGESTIONS_CONTROLLER_IMPL_H_ - -#include "ash/assistant/model/assistant_suggestions_model.h" -#include "ash/assistant/model/assistant_ui_model_observer.h" -#include "ash/public/cpp/assistant/assistant_state.h" -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" -#include "ash/public/cpp/assistant/controller/assistant_suggestions_controller.h" -#include "base/scoped_observation.h" - -namespace ash { - -// The implementation of the Assistant controller in charge of suggestions. -class AssistantSuggestionsControllerImpl - : public AssistantSuggestionsController, - public AssistantControllerObserver, - public AssistantUiModelObserver, - public AssistantStateObserver { - public: - AssistantSuggestionsControllerImpl(); - - AssistantSuggestionsControllerImpl( - const AssistantSuggestionsControllerImpl&) = delete; - AssistantSuggestionsControllerImpl& operator=( - const AssistantSuggestionsControllerImpl&) = delete; - - ~AssistantSuggestionsControllerImpl() override; - - // AssistantSuggestionsController: - const AssistantSuggestionsModel* GetModel() const override; - - // AssistantControllerObserver: - void OnAssistantControllerConstructed() override; - void OnAssistantControllerDestroying() override; - - // AssistantUiModelObserver: - void OnUiVisibilityChanged( - AssistantVisibility new_visibility, - AssistantVisibility old_visibility, - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) override; - - private: - // AssistantStateObserver: - void OnAssistantContextEnabled(bool enabled) override; - void OnAssistantOnboardingModeChanged( - assistant::prefs::AssistantOnboardingMode onboarding_mode) override; - - void UpdateConversationStarters(); - void UpdateOnboardingSuggestions(); - - AssistantSuggestionsModel model_; - - base::ScopedObservation<AssistantController, AssistantControllerObserver> - assistant_controller_observation_{this}; - - // A WeakPtrFactory used to manage lifecycle of conversation starter requests - // to the server (via the dedicated ConversationStartersClient). - base::WeakPtrFactory<AssistantSuggestionsControllerImpl> - conversation_starters_weak_factory_{this}; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_SUGGESTIONS_CONTROLLER_IMPL_H_
diff --git a/ash/assistant/assistant_ui_controller_impl.cc b/ash/assistant/assistant_ui_controller_impl.cc deleted file mode 100644 index 61fd2225..0000000 --- a/ash/assistant/assistant_ui_controller_impl.cc +++ /dev/null
@@ -1,242 +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. - -#include "ash/assistant/assistant_ui_controller_impl.h" - -#include <optional> - -#include "ash/assistant/assistant_controller_impl.h" -#include "ash/assistant/model/assistant_interaction_model.h" -#include "ash/assistant/ui/assistant_ui_constants.h" -#include "ash/assistant/util/assistant_util.h" -#include "ash/assistant/util/deep_link_util.h" -#include "ash/assistant/util/histogram_util.h" -#include "ash/constants/ash_pref_names.h" -#include "ash/constants/notifier_catalogs.h" -#include "ash/public/cpp/assistant/assistant_setup.h" -#include "ash/public/cpp/assistant/assistant_state.h" -#include "ash/public/cpp/assistant/controller/assistant_interaction_controller.h" -#include "ash/public/cpp/system/toast_data.h" -#include "ash/session/session_controller_impl.h" -#include "ash/shell.h" -#include "ash/strings/grit/ash_strings.h" -#include "ash/system/toast/toast_manager_impl.h" -#include "base/functional/bind.h" -#include "base/metrics/histogram_functions.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_browser_delegate.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_prefs.h" -#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" -#include "chromeos/ash/services/assistant/public/cpp/features.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/pref_service.h" -#include "ui/base/l10n/l10n_util.h" - -namespace ash { - -namespace { - -// Helpers --------------------------------------------------------------------- - -PrefService* pref_service() { - auto* result = - Shell::Get()->session_controller()->GetPrimaryUserPrefService(); - DCHECK(result); - return result; -} - -// Toast ----------------------------------------------------------------------- - -constexpr char kUnboundServiceToastId[] = - "assistant_controller_unbound_service"; - -void ShowToast(const std::string& id, - ToastCatalogName catalog_name, - int message_id) { - ToastData toast(id, catalog_name, l10n_util::GetStringUTF16(message_id)); - Shell::Get()->toast_manager()->Show(std::move(toast)); -} - -} // namespace - -// AssistantUiControllerImpl --------------------------------------------------- - -AssistantUiControllerImpl::AssistantUiControllerImpl( - AssistantControllerImpl* assistant_controller) - : assistant_controller_(assistant_controller) { - model_.AddObserver(this); - assistant_controller_observation_.Observe(AssistantController::Get()); - overview_controller_observation_.Observe(Shell::Get()->overview_controller()); -} - -AssistantUiControllerImpl::~AssistantUiControllerImpl() { - model_.RemoveObserver(this); -} - -void AssistantUiControllerImpl::SetAssistant(assistant::Assistant* assistant) { - assistant_ = assistant; -} - -const AssistantUiModel* AssistantUiControllerImpl::GetModel() const { - return &model_; -} - -int AssistantUiControllerImpl::GetNumberOfSessionsWhereOnboardingShown() const { - return pref_service()->GetInteger( - prefs::kAssistantNumSessionsWhereOnboardingShown); -} - -bool AssistantUiControllerImpl::HasShownOnboarding() const { - return has_shown_onboarding_; -} - -void AssistantUiControllerImpl::SetKeyboardTraversalMode( - bool keyboard_traversal_mode) { - model_.SetKeyboardTraversalMode(keyboard_traversal_mode); -} - -void AssistantUiControllerImpl::ShowUi(AssistantEntryPoint entry_point) { - // TODO: crbug.com/417538592 - open Gemini PWA via AppList and delete - // dependency to AssistantBrowserDelegate. - if (ash::assistant::features::IsNewEntryPointEnabled()) { - assistant::AssistantBrowserDelegate::Get()->OpenNewEntryPoint(); - return; - } - - // Skip if the opt-in window is active. - auto* assistant_setup = AssistantSetup::GetInstance(); - if (assistant_setup && assistant_setup->BounceOptInWindowIfActive()) - return; - - auto* assistant_state = AssistantState::Get(); - - if (!assistant_state->settings_enabled().value_or(false) || - assistant_state->locked_full_screen_enabled().value_or(false)) { - return; - } - - // TODO(dmblack): Show a more helpful message to the user. - if (assistant_state->assistant_status() == - assistant::AssistantStatus::NOT_READY) { - ShowUnboundErrorToast(); - return; - } - - if (!assistant_) { - ShowUnboundErrorToast(); - return; - } - - model_.SetVisible(entry_point); -} - -std::optional<base::ScopedClosureRunner> AssistantUiControllerImpl::CloseUi( - AssistantExitPoint exit_point) { - if (model_.visibility() != AssistantVisibility::kVisible) - return std::nullopt; - - // Set visibility to `kClosing`. - model_.SetClosing(exit_point); - - // When the return value is destroyed, visibility will be set to `kClosed` - // provided the visibility change hasn't been invalidated. - return base::ScopedClosureRunner(base::BindOnce( - [](const base::WeakPtr<AssistantUiControllerImpl>& weak_ptr, - assistant::AssistantExitPoint exit_point) { - if (weak_ptr) - weak_ptr->model_.SetClosed(exit_point); - }, - weak_factory_for_delayed_visibility_changes_.GetWeakPtr(), exit_point)); -} - -void AssistantUiControllerImpl::SetAppListBubbleWidth(int width) { - model_.SetAppListBubbleWidth(width); -} - -void AssistantUiControllerImpl::ToggleUi( - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) { - // When not visible, toggling will show the UI. - if (model_.visibility() != AssistantVisibility::kVisible) { - DCHECK(entry_point.has_value()); - ShowUi(entry_point.value()); - return; - } - - // Otherwise toggling closes the UI. - DCHECK(exit_point.has_value()); - CloseUi(exit_point.value()); -} - -void AssistantUiControllerImpl::OnInteractionStateChanged( - InteractionState interaction_state) { - if (interaction_state != InteractionState::kActive) - return; - - // If there is an active interaction, we need to show Assistant UI if it is - // not already showing. We don't have enough information here to know what - // the interaction source is. - ShowUi(AssistantEntryPoint::kUnspecified); -} - -void AssistantUiControllerImpl::OnAssistantControllerConstructed() { - AssistantInteractionController::Get()->GetModel()->AddObserver(this); - assistant_controller_->view_delegate()->AddObserver(this); -} - -void AssistantUiControllerImpl::OnAssistantControllerDestroying() { - assistant_controller_->view_delegate()->RemoveObserver(this); - AssistantInteractionController::Get()->GetModel()->RemoveObserver(this); -} - -void AssistantUiControllerImpl::OnOpeningUrl(const GURL& url, - bool in_background, - bool from_server) { - if (model_.visibility() != AssistantVisibility::kVisible) - return; - - CloseUi(from_server ? AssistantExitPoint::kNewBrowserTabFromServer - : AssistantExitPoint::kNewBrowserTabFromUser); -} - -void AssistantUiControllerImpl::OnUiVisibilityChanged( - AssistantVisibility new_visibility, - AssistantVisibility old_visibility, - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) { - weak_factory_for_delayed_visibility_changes_.InvalidateWeakPtrs(); - - if (new_visibility == AssistantVisibility::kVisible) { - // Only record the entry point when Assistant UI becomes visible. - assistant::util::RecordAssistantEntryPoint(entry_point.value()); - } - - if (old_visibility == AssistantVisibility::kVisible) { - // Only record the exit point when Assistant UI becomes invisible to - // avoid recording duplicate events (e.g. pressing ESC key). - assistant::util::RecordAssistantExitPoint(exit_point.value()); - } -} - -void AssistantUiControllerImpl::OnOnboardingShown() { - if (has_shown_onboarding_) - return; - - has_shown_onboarding_ = true; - - // Update the number of user sessions in which Assistant onboarding was shown. - pref_service()->SetInteger(prefs::kAssistantNumSessionsWhereOnboardingShown, - GetNumberOfSessionsWhereOnboardingShown() + 1); -} - -void AssistantUiControllerImpl::OnOverviewModeWillStart() { - // Close Assistant UI before entering overview mode. - CloseUi(AssistantExitPoint::kOverviewMode); -} - -void AssistantUiControllerImpl::ShowUnboundErrorToast() { - ShowToast(kUnboundServiceToastId, ToastCatalogName::kAssistantUnboundService, - IDS_ASH_ASSISTANT_ERROR_GENERIC); -} - -} // namespace ash
diff --git a/ash/assistant/assistant_ui_controller_impl.h b/ash/assistant/assistant_ui_controller_impl.h deleted file mode 100644 index c229a66..0000000 --- a/ash/assistant/assistant_ui_controller_impl.h +++ /dev/null
@@ -1,113 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_IMPL_H_ - -#include <optional> - -#include "ash/ash_export.h" -#include "ash/assistant/model/assistant_interaction_model_observer.h" -#include "ash/assistant/model/assistant_ui_model.h" -#include "ash/assistant/model/assistant_ui_model_observer.h" -#include "ash/assistant/ui/assistant_view_delegate.h" -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" -#include "ash/public/cpp/assistant/controller/assistant_ui_controller.h" -#include "ash/wm/overview/overview_controller.h" -#include "ash/wm/overview/overview_observer.h" -#include "base/memory/raw_ptr.h" -#include "base/scoped_observation.h" - -namespace chromeos { -namespace assistant { -namespace mojom { -class Assistant; -} // namespace mojom -} // namespace assistant -} // namespace chromeos - -namespace ash { - -class AssistantControllerImpl; - -class ASH_EXPORT AssistantUiControllerImpl - : public AssistantUiController, - public AssistantControllerObserver, - public AssistantInteractionModelObserver, - public AssistantUiModelObserver, - public AssistantViewDelegateObserver, - public OverviewObserver { - public: - explicit AssistantUiControllerImpl( - AssistantControllerImpl* assistant_controller); - - AssistantUiControllerImpl(const AssistantUiControllerImpl&) = delete; - AssistantUiControllerImpl& operator=(const AssistantUiControllerImpl&) = - delete; - - ~AssistantUiControllerImpl() override; - - // Provides a pointer to the |assistant| owned by AssistantService. - void SetAssistant(assistant::Assistant* assistant); - - // AssistantUiController: - const AssistantUiModel* GetModel() const override; - int GetNumberOfSessionsWhereOnboardingShown() const override; - bool HasShownOnboarding() const override; - void SetKeyboardTraversalMode(bool keyboard_traversal_mode) override; - void ShowUi(AssistantEntryPoint entry_point) override; - void ToggleUi(std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) override; - std::optional<base::ScopedClosureRunner> CloseUi( - AssistantExitPoint exit_point) override; - void SetAppListBubbleWidth(int width) override; - - // AssistantInteractionModelObserver: - void OnInteractionStateChanged(InteractionState interaction_state) override; - - // AssistantControllerObserver: - void OnAssistantControllerConstructed() override; - void OnAssistantControllerDestroying() override; - void OnOpeningUrl(const GURL& url, - bool in_background, - bool from_server) override; - - // AssistantUiModelObserver: - void OnUiVisibilityChanged( - AssistantVisibility new_visibility, - AssistantVisibility old_visibility, - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) override; - - // AssistantViewDelegateObserver: - void OnOnboardingShown() override; - - // OverviewObserver: - void OnOverviewModeWillStart() override; - - void ShowUnboundErrorToast(); - - private: - const raw_ptr<AssistantControllerImpl> - assistant_controller_; // Owned by Shell. - AssistantUiModel model_; - bool has_shown_onboarding_ = false; - - // Owned by AssistantService. - raw_ptr<assistant::Assistant> assistant_ = nullptr; - - base::ScopedObservation<AssistantController, AssistantControllerObserver> - assistant_controller_observation_{this}; - - base::ScopedObservation<OverviewController, OverviewObserver> - overview_controller_observation_{this}; - - base::WeakPtrFactory<AssistantUiControllerImpl> - weak_factory_for_delayed_visibility_changes_{this}; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_IMPL_H_
diff --git a/ash/assistant/assistant_view_delegate_impl.h b/ash/assistant/assistant_view_delegate_impl.h deleted file mode 100644 index b1e895e..0000000 --- a/ash/assistant/assistant_view_delegate_impl.h +++ /dev/null
@@ -1,56 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_VIEW_DELEGATE_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_VIEW_DELEGATE_IMPL_H_ - -#include <string> - -#include "ash/assistant/ui/assistant_view_delegate.h" -#include "base/memory/raw_ptr.h" - -namespace ash { - -class AssistantControllerImpl; - -class AssistantViewDelegateImpl : public AssistantViewDelegate { - public: - explicit AssistantViewDelegateImpl( - AssistantControllerImpl* assistant_controller); - - AssistantViewDelegateImpl(const AssistantViewDelegateImpl&) = delete; - AssistantViewDelegateImpl& operator=(const AssistantViewDelegateImpl&) = - delete; - - ~AssistantViewDelegateImpl() override; - - // AssistantViewDelegate: - const AssistantNotificationModel* GetNotificationModel() const override; - void AddObserver(AssistantViewDelegateObserver* observer) override; - void RemoveObserver(AssistantViewDelegateObserver* observer) override; - void DownloadImage(const GURL& url, - ImageDownloader::DownloadCallback callback) override; - ::wm::CursorManager* GetCursorManager() override; - std::string GetPrimaryUserGivenName() const override; - aura::Window* GetRootWindowForDisplayId(int64_t display_id) override; - aura::Window* GetRootWindowForNewWindows() override; - bool IsTabletMode() const override; - void OnDialogPlateButtonPressed(AssistantButtonId id) override; - void OnDialogPlateContentsCommitted(const std::string& text) override; - void OnNotificationButtonPressed(const std::string& notification_id, - int notification_button_index) override; - void OnOnboardingShown() override; - void OnOptInButtonPressed() override; - void OnSuggestionPressed( - const base::UnguessableToken& suggestion_id) override; - void OnLauncherSearchChipPressed(std::u16string_view query) override; - - private: - const raw_ptr<AssistantControllerImpl> assistant_controller_; - base::ObserverList<AssistantViewDelegateObserver> view_delegate_observers_; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_VIEW_DELEGATE_IMPL_H_
diff --git a/ash/assistant/assistant_web_view_delegate_impl.cc b/ash/assistant/assistant_web_view_delegate_impl.cc deleted file mode 100644 index 3554922b..0000000 --- a/ash/assistant/assistant_web_view_delegate_impl.cc +++ /dev/null
@@ -1,97 +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. - -#include "ash/assistant/assistant_web_view_delegate_impl.h" - -#include "ash/frame/non_client_frame_view_ash.h" -#include "chromeos/ui/frame/caption_buttons/caption_button_model.h" -#include "chromeos/ui/frame/default_frame_header.h" -#include "ui/views/view_utils.h" -#include "ui/views/widget/widget.h" -#include "ui/views/window/caption_button_types.h" -#include "ui/views/window/frame_caption_button.h" -#include "ui/views/window/non_client_view.h" - -namespace ash { - -namespace { - -class AssistantWebContainerCaptionButtonModel - : public chromeos::CaptionButtonModel { - public: - AssistantWebContainerCaptionButtonModel() = default; - - AssistantWebContainerCaptionButtonModel( - const AssistantWebContainerCaptionButtonModel&) = delete; - AssistantWebContainerCaptionButtonModel& operator=( - const AssistantWebContainerCaptionButtonModel&) = delete; - - ~AssistantWebContainerCaptionButtonModel() override = default; - - // CaptionButtonModel: - bool IsVisible(views::CaptionButtonIcon type) const override { - switch (type) { - case views::CAPTION_BUTTON_ICON_CLOSE: - return true; - - case views::CAPTION_BUTTON_ICON_BACK: - return back_button_visibility_; - - case views::CAPTION_BUTTON_ICON_MINIMIZE: - case views::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE: - case views::CAPTION_BUTTON_ICON_LEFT_TOP_SNAPPED: - case views::CAPTION_BUTTON_ICON_RIGHT_BOTTOM_SNAPPED: - case views::CAPTION_BUTTON_ICON_MENU: - case views::CAPTION_BUTTON_ICON_ZOOM: - case views::CAPTION_BUTTON_ICON_LOCATION: - case views::CAPTION_BUTTON_ICON_CENTER: - case views::CAPTION_BUTTON_ICON_FLOAT: - case views::CAPTION_BUTTON_ICON_CUSTOM: - case views::CAPTION_BUTTON_ICON_COUNT: - return false; - } - } - - bool IsEnabled(views::CaptionButtonIcon type) const override { return true; } - - bool InZoomMode() const override { return false; } - - void set_back_button_visibility(bool visibility) { - back_button_visibility_ = visibility; - } - - private: - bool back_button_visibility_ = false; -}; - -} // namespace - -AssistantWebViewDelegateImpl::AssistantWebViewDelegateImpl() = default; - -AssistantWebViewDelegateImpl::~AssistantWebViewDelegateImpl() = default; - -void AssistantWebViewDelegateImpl::UpdateBackButtonVisibility( - views::Widget* widget, - bool visibility) { - auto caption_button_model = - std::make_unique<AssistantWebContainerCaptionButtonModel>(); - caption_button_model->set_back_button_visibility(visibility); - - auto* non_client_view = widget->non_client_view(); - - DCHECK( - views::IsViewClass<NonClientFrameViewAsh>(non_client_view->frame_view())); - - auto* frame_view_ash = - static_cast<NonClientFrameViewAsh*>(non_client_view->frame_view()); - frame_view_ash->SetCaptionButtonModel(std::move(caption_button_model)); - - if (visibility) { - views::FrameCaptionButton* back_button = - frame_view_ash->GetHeaderView()->GetFrameHeader()->GetBackButton(); - back_button->SetPaintAsActive(widget->IsActive()); - } -} - -} // namespace ash
diff --git a/ash/assistant/assistant_web_view_delegate_impl.h b/ash/assistant/assistant_web_view_delegate_impl.h deleted file mode 100644 index 6ceb5372..0000000 --- a/ash/assistant/assistant_web_view_delegate_impl.h +++ /dev/null
@@ -1,29 +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. - -#ifndef ASH_ASSISTANT_ASSISTANT_WEB_VIEW_DELEGATE_IMPL_H_ -#define ASH_ASSISTANT_ASSISTANT_WEB_VIEW_DELEGATE_IMPL_H_ - -#include "ash/assistant/ui/assistant_web_view_delegate.h" - -namespace ash { - -class AssistantWebViewDelegateImpl : public AssistantWebViewDelegate { - public: - AssistantWebViewDelegateImpl(); - - AssistantWebViewDelegateImpl(const AssistantWebViewDelegateImpl&) = delete; - AssistantWebViewDelegateImpl& operator=(const AssistantWebViewDelegateImpl&) = - delete; - - ~AssistantWebViewDelegateImpl() override; - - // AssistantWebViewDelegate: - void UpdateBackButtonVisibility(views::Widget* widget, - bool visibility) override; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_ASSISTANT_WEB_VIEW_DELEGATE_IMPL_H_
diff --git a/ash/assistant/model/BUILD.gn b/ash/assistant/model/BUILD.gn index cff9ae0..4dd1b60 100644 --- a/ash/assistant/model/BUILD.gn +++ b/ash/assistant/model/BUILD.gn
@@ -32,18 +32,9 @@ "assistant_ui_model.cc", "assistant_ui_model.h", "assistant_ui_model_observer.h", - "ui/assistant_card_element.cc", - "ui/assistant_card_element.h", - "ui/assistant_error_element.cc", - "ui/assistant_error_element.h", - "ui/assistant_text_element.cc", - "ui/assistant_text_element.h", - "ui/assistant_ui_element.cc", - "ui/assistant_ui_element.h", ] deps = [ - "//ash/assistant/ui:constants", "//ash/public/cpp", "//chromeos/ash/services/assistant/public/cpp", "//chromeos/ash/services/assistant/public/mojom",
diff --git a/ash/assistant/model/DEPS b/ash/assistant/model/DEPS index 3bab983..611d56d7 100644 --- a/ash/assistant/model/DEPS +++ b/ash/assistant/model/DEPS
@@ -1,7 +1,5 @@ include_rules = [ "-ash", - "+ash/assistant/ui/assistant_ui_constants.h", - "+ash/assistant/ui/assistant_view_ids.h", "+ash/assistant/model", "+ash/public/cpp", "+ash/public/cpp/app_list",
diff --git a/ash/assistant/model/assistant_response.cc b/ash/assistant/model/assistant_response.cc index 546a52f..cf47ab18 100644 --- a/ash/assistant/model/assistant_response.cc +++ b/ash/assistant/model/assistant_response.cc
@@ -8,8 +8,6 @@ #include <utility> #include "ash/assistant/model/assistant_response_observer.h" -#include "ash/assistant/model/ui/assistant_error_element.h" -#include "ash/assistant/model/ui/assistant_ui_element.h" #include "base/containers/contains.h" #include "base/functional/bind.h" #include "base/memory/raw_ptr.h" @@ -49,31 +47,7 @@ std::move(callback_).Run(/*is_completed=*/false); } - void Process() { - // Responses should only be processed once. - DCHECK_EQ(ProcessingState::kUnprocessed, response_->processing_state()); - response_->set_processing_state(ProcessingState::kProcessing); - - // Completion of |response_| processing is indicated by |processing_count_| - // reaching zero. This value is decremented as each UI element is processed. - processing_count_ = response_->GetUiElements().size(); - - // Try finishing directly if there are no UI elements to be processed. - if (processing_count_ == 0) { - TryFinishing(); - return; - } - - for (const auto& ui_element : response_->GetUiElements()) { - // Start asynchronous processing of the UI element. Note that if the UI - // element does not require any pre-rendering processing the callback may - // be run synchronously. Also we must use WeakPtr here because |this| will - // destroy before |ui_element| by design. - ui_element->Process( - base::BindOnce(&AssistantResponse::Processor::OnFinishedProcessing, - weak_ptr_factory_.GetWeakPtr())); - } - } + void Process() {} private: void OnFinishedProcessing() { @@ -124,46 +98,6 @@ observers_.RemoveObserver(observer); } -void AssistantResponse::AddUiElement( - std::unique_ptr<AssistantUiElement> ui_element) { - // In processing v2, UI elements are first cached in a pending state... - auto pending_ui_element = std::make_unique<PendingUiElement>(); - pending_ui_element->ui_element = std::move(ui_element); - pending_ui_element->is_processing = true; - pending_ui_elements_.push_back(std::move(pending_ui_element)); - - // ...while we perform any pre-processing necessary prior to rendering. - pending_ui_elements_.back()->ui_element->Process(base::BindOnce( - [](const base::WeakPtr<AssistantResponse>& self, - PendingUiElement* pending_ui_element) { - if (!self) - return; - - // Indicate that |pending_ui_element| has finished processing. - pending_ui_element->is_processing = false; - - // Add any UI elements that are ready for rendering to the response. - // Note that this may or may not include the |pending_ui_element| which - // just finished processing as we are required to add renderable UI - // elements to the response in the same order that they were initially - // pended to avoid inadvertently shuffling the response. - while (!self->pending_ui_elements_.empty() && - !self->pending_ui_elements_.front()->is_processing) { - self->ui_elements_.push_back( - std::move(self->pending_ui_elements_.front()->ui_element)); - self->pending_ui_elements_.pop_front(); - self->NotifyUiElementAdded(self->ui_elements_.back().get()); - } - }, - weak_factory_.GetWeakPtr(), - base::Unretained(pending_ui_elements_.back().get()))); -} - -const std::vector<std::unique_ptr<AssistantUiElement>>& -AssistantResponse::GetUiElements() const { - return ui_elements_; -} - void AssistantResponse::AddSuggestions( const std::vector<AssistantSuggestion>& suggestions) { for (const auto& suggestion : suggestions) @@ -204,22 +138,11 @@ bool AssistantResponse::ContainsUiElement( const AssistantUiElement* element) const { - DCHECK(element); - - bool contains_element = base::Contains( - ui_elements_, *element, &std::unique_ptr<AssistantUiElement>::operator*); - - return contains_element || ContainsPendingUiElement(element); + return false; } bool AssistantResponse::ContainsPendingUiElement( const AssistantUiElement* element) const { - DCHECK(element); - - return std::ranges::any_of( - pending_ui_elements_, - [element](const std::unique_ptr<PendingUiElement>& other) { - return *other->ui_element == *element; - }); + return false; } } // namespace ash
diff --git a/ash/assistant/model/assistant_response.h b/ash/assistant/model/assistant_response.h index da851b3e..1449c06 100644 --- a/ash/assistant/model/assistant_response.h +++ b/ash/assistant/model/assistant_response.h
@@ -5,7 +5,6 @@ #ifndef ASH_ASSISTANT_MODEL_ASSISTANT_RESPONSE_H_ #define ASH_ASSISTANT_MODEL_ASSISTANT_RESPONSE_H_ -#include <deque> #include <memory> #include <vector> @@ -56,13 +55,6 @@ void AddObserver(AssistantResponseObserver* observer) const; void RemoveObserver(AssistantResponseObserver* observer) const; - // Adds the specified |ui_element| that should be rendered for the - // interaction. - void AddUiElement(std::unique_ptr<AssistantUiElement> ui_element); - - // Returns all UI elements belonging to the response. - const std::vector<std::unique_ptr<AssistantUiElement>>& GetUiElements() const; - // Adds the specified |suggestions| that should be rendered for the // interaction. void AddSuggestions(const std::vector<AssistantSuggestion>& suggestions); @@ -106,17 +98,10 @@ friend class base::RefCounted<AssistantResponse>; ~AssistantResponse(); - std::deque<std::unique_ptr<PendingUiElement>> pending_ui_elements_; std::vector<AssistantSuggestion> suggestions_; ProcessingState processing_state_ = ProcessingState::kUnprocessed; bool has_tts_ = false; - // We specify the declaration order below as intended because we want - // |processor_| to be destroyed before |ui_elements_| (we also forced this - // order in the destructor), so that when the response processing got - // interrupted, the |ProcessingCallback| can have a chance to return false - // during the destruction to indicate the failure of completion. - std::vector<std::unique_ptr<AssistantUiElement>> ui_elements_; std::unique_ptr<Processor> processor_; mutable base::ObserverList<AssistantResponseObserver> observers_;
diff --git a/ash/assistant/model/assistant_ui_model.h b/ash/assistant/model/assistant_ui_model.h index 3f44c6f7..21073344 100644 --- a/ash/assistant/model/assistant_ui_model.h +++ b/ash/assistant/model/assistant_ui_model.h
@@ -8,7 +8,6 @@ #include <optional> #include <ostream> -#include "ash/assistant/ui/assistant_ui_constants.h" #include "base/component_export.h" #include "base/observer_list.h" #include "chromeos/ash/services/assistant/public/cpp/assistant_service.h" @@ -98,7 +97,7 @@ AssistantVisibility visibility_ = AssistantVisibility::kClosed; AssistantEntryPoint entry_point_ = AssistantEntryPoint::kUnspecified; - int app_list_bubble_width_ = kPreferredWidthDip; + int app_list_bubble_width_ = 0; mutable base::ObserverList<AssistantUiModelObserver> observers_;
diff --git a/ash/assistant/model/ui/assistant_card_element.cc b/ash/assistant/model/ui/assistant_card_element.cc deleted file mode 100644 index 8bf3c0f83..0000000 --- a/ash/assistant/model/ui/assistant_card_element.cc +++ /dev/null
@@ -1,114 +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. - -#include "ash/assistant/model/ui/assistant_card_element.h" - -#include <utility> - -#include "ash/assistant/ui/assistant_ui_constants.h" -#include "ash/assistant/ui/assistant_view_ids.h" -#include "ash/public/cpp/ash_web_view.h" -#include "ash/public/cpp/ash_web_view_factory.h" -#include "base/base64.h" -#include "base/memory/raw_ptr.h" - -namespace ash { - -// AssistantCardElement::Processor --------------------------------------------- - -class AssistantCardElement::Processor : public AshWebView::Observer { - public: - Processor(AssistantCardElement* card_element, ProcessingCallback callback) - : card_element_(card_element), callback_(std::move(callback)) {} - - Processor(const Processor& copy) = delete; - Processor& operator=(const Processor& assign) = delete; - - ~Processor() override { - if (contents_view_) - contents_view_->RemoveObserver(this); - - if (callback_) - std::move(callback_).Run(); - } - - void Process() { - const int width_dip = - card_element_->viewport_width() - 2 * assistant::ui::kHorizontalMargin; - - // Configure parameters for the card. We want to configure the size as: - // - width: It should be width_dip. - // - height: It should be calculated from the content. - AshWebView::InitParams contents_params; - contents_params.enable_auto_resize = true; - contents_params.min_size = gfx::Size(width_dip, 1); - contents_params.max_size = gfx::Size(width_dip, INT_MAX); - contents_params.suppress_navigation = true; - contents_params.fix_zoom_level_to_one = true; - - // Create |contents_view_| and retain ownership until it is added to the - // view hierarchy. If that never happens, it will be still be cleaned up. - contents_view_ = AshWebViewFactory::Get()->Create(contents_params); - contents_view_->SetID(AssistantViewID::kAshWebView); - - // Observe |contents_view_| so that we are notified when loading is - // complete. - contents_view_->AddObserver(this); - - // Encode the html string to be URL-safe. - std::string encoded_html = base::Base64Encode(card_element_->html()); - - // Navigate to the data URL which represents the card. - constexpr char kDataUriPrefix[] = "data:text/html;base64,"; - contents_view_->Navigate(GURL(kDataUriPrefix + encoded_html)); - } - - private: - // AshWebView::Observer: - void DidStopLoading() override { - contents_view_->RemoveObserver(this); - - // Pass ownership of |contents_view_| to the card element that was being - // processed and notify our |callback_| of the completion. - card_element_->set_contents_view(std::move(contents_view_)); - std::move(callback_).Run(); - } - - // |card_element_| should outlive the Processor. - const raw_ptr<AssistantCardElement> card_element_; - ProcessingCallback callback_; - - std::unique_ptr<AshWebView> contents_view_; -}; - -// AssistantCardElement -------------------------------------------------------- - -AssistantCardElement::AssistantCardElement(const std::string& html, - const std::string& fallback, - int viewport_width) - : AssistantUiElement(AssistantUiElementType::kCard), - html_(html), - fallback_(fallback), - viewport_width_(viewport_width) {} - -AssistantCardElement::~AssistantCardElement() { - // |processor_| should be destroyed before |this| has been deleted. - processor_.reset(); -} - -void AssistantCardElement::Process(ProcessingCallback callback) { - processor_ = std::make_unique<Processor>(this, std::move(callback)); - processor_->Process(); -} - -bool AssistantCardElement::has_contents_view() const { - return !!contents_view_; -} - -bool AssistantCardElement::Compare(const AssistantUiElement& other) const { - return other.type() == AssistantUiElementType::kCard && - static_cast<const AssistantCardElement&>(other).html() == html_; -} - -} // namespace ash
diff --git a/ash/assistant/model/ui/assistant_card_element.h b/ash/assistant/model/ui/assistant_card_element.h deleted file mode 100644 index 03e5e5b7..0000000 --- a/ash/assistant/model/ui/assistant_card_element.h +++ /dev/null
@@ -1,62 +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. - -#ifndef ASH_ASSISTANT_MODEL_UI_ASSISTANT_CARD_ELEMENT_H_ -#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_CARD_ELEMENT_H_ - -#include <memory> -#include <string> -#include <utility> - -#include "ash/assistant/model/ui/assistant_ui_element.h" -#include "ash/public/cpp/ash_web_view.h" -#include "base/component_export.h" - -namespace ash { - -// An Assistant UI element that will be rendered as an HTML card. -class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantCardElement - : public AssistantUiElement { - public: - AssistantCardElement(const std::string& html, - const std::string& fallback, - int viewport_width); - - AssistantCardElement(const AssistantCardElement&) = delete; - AssistantCardElement& operator=(const AssistantCardElement&) = delete; - - ~AssistantCardElement() override; - - // AssistantUiElement: - void Process(ProcessingCallback callback) override; - - bool has_contents_view() const; - const std::string& html() const { return html_; } - const std::string& fallback() const { return fallback_; } - int viewport_width() const { return viewport_width_; } - std::unique_ptr<AshWebView> MoveContentsView() { - return std::move(contents_view_); - } - - void set_contents_view(std::unique_ptr<AshWebView> contents_view) { - contents_view_ = std::move(contents_view); - } - - private: - class Processor; - - const std::string html_; - const std::string fallback_; - const int viewport_width_; - std::unique_ptr<AshWebView> contents_view_; - - std::unique_ptr<Processor> processor_; - - // AssistantUiElement: - bool Compare(const AssistantUiElement& other) const override; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_MODEL_UI_ASSISTANT_CARD_ELEMENT_H_
diff --git a/ash/assistant/model/ui/assistant_error_element.cc b/ash/assistant/model/ui/assistant_error_element.cc deleted file mode 100644 index cbf63d4..0000000 --- a/ash/assistant/model/ui/assistant_error_element.cc +++ /dev/null
@@ -1,23 +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. - -#include "ash/assistant/model/ui/assistant_error_element.h" - -#include "ash/assistant/ui/assistant_ui_constants.h" -#include "ui/base/l10n/l10n_util.h" - -namespace ash { - -AssistantErrorElement::AssistantErrorElement(int message_id) - : AssistantUiElement(AssistantUiElementType::kError), - message_id_(message_id) {} - -AssistantErrorElement::~AssistantErrorElement() = default; - -bool AssistantErrorElement::Compare(const AssistantUiElement& other) const { - return other.type() == AssistantUiElementType::kError && - static_cast<const AssistantErrorElement&>(other).message_id() == - message_id_; -} -} // namespace ash
diff --git a/ash/assistant/model/ui/assistant_error_element.h b/ash/assistant/model/ui/assistant_error_element.h deleted file mode 100644 index 6cb88f5..0000000 --- a/ash/assistant/model/ui/assistant_error_element.h +++ /dev/null
@@ -1,35 +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. - -#ifndef ASH_ASSISTANT_MODEL_UI_ASSISTANT_ERROR_ELEMENT_H_ -#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_ERROR_ELEMENT_H_ - -#include "ash/assistant/model/ui/assistant_ui_element.h" -#include "base/component_export.h" - -namespace ash { - -// An Assistant UI error element that will be rendered as text. -class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantErrorElement - : public AssistantUiElement { - public: - explicit AssistantErrorElement(int message_id); - - AssistantErrorElement(const AssistantErrorElement&) = delete; - AssistantErrorElement& operator=(const AssistantErrorElement&) = delete; - - ~AssistantErrorElement() override; - - int message_id() const { return message_id_; } - - private: - const int message_id_; - - // AssistantUiElement: - bool Compare(const AssistantUiElement& other) const override; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_MODEL_UI_ASSISTANT_ERROR_ELEMENT_H_
diff --git a/ash/assistant/model/ui/assistant_text_element.cc b/ash/assistant/model/ui/assistant_text_element.cc deleted file mode 100644 index 9633eee9..0000000 --- a/ash/assistant/model/ui/assistant_text_element.cc +++ /dev/null
@@ -1,21 +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. - -#include "ash/assistant/model/ui/assistant_text_element.h" - -#include "ash/assistant/ui/assistant_ui_constants.h" - -namespace ash { - -AssistantTextElement::AssistantTextElement(const std::string& text) - : AssistantUiElement(AssistantUiElementType::kText), text_(text) {} - -AssistantTextElement::~AssistantTextElement() = default; - -bool AssistantTextElement::Compare(const AssistantUiElement& other) const { - return other.type() == AssistantUiElementType::kText && - static_cast<const AssistantTextElement&>(other).text() == text_; -} - -} // namespace ash
diff --git a/ash/assistant/model/ui/assistant_text_element.h b/ash/assistant/model/ui/assistant_text_element.h deleted file mode 100644 index 6b5e680..0000000 --- a/ash/assistant/model/ui/assistant_text_element.h +++ /dev/null
@@ -1,37 +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. - -#ifndef ASH_ASSISTANT_MODEL_UI_ASSISTANT_TEXT_ELEMENT_H_ -#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_TEXT_ELEMENT_H_ - -#include <string> - -#include "ash/assistant/model/ui/assistant_ui_element.h" -#include "base/component_export.h" - -namespace ash { - -// An Assistant UI element that will be rendered as text. -class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantTextElement - : public AssistantUiElement { - public: - explicit AssistantTextElement(const std::string& text); - - AssistantTextElement(const AssistantTextElement&) = delete; - AssistantTextElement& operator=(const AssistantTextElement&) = delete; - - ~AssistantTextElement() override; - - const std::string& text() const { return text_; } - - private: - const std::string text_; - - // AssistantUiElement: - bool Compare(const AssistantUiElement& other) const override; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_MODEL_UI_ASSISTANT_TEXT_ELEMENT_H_
diff --git a/ash/assistant/model/ui/assistant_ui_element.cc b/ash/assistant/model/ui/assistant_ui_element.cc deleted file mode 100644 index a28e361..0000000 --- a/ash/assistant/model/ui/assistant_ui_element.cc +++ /dev/null
@@ -1,21 +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. - -#include "ash/assistant/model/ui/assistant_ui_element.h" - -#include <utility> - -namespace ash { - -AssistantUiElement::AssistantUiElement(AssistantUiElementType type) - : type_(type) {} - -AssistantUiElement::~AssistantUiElement() = default; - -void AssistantUiElement::Process(ProcessingCallback callback) { - // By default, Assistant UI elements do not require pre-rendering processing. - std::move(callback).Run(); -} - -} // namespace ash
diff --git a/ash/assistant/model/ui/assistant_ui_element.h b/ash/assistant/model/ui/assistant_ui_element.h deleted file mode 100644 index e6f6849..0000000 --- a/ash/assistant/model/ui/assistant_ui_element.h +++ /dev/null
@@ -1,57 +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. - -#ifndef ASH_ASSISTANT_MODEL_UI_ASSISTANT_UI_ELEMENT_H_ -#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_UI_ELEMENT_H_ - -#include "base/component_export.h" -#include "base/functional/callback.h" - -namespace ash { - -// AssistantUiElementType ------------------------------------------------------ - -// Defines possible types of Assistant UI elements. -enum class AssistantUiElementType { - kCard, // See AssistantCardElement. - kError, // See AssistantErrorElement. - kText, // See AssistantTextElement. -}; - -// AssistantUiElement ---------------------------------------------------------- - -// Base class for a UI element that will be rendered inside of Assistant UI. -class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantUiElement { - public: - AssistantUiElement(const AssistantUiElement&) = delete; - AssistantUiElement& operator=(const AssistantUiElement&) = delete; - - virtual ~AssistantUiElement(); - - bool operator==(const AssistantUiElement& other) const { - return this->Compare(other); - } - - AssistantUiElementType type() const { return type_; } - - // Invoke to being processing the UI element for rendering. The specified - // |callback| will be run upon completion. Note that we don't include the - // processing result in the callback, as in |AssistantResponse| we handle - // success/failure cases the same because failures will be skipped in view - // handling. - using ProcessingCallback = base::OnceCallback<void()>; - virtual void Process(ProcessingCallback callback); - - protected: - explicit AssistantUiElement(AssistantUiElementType type); - - private: - const AssistantUiElementType type_; - - virtual bool Compare(const AssistantUiElement& other) const = 0; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_MODEL_UI_ASSISTANT_UI_ELEMENT_H_
diff --git a/ash/assistant/ui/BUILD.gn b/ash/assistant/ui/BUILD.gn deleted file mode 100644 index e05c1a2..0000000 --- a/ash/assistant/ui/BUILD.gn +++ /dev/null
@@ -1,82 +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. - -import("//chromeos/ash/components/assistant/assistant.gni") - -assert(is_chromeos) - -source_set("constants") { - defines = [ "IS_ASSISTANT_UI_CONSTANTS_IMPL" ] - - sources = [ - "assistant_ui_constants.cc", - "assistant_ui_constants.h", - "assistant_view_ids.h", - ] - - deps = [ - "//ash/constants", - "//base", - "//skia", - "//ui/aura", - "//ui/base", - "//ui/gfx", - ] -} - -source_set("ui") { - defines = [ "IS_ASSISTANT_UI_IMPL" ] - - sources = [ - "assistant_view_delegate.h", - "assistant_web_view_delegate.h", - "base/stack_layout.cc", - "base/stack_layout.h", - ] - - deps = [ - "//ash/assistant/model", - "//ash/assistant/ui:constants", - "//ash/assistant/ui/colors:assistant_colors_views", - "//ash/assistant/util", - "//ash/keyboard/ui", - "//ash/public/cpp", - "//ash/resources/vector_icons", - "//ash/strings", - "//ash/style", - "//base", - "//chromeos/ash/components/assistant:buildflags", - "//chromeos/ash/services/assistant/public/cpp", - "//chromeos/ash/services/assistant/public/mojom", - "//chromeos/ash/services/libassistant/public/cpp:structs", - "//chromeos/ui/frame", - "//chromeos/ui/vector_icons", - "//components/feature_engagement/public", - "//components/vector_icons", - "//ui/aura", - "//ui/chromeos/styles:cros_styles_views", - "//ui/compositor", - "//ui/gfx", - "//ui/views", - "//ui/views/window/vector_icons", - "//ui/wm", - ] - - if (enable_cros_libassistant) { - sources += [ - "logo_view/logo_view_impl.cc", - "logo_view/logo_view_impl.h", - "logo_view/shape/mic_part_shape.cc", - "logo_view/shape/mic_part_shape.h", - "logo_view/shape/shape.cc", - "logo_view/shape/shape.h", - ] - - deps += [ "//chromeos/assistant/internal/logo_view" ] - } - - # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and - # enable the diagnostic by removing this line. - configs += [ "//build/config/compiler:no_exit_time_destructors" ] -}
diff --git a/ash/assistant/ui/DEPS b/ash/assistant/ui/DEPS deleted file mode 100644 index 7d9aaae..0000000 --- a/ash/assistant/ui/DEPS +++ /dev/null
@@ -1,85 +0,0 @@ -noparent = True - -include_rules = [ - "+ash/app_list/views/app_list_toast_view.h", - "+ash/assistant/model", - "+ash/assistant/ui", - "+ash/assistant/util", - "+ash/constants", - "+ash/keyboard/ui", - "+ash/public", - "+ash/resources/vector_icons", - "+ash/strings", - "+ash/style", - "+base", - "+build/buildflag.h", - "+cc/base", - "+cc/paint", - "+chromeos/ash/components/assistant", - "+chromeos/ash/services/assistant/public/cpp", - "+chromeos/ash/services/libassistant/public/cpp", - "+chromeos/constants", - "+chromeos/ui/frame", - "+components/feature_engagement/public/feature_constants.h", - "+mojo/public/cpp", - "+net/base", - "+third_party/skia/include/core", - "+ui", - "+url/gurl.h", - - # Abseil is allowed by default, but some features are banned. See - # //styleguide/c++/c++-features.md. - # Please keep this section in sync with //DEPS. - '+third_party/abseil-cpp', - '-third_party/abseil-cpp/absl/algorithm/container.h', - '-third_party/abseil-cpp/absl/base/attributes.h', - '-third_party/abseil-cpp/absl/base/nullability.h', - '-third_party/abseil-cpp/absl/container/btree_map.h', - '-third_party/abseil-cpp/absl/container/btree_set.h', - '-third_party/abseil-cpp/absl/flags', - '-third_party/abseil-cpp/absl/functional/any_invocable.h', - '-third_party/abseil-cpp/absl/functional/bind_front.h', - '-third_party/abseil-cpp/absl/functional/function_ref.h', - '-third_party/abseil-cpp/absl/hash', - '-third_party/abseil-cpp/absl/log', - '-third_party/abseil-cpp/absl/random', - '-third_party/abseil-cpp/absl/status/statusor.h', - '-third_party/abseil-cpp/absl/strings', - '+third_party/abseil-cpp/absl/strings/ascii.h', - '+third_party/abseil-cpp/absl/strings/cord.h', - '+third_party/abseil-cpp/absl/strings/str_format.h', - '-third_party/abseil-cpp/absl/synchronization', - '-third_party/abseil-cpp/absl/time', - '-third_party/abseil-cpp/absl/types/any.h', - '-third_party/abseil-cpp/absl/types/optional.h', - '-third_party/abseil-cpp/absl/types/span.h', - '-third_party/abseil-cpp/absl/types/variant.h', - '-third_party/abseil-cpp/absl/utility/utility.h', -] - -specific_include_rules = { - ".*_unittest\.cc": [ - "+ash/app_list/test/app_list_test_helper.h", - "+ash/app_list/views/search_box_view.h", - "+ash/assistant/assistant_controller_impl.h", - "+ash/assistant/assistant_interaction_controller_impl.h", - "+ash/assistant/assistant_ui_controller.h", - "+ash/assistant/assistant_web_ui_controller.h", - "+ash/assistant/test/assistant_ash_test_base.h", - "+ash/frame/non_client_frame_view_ash.h", - "+ash/session/session_controller_impl.h", - "+ash/shell.h", - "+ash/test/ash_test_base.h", - "+ash/test/ash_test_views_delegate.h", - "+base/test/scoped_feature_list.h", - "+cc/test/pixel_comparator.h", - "+chromeos/ash/services/assistant/test_support/mock_assistant.h", - "+chromeos/ui/frame/default_frame_header.h", - "+chromeos/ui/vector_icons/vector_icons.h", - "+components/feature_engagement/test/scoped_iph_feature_list.h", - "+components/prefs", - "+components/vector_icons", - "+testing/gmock", - "+testing/gtest", - ], -}
diff --git a/ash/assistant/ui/assistant_ui_constants.cc b/ash/assistant/ui/assistant_ui_constants.cc deleted file mode 100644 index 5c7c3fa7..0000000 --- a/ash/assistant/ui/assistant_ui_constants.cc +++ /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. - -#include "ash/assistant/ui/assistant_ui_constants.h" - -#include "ash/constants/ash_features.h" -#include "base/no_destructor.h" -#include "ui/base/class_property.h" -#include "ui/gfx/font_list.h" - -namespace ash { -namespace assistant { -namespace ui { - -DEFINE_UI_CLASS_PROPERTY_KEY(bool, kOnlyAllowMouseClickEvents, false) - -const gfx::FontList& GetDefaultFontList() { - static const base::NoDestructor<gfx::FontList> font_list("Google Sans, 12px"); - return *font_list; -} - -} // namespace ui -} // namespace assistant -} // namespace ash
diff --git a/ash/assistant/ui/assistant_view_ids.h b/ash/assistant/ui/assistant_view_ids.h deleted file mode 100644 index 4495b7f..0000000 --- a/ash/assistant/ui/assistant_view_ids.h +++ /dev/null
@@ -1,61 +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. - -#ifndef ASH_ASSISTANT_UI_ASSISTANT_VIEW_IDS_H_ -#define ASH_ASSISTANT_UI_ASSISTANT_VIEW_IDS_H_ - -namespace ash { - -// IDs used for the main views that compose the Assistant UI. -// Use these for easy access to the views during the unittests. -// Note that these IDs are only guaranteed to be unique inside -// |AssistantPageView|. -enum AssistantViewID { - // We start at 1 because 0 is not a valid view ID. - kMainView = 1, - - // Dialog plate and its components. - kDialogPlate, - kKeyboardInputToggle, - kMicView, - kModuleIcon, - kTextQueryField, - kVoiceInputToggle, - - // Main stage and its components. - kMainStage, - kFooterView, - kGreetingLabel, - kLearnMoreToast, - kLauncherSearchIph, - kOptInView, - kProgressIndicator, - kQueryView, - kSuggestionContainer, - kUiElementContainer, - kZeroStateView, - kOnboardingView, - kHorizontalSeparator, - - // UIs in OptInView - kOptInViewStyledLabel, - - // UIs in QueryView - kHighConfidenceLabel, - kLowConfidenceLabel, - - // UIs in UiElementContainer - kOverflowIndicator, - kAshWebView, - - // UIs in AssistantOnboardingSuggestionView - kAssistantOnboardingSuggestionViewLabel, - - // UIs in SuggestionChipView - kSuggestionChipViewLabel -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_UI_ASSISTANT_VIEW_IDS_H_
diff --git a/ash/assistant/ui/assistant_web_view_delegate.h b/ash/assistant/ui/assistant_web_view_delegate.h deleted file mode 100644 index 02bd253..0000000 --- a/ash/assistant/ui/assistant_web_view_delegate.h +++ /dev/null
@@ -1,28 +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. - -#ifndef ASH_ASSISTANT_UI_ASSISTANT_WEB_VIEW_DELEGATE_H_ -#define ASH_ASSISTANT_UI_ASSISTANT_WEB_VIEW_DELEGATE_H_ - -#include "base/component_export.h" - -namespace views { -class Widget; -} // namespace views - -namespace ash { - -// A delegate of web container views in assistant/ui. -class COMPONENT_EXPORT(ASSISTANT_UI) AssistantWebViewDelegate { - public: - virtual ~AssistantWebViewDelegate() = default; - - // Updates the visibility of the back button in Assistant web container. - virtual void UpdateBackButtonVisibility(views::Widget* widget, - bool visibility) = 0; -}; - -} // namespace ash - -#endif // ASH_ASSISTANT_UI_ASSISTANT_WEB_VIEW_DELEGATE_H_
diff --git a/ash/assistant/ui/colors/BUILD.gn b/ash/assistant/ui/colors/BUILD.gn deleted file mode 100644 index 3fc8136..0000000 --- a/ash/assistant/ui/colors/BUILD.gn +++ /dev/null
@@ -1,16 +0,0 @@ -# Copyright 2021 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//tools/style_variable_generator/style_variable_generator.gni") - -assert(is_chromeos) - -style_variable_generator("assistant_colors") { - sources = [ - "//ui/chromeos/styles/cros_palette.json5", - "assistant_colors.json5", - ] - - cpp_namespace = "assistant_colors" -}
diff --git a/ash/assistant/ui/colors/assistant_colors.json5 b/ash/assistant/ui/colors/assistant_colors.json5 deleted file mode 100644 index 7127713..0000000 --- a/ash/assistant/ui/colors/assistant_colors.json5 +++ /dev/null
@@ -1,29 +0,0 @@ -/* Copyright 2021 The Chromium Authors - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. */ - -/* - * Color palette for Assistant UIs. - */ -{ - options: { - // Define options for proto. We are not using it for now. But we define them - // as CQ builds it. - proto: { - field_name: "assistant_colors", - // Use 2 as a field id since cros_palette.json5 takes 1. - field_id: 2, - } - }, - colors: { - bg_assistant_plate: { - // Those colors are customized colors, i.e. not in cros_palette.json5. - light: "#ecefee", - dark: "#1c2b3b", - }, - }, - opacities: { - // This is necessary to avoid C++ compile error. - fake_opacity: 0.0, - } -}
diff --git a/ash/assistant/util/assistant_util.cc b/ash/assistant/util/assistant_util.cc index 81203395..03570da 100644 --- a/ash/assistant/util/assistant_util.cc +++ b/ash/assistant/util/assistant_util.cc
@@ -6,7 +6,6 @@ #include <string> -#include "ash/assistant/model/assistant_ui_model.h" #include "ash/constants/devicetype.h" #include "base/strings/string_util.h" @@ -22,30 +21,15 @@ bool IsStartingSession(AssistantVisibility new_visibility, AssistantVisibility old_visibility) { - return old_visibility == AssistantVisibility::kClosed && - new_visibility == AssistantVisibility::kVisible; + return false; } bool IsFinishingSession(AssistantVisibility new_visibility) { - return new_visibility == AssistantVisibility::kClosed; + return false; } bool IsVoiceEntryPoint(AssistantEntryPoint entry_point, bool prefer_voice) { - switch (entry_point) { - case AssistantEntryPoint::kHotword: - return true; - case AssistantEntryPoint::kHotkey: - case AssistantEntryPoint::kLauncherSearchBoxIcon: - case AssistantEntryPoint::kLongPressLauncher: - return prefer_voice; - case AssistantEntryPoint::kUnspecified: - case AssistantEntryPoint::kDeepLink: - case AssistantEntryPoint::kLauncherSearchResult: - case AssistantEntryPoint::kSetup: - case AssistantEntryPoint::kStylus: - case AssistantEntryPoint::kLauncherSearchIphChip: - return false; - } + return false; } bool IsGoogleDevice() {
diff --git a/ash/clipboard/clipboard_history_util.cc b/ash/clipboard/clipboard_history_util.cc index 6d6a617b..8db54ae 100644 --- a/ash/clipboard/clipboard_history_util.cc +++ b/ash/clipboard/clipboard_history_util.cc
@@ -192,17 +192,8 @@ switch (Shell::Get()->keyboard_capability()->GetMetaKeyToDisplay()) { case ui::mojom::MetaKey::kSearch: return kClipboardSearchIcon; - case ui::mojom::MetaKey::kLauncher: { - const auto* const assistant_state = AssistantState::Get(); - const bool is_assistant_available = - assistant_state && - assistant_state->allowed_state() == - assistant::AssistantAllowedState::ALLOWED && - assistant_state->settings_enabled().value_or(false); - - return is_assistant_available ? kClipboardLauncherIcon - : kClipboardLauncherNoAssistantIcon; - } + case ui::mojom::MetaKey::kLauncher: + return kClipboardLauncherNoAssistantIcon; case ui::mojom::MetaKey::kLauncherRefresh: return kCampbellHeroIcon; case ui::mojom::MetaKey::kExternalMeta:
diff --git a/ash/clipboard/clipboard_history_util.h b/ash/clipboard/clipboard_history_util.h index 9b5438c..3b759f7 100644 --- a/ash/clipboard/clipboard_history_util.h +++ b/ash/clipboard/clipboard_history_util.h
@@ -149,7 +149,7 @@ ASH_EXPORT std::u16string GetFileSystemSources(const ui::ClipboardData& data); // Returns the icon representation of the shortcut modifier key based on -// keyboard layout and whether the Assistant feature is enabled. +// keyboard layout. ASH_EXPORT const gfx::VectorIcon& GetShortcutKeyIcon(); // Returns the name of the shortcut modifier key based on keyboard layout.
diff --git a/ash/curtain/remote_maintenance_curtain_view.cc b/ash/curtain/remote_maintenance_curtain_view.cc index 8b793e8..fbd1ea9 100644 --- a/ash/curtain/remote_maintenance_curtain_view.cc +++ b/ash/curtain/remote_maintenance_curtain_view.cc
@@ -6,7 +6,7 @@ #include <memory> -#include "ash/assistant/ui/base/stack_layout.h" +#include "ash/curtain/stack_layout.h" #include "ash/public/cpp/ash_web_view.h" #include "ash/public/cpp/ash_web_view_factory.h" #include "ash/public/cpp/oobe_dialog_util.h"
diff --git a/ash/assistant/ui/base/stack_layout.cc b/ash/curtain/stack_layout.cc similarity index 95% rename from ash/assistant/ui/base/stack_layout.cc rename to ash/curtain/stack_layout.cc index 5c73f741..4c1ea37f 100644 --- a/ash/assistant/ui/base/stack_layout.cc +++ b/ash/curtain/stack_layout.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/assistant/ui/base/stack_layout.h" +#include "ash/curtain/stack_layout.h" #include <algorithm> #include <numeric> @@ -43,8 +43,9 @@ int StackLayout::GetPreferredHeightForWidth(const views::View* host, int width) const { const auto& children = host->children(); - if (children.empty()) + if (children.empty()) { return 0; + } std::vector<int> heights(children.size()); std::ranges::transform( children, heights.begin(), @@ -80,15 +81,17 @@ child_x = (host_width - child_width) / 2; } - if (dimension & static_cast<uint32_t>(RespectDimension::kHeight)) + if (dimension & static_cast<uint32_t>(RespectDimension::kHeight)) { child_height = child->GetHeightForWidth(child_width); + } int child_y = 0; auto iter = vertical_alignment_map_.find(child); if (iter != vertical_alignment_map_.end()) { VerticalAlignment vertical_alignment = iter->second; - if (vertical_alignment == VerticalAlignment::kCenter) + if (vertical_alignment == VerticalAlignment::kCenter) { child_y = std::max(0, (host_height - child_height) / 2); + } } layouts.child_layouts.emplace_back(
diff --git a/ash/assistant/ui/base/stack_layout.h b/ash/curtain/stack_layout.h similarity index 89% rename from ash/assistant/ui/base/stack_layout.h rename to ash/curtain/stack_layout.h index 3647161..acf4f07 100644 --- a/ash/assistant/ui/base/stack_layout.h +++ b/ash/curtain/stack_layout.h
@@ -2,12 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_ASSISTANT_UI_BASE_STACK_LAYOUT_H_ -#define ASH_ASSISTANT_UI_BASE_STACK_LAYOUT_H_ +#ifndef ASH_CURTAIN_STACK_LAYOUT_H_ +#define ASH_CURTAIN_STACK_LAYOUT_H_ #include <map> -#include "base/component_export.h" #include "base/memory/raw_ptr.h" #include "ui/views/layout/layout_manager_base.h" #include "ui/views/layout/proposed_layout.h" @@ -18,8 +17,7 @@ // FillLayout in that we respect the preferred size of views during layout. It's // possible to explicitly specify which dimension to respect. In contrast, // FillLayout will cause its views to match the bounds of the host. -class COMPONENT_EXPORT(ASSISTANT_UI) StackLayout - : public views::LayoutManagerBase { +class StackLayout : public views::LayoutManagerBase { public: enum class RespectDimension : uint32_t { // Respect width. If enabled, child's preferred width will be used and will @@ -70,4 +68,4 @@ } // namespace ash -#endif // ASH_ASSISTANT_UI_BASE_STACK_LAYOUT_H_ +#endif // ASH_CURTAIN_STACK_LAYOUT_H_
diff --git a/ash/public/cpp/assistant/assistant_state_base.cc b/ash/public/cpp/assistant/assistant_state_base.cc index 4a016d7..6b8eaf8 100644 --- a/ash/public/cpp/assistant/assistant_state_base.cc +++ b/ash/public/cpp/assistant/assistant_state_base.cc
@@ -22,10 +22,7 @@ AssistantStateBase::AssistantStateBase() = default; -AssistantStateBase::~AssistantStateBase() { - for (auto& observer : observers_) - observer.OnAssistantStateDestroyed(); -} +AssistantStateBase::~AssistantStateBase() = default; std::string AssistantStateBase::ToString() const { #define STRINGIFY(field) \ @@ -39,15 +36,6 @@ #undef STRINGIFY } -void AssistantStateBase::AddObserver(AssistantStateObserver* observer) { - observers_.AddObserver(observer); - InitializeObserver(observer); -} - -void AssistantStateBase::RemoveObserver(AssistantStateObserver* observer) { - observers_.RemoveObserver(observer); -} - void AssistantStateBase::RegisterPrefChanges(PrefService* pref_service) {} bool AssistantStateBase::IsScreenContextAllowed() const { @@ -101,8 +89,6 @@ return; } consent_status_ = consent_status; - for (auto& observer : observers_) - observer.OnAssistantConsentStatusChanged(consent_status_.value()); } void AssistantStateBase::UpdateContextEnabled() { @@ -113,8 +99,6 @@ return; } context_enabled_ = context_enabled; - for (auto& observer : observers_) - observer.OnAssistantContextEnabled(context_enabled_.value()); } void AssistantStateBase::UpdateSettingsEnabled() { @@ -125,8 +109,6 @@ return; } settings_enabled_ = settings_enabled; - for (auto& observer : observers_) - observer.OnAssistantSettingsEnabled(settings_enabled_.value()); } void AssistantStateBase::UpdateHotwordAlwaysOn() { @@ -137,8 +119,6 @@ return; } hotword_always_on_ = hotword_always_on; - for (auto& observer : observers_) - observer.OnAssistantHotwordAlwaysOn(hotword_always_on_.value()); } void AssistantStateBase::UpdateHotwordEnabled() { @@ -149,8 +129,6 @@ return; } hotword_enabled_ = hotword_enabled; - for (auto& observer : observers_) - observer.OnAssistantHotwordEnabled(hotword_enabled_.value()); } void AssistantStateBase::UpdateLaunchWithMicOpen() { @@ -161,8 +139,6 @@ return; } launch_with_mic_open_ = launch_with_mic_open; - for (auto& observer : observers_) - observer.OnAssistantLaunchWithMicOpen(launch_with_mic_open_.value()); } void AssistantStateBase::UpdateNotificationEnabled() { @@ -173,8 +149,6 @@ return; } notification_enabled_ = notification_enabled; - for (auto& observer : observers_) - observer.OnAssistantNotificationEnabled(notification_enabled_.value()); } void AssistantStateBase::UpdateOnboardingMode() { @@ -186,42 +160,28 @@ return; onboarding_mode_ = onboarding_mode; - for (auto& observer : observers_) - observer.OnAssistantOnboardingModeChanged(onboarding_mode_.value()); } void AssistantStateBase::UpdateAssistantStatus( assistant::AssistantStatus status) { assistant_status_ = status; - for (auto& observer : observers_) - observer.OnAssistantStatusChanged(assistant_status_); } void AssistantStateBase::UpdateFeatureAllowedState( assistant::AssistantAllowedState state) { allowed_state_ = state; - for (auto& observer : observers_) - observer.OnAssistantFeatureAllowedChanged(allowed_state_.value()); } void AssistantStateBase::UpdateLocale(const std::string& locale) { locale_ = locale; - for (auto& observer : observers_) - observer.OnLocaleChanged(locale_.value()); } void AssistantStateBase::UpdateArcPlayStoreEnabled(bool enabled) { arc_play_store_enabled_ = enabled; - for (auto& observer : observers_) - observer.OnArcPlayStoreEnabledChanged(arc_play_store_enabled_.value()); } void AssistantStateBase::UpdateLockedFullScreenState(bool enabled) { locked_full_screen_enabled_ = enabled; - for (auto& observer : observers_) { - observer.OnLockedFullScreenStateChanged( - locked_full_screen_enabled_.value()); - } } } // namespace ash
diff --git a/ash/public/cpp/assistant/assistant_state_base.h b/ash/public/cpp/assistant/assistant_state_base.h index 67f975c..e5baea9 100644 --- a/ash/public/cpp/assistant/assistant_state_base.h +++ b/ash/public/cpp/assistant/assistant_state_base.h
@@ -10,7 +10,6 @@ #include <string> #include "ash/public/cpp/ash_public_export.h" -#include "base/observer_list.h" #include "base/observer_list_types.h" #include "chromeos/ash/services/assistant/public/cpp/assistant_enums.h" #include "chromeos/ash/services/assistant/public/cpp/assistant_prefs.h" @@ -113,9 +112,6 @@ std::string ToString() const; - void AddObserver(AssistantStateObserver* observer); - void RemoveObserver(AssistantStateObserver* observer); - void RegisterPrefChanges(PrefService* pref_service); bool IsScreenContextAllowed() const; @@ -188,8 +184,6 @@ // Observes user profile prefs for the Assistant. std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_; - - base::ObserverList<AssistantStateObserver> observers_; }; } // namespace ash
diff --git a/ash/public/cpp/assistant/controller/assistant_controller.h b/ash/public/cpp/assistant/controller/assistant_controller.h index 210238a..8a14a06 100644 --- a/ash/public/cpp/assistant/controller/assistant_controller.h +++ b/ash/public/cpp/assistant/controller/assistant_controller.h
@@ -15,18 +15,12 @@ namespace ash { -class AssistantControllerObserver; - // The interface for the Assistant controller. class ASH_PUBLIC_EXPORT AssistantController { public: // Returns the singleton instance owned by Shell. static AssistantController* Get(); - // Adds/removes the specified |observer|. - virtual void AddObserver(AssistantControllerObserver* observer) = 0; - virtual void RemoveObserver(AssistantControllerObserver* observer) = 0; - // Opens Google Assistant settings. virtual void OpenAssistantSettings() = 0;
diff --git a/ash/public/cpp/assistant/test_support/BUILD.gn b/ash/public/cpp/assistant/test_support/BUILD.gn deleted file mode 100644 index 8680ba04..0000000 --- a/ash/public/cpp/assistant/test_support/BUILD.gn +++ /dev/null
@@ -1,22 +0,0 @@ -# Copyright 2021 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -assert(is_chromeos) - -static_library("test_support") { - testonly = true - - sources = [ - "mock_assistant_controller.cc", - "mock_assistant_controller.h", - "mock_assistant_state.cc", - "mock_assistant_state.h", - ] - - deps = [ - "//ash/public/cpp", - "//testing/gmock", - "//url", - ] -}
diff --git a/ash/public/cpp/assistant/test_support/mock_assistant_controller.cc b/ash/public/cpp/assistant/test_support/mock_assistant_controller.cc deleted file mode 100644 index 3f5a84f..0000000 --- a/ash/public/cpp/assistant/test_support/mock_assistant_controller.cc +++ /dev/null
@@ -1,13 +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. - -#include "ash/public/cpp/assistant/test_support/mock_assistant_controller.h" - -namespace ash { - -MockAssistantController::MockAssistantController() = default; - -MockAssistantController::~MockAssistantController() = default; - -} // namespace ash
diff --git a/ash/public/cpp/assistant/test_support/mock_assistant_controller.h b/ash/public/cpp/assistant/test_support/mock_assistant_controller.h deleted file mode 100644 index c40a190a..0000000 --- a/ash/public/cpp/assistant/test_support/mock_assistant_controller.h +++ /dev/null
@@ -1,53 +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. - -#ifndef ASH_PUBLIC_CPP_ASSISTANT_TEST_SUPPORT_MOCK_ASSISTANT_CONTROLLER_H_ -#define ASH_PUBLIC_CPP_ASSISTANT_TEST_SUPPORT_MOCK_ASSISTANT_CONTROLLER_H_ - -#include <string> - -#include "ash/public/cpp/assistant/controller/assistant_controller.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "url/gurl.h" - -namespace ash { - -class MockAssistantController : public AssistantController { - public: - MockAssistantController(); - MockAssistantController(const MockAssistantController&) = delete; - MockAssistantController& operator=(const MockAssistantController&) = delete; - ~MockAssistantController() override; - - MOCK_METHOD(void, AddObserver, (AssistantControllerObserver*), (override)); - - MOCK_METHOD(void, RemoveObserver, (AssistantControllerObserver*), (override)); - - MOCK_METHOD(void, - OpenUrl, - (const GURL& url, bool in_background, bool from_server), - (override)); - - MOCK_METHOD(void, OpenAssistantSettings, (), (override)); - - MOCK_METHOD(base::WeakPtr<AssistantController>, GetWeakPtr, (), (override)); - - MOCK_METHOD(void, - SetAssistant, - (assistant::Assistant * assistant), - (override)); - - MOCK_METHOD(void, StartSpeakerIdEnrollmentFlow, (), (override)); - - MOCK_METHOD(void, - SendAssistantFeedback, - (bool pii_allowed, - const std::string& feedback_description, - const std::string& screenshot_png), - (override)); -}; - -} // namespace ash - -#endif // ASH_PUBLIC_CPP_ASSISTANT_TEST_SUPPORT_MOCK_ASSISTANT_CONTROLLER_H_
diff --git a/ash/public/cpp/assistant/test_support/mock_assistant_state.cc b/ash/public/cpp/assistant/test_support/mock_assistant_state.cc deleted file mode 100644 index f5dc163..0000000 --- a/ash/public/cpp/assistant/test_support/mock_assistant_state.cc +++ /dev/null
@@ -1,33 +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. - -#include "ash/public/cpp/assistant/test_support/mock_assistant_state.h" - -namespace ash { - -MockAssistantState::MockAssistantState() { - allowed_state_ = assistant::AssistantAllowedState::ALLOWED; - settings_enabled_ = true; -} - -MockAssistantState::~MockAssistantState() = default; - -void MockAssistantState::SetAllowedState( - assistant::AssistantAllowedState allowed_state) { - if (allowed_state_ != allowed_state) { - allowed_state_ = allowed_state; - for (auto& observer : observers_) - observer.OnAssistantFeatureAllowedChanged(allowed_state_.value()); - } -} - -void MockAssistantState::SetSettingsEnabled(bool enabled) { - if (settings_enabled_ != enabled) { - settings_enabled_ = enabled; - for (auto& observer : observers_) - observer.OnAssistantSettingsEnabled(settings_enabled_.value()); - } -} - -} // namespace ash
diff --git a/ash/public/cpp/assistant/test_support/mock_assistant_state.h b/ash/public/cpp/assistant/test_support/mock_assistant_state.h deleted file mode 100644 index b1aa99c..0000000 --- a/ash/public/cpp/assistant/test_support/mock_assistant_state.h +++ /dev/null
@@ -1,26 +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. - -#ifndef ASH_PUBLIC_CPP_ASSISTANT_TEST_SUPPORT_MOCK_ASSISTANT_STATE_H_ -#define ASH_PUBLIC_CPP_ASSISTANT_TEST_SUPPORT_MOCK_ASSISTANT_STATE_H_ - -#include "ash/public/cpp/assistant/assistant_state.h" - -namespace ash { - -class MockAssistantState : public ash::AssistantState { - public: - MockAssistantState(); - MockAssistantState(const MockAssistantState&) = delete; - MockAssistantState& operator=(const MockAssistantState&) = delete; - ~MockAssistantState() override; - - void SetAllowedState(assistant::AssistantAllowedState allowed_state); - - void SetSettingsEnabled(bool enabled); -}; - -} // namespace ash - -#endif // ASH_PUBLIC_CPP_ASSISTANT_TEST_SUPPORT_MOCK_ASSISTANT_STATE_H_
diff --git a/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc b/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc index 2dc8ed08..c0e3927 100644 --- a/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc +++ b/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc
@@ -60,8 +60,8 @@ })"); std::unique_ptr<HttpFetcher> CreateHttpFetcher() { - return std::make_unique<OAuthHttpFetcher>( - kTrafficAnnotation, GaiaConstants::kNearbyDevicesOAuth2Scope); + return std::make_unique<OAuthHttpFetcher>(kTrafficAnnotation, + signin::OAuthConsumerId::kFastPair); } GURL GetUserDevicesUrl() {
diff --git a/ash/quick_pair/repository/oauth_http_fetcher.cc b/ash/quick_pair/repository/oauth_http_fetcher.cc index fd9c86b..a71c379 100644 --- a/ash/quick_pair/repository/oauth_http_fetcher.cc +++ b/ash/quick_pair/repository/oauth_http_fetcher.cc
@@ -23,10 +23,9 @@ OAuthHttpFetcher::OAuthHttpFetcher( const net::PartialNetworkTrafficAnnotationTag& traffic_annotation, - const std::string& oauth_scope) - : traffic_annotation_(traffic_annotation) { - oauth_scopes_.insert(oauth_scope); -} + signin::OAuthConsumerId oauth_consumer_id) + : traffic_annotation_(traffic_annotation), + oauth_consumer_id_(oauth_consumer_id) {} OAuthHttpFetcher::~OAuthHttpFetcher() = default; @@ -68,7 +67,7 @@ callback_ = std::move(callback); access_token_fetcher_ = std::make_unique<signin::PrimaryAccountAccessTokenFetcher>( - "fastpair_client", identity_manager, oauth_scopes_, + oauth_consumer_id_, identity_manager, base::BindOnce(&OAuthHttpFetcher::OnAccessTokenFetched, weak_ptr_factory_.GetWeakPtr()), signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate,
diff --git a/ash/quick_pair/repository/oauth_http_fetcher.h b/ash/quick_pair/repository/oauth_http_fetcher.h index c9c22fb..4460cdad 100644 --- a/ash/quick_pair/repository/oauth_http_fetcher.h +++ b/ash/quick_pair/repository/oauth_http_fetcher.h
@@ -10,6 +10,7 @@ #include "base/gtest_prod_util.h" #include "base/memory/weak_ptr.h" #include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/oauth_consumer_ids.h" #include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/oauth2_access_token_manager.h" #include "google_apis/gaia/oauth2_api_call_flow.h" @@ -28,7 +29,7 @@ public: explicit OAuthHttpFetcher( const net::PartialNetworkTrafficAnnotationTag& traffic_annotation, - const std::string& oauth_scope); + signin::OAuthConsumerId oauth_consumer_id); OAuthHttpFetcher(const OAuthHttpFetcher&) = delete; OAuthHttpFetcher& operator=(const OAuthHttpFetcher&) = delete; ~OAuthHttpFetcher() override; @@ -69,7 +70,7 @@ signin::AccessTokenInfo access_token_info); net::PartialNetworkTrafficAnnotationTag traffic_annotation_; - OAuth2AccessTokenManager::ScopeSet oauth_scopes_; + signin::OAuthConsumerId oauth_consumer_id_; bool has_call_started_ = false; GURL url_;
diff --git a/ash/quick_pair/repository/oauth_http_fetcher_unittest.cc b/ash/quick_pair/repository/oauth_http_fetcher_unittest.cc index 3f7d504..9a199e42 100644 --- a/ash/quick_pair/repository/oauth_http_fetcher_unittest.cc +++ b/ash/quick_pair/repository/oauth_http_fetcher_unittest.cc
@@ -20,7 +20,6 @@ constexpr char kBody[] = "body"; constexpr char kTestUrl[] = "http://www.test.com/"; -constexpr char kTestScope[] = "http://www.test.com/scope"; const net::PartialNetworkTrafficAnnotationTag kTrafficAnnotation = net::DefinePartialNetworkTrafficAnnotation("test_request", "oauth2_api_call_flow", @@ -53,8 +52,8 @@ } void SetUp() override { - http_fetcher_ = - std::make_unique<OAuthHttpFetcher>(kTrafficAnnotation, kTestScope); + http_fetcher_ = std::make_unique<OAuthHttpFetcher>( + kTrafficAnnotation, signin::OAuthConsumerId::kFastPair); browser_delegate_ = std::make_unique<MockQuickPairBrowserDelegate>(); ON_CALL(*browser_delegate_, GetURLLoaderFactory()) .WillByDefault(
diff --git a/ash/resources/vector_icons/BUILD.gn b/ash/resources/vector_icons/BUILD.gn index 14c17a2..4ccf8cc 100644 --- a/ash/resources/vector_icons/BUILD.gn +++ b/ash/resources/vector_icons/BUILD.gn
@@ -73,7 +73,6 @@ "capture_mode_copied_to_clipboard.icon", "capture_mode_demo_tools_assistant.icon", "capture_mode_demo_tools_launcher_assistant_off.icon", - "capture_mode_demo_tools_launcher_assistant_on.icon", "capture_mode_demo_tools_menu.icon", "capture_mode_demo_tools_search.icon", "capture_mode_demo_tools_settings_menu_entry_point.icon",
diff --git a/ash/resources/vector_icons/capture_mode_demo_tools_launcher_assistant_on.icon b/ash/resources/vector_icons/capture_mode_demo_tools_launcher_assistant_on.icon deleted file mode 100644 index 78c4108..0000000 --- a/ash/resources/vector_icons/capture_mode_demo_tools_launcher_assistant_on.icon +++ /dev/null
@@ -1,24 +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. - -CANVAS_DIMENSIONS, 20, -MOVE_TO, 10, 2, -CUBIC_TO, 5.58, 2, 2, 5.58, 2, 10, -CUBIC_TO, 2, 14.42, 5.58, 18, 10, 18, -CUBIC_TO, 14.42, 18, 18, 14.42, 18, 10, -CUBIC_TO, 18, 5.58, 14.42, 2, 10, 2, -CLOSE, -MOVE_TO, 10, 16, -CUBIC_TO, 6.69, 16, 4, 13.31, 4, 10, -CUBIC_TO, 4, 6.69, 6.69, 4, 10, 4, -CUBIC_TO, 13.31, 4, 16, 6.69, 16, 10, -CUBIC_TO, 16, 13.31, 13.31, 16, 10, 16, -CLOSE, -NEW_PATH, -MOVE_TO, 10, 15, -CUBIC_TO, 12.76, 15, 15, 12.76, 15, 10, -CUBIC_TO, 15, 7.24, 12.76, 5, 10, 5, -CUBIC_TO, 7.24, 5, 5, 7.24, 5, 10, -CUBIC_TO, 5, 12.76, 7.24, 15, 10, 15, -CLOSE
diff --git a/ash/shelf/home_button.cc b/ash/shelf/home_button.cc index 25203c67..d522803b 100644 --- a/ash/shelf/home_button.cc +++ b/ash/shelf/home_button.cc
@@ -73,7 +73,6 @@ // The space between the home button and quick app. constexpr int kQuickAppStartMargin = 8; -constexpr uint8_t kAssistantVisibleAlpha = 255; // 100% alpha constexpr uint8_t kAssistantInvisibleAlpha = 138; // 54% alpha // Nudge animation constants @@ -173,10 +172,7 @@ fg_flags.setColor(GetColorProvider()->GetColor(GetIconColorId())); if (is_long_press_action_available) { - // active: 100% alpha, inactive: 54% alpha - fg_flags.setAlphaf(button_controller_->IsAssistantVisible() - ? kAssistantVisibleAlpha / 255.0f - : kAssistantInvisibleAlpha / 255.0f); + fg_flags.setAlphaf(kAssistantInvisibleAlpha / 255.0f); } const float thickness = std::ceil(ring_thickness_dp * dsf);
diff --git a/ash/shelf/home_button_controller.cc b/ash/shelf/home_button_controller.cc index 6405fb1..3e95b2d 100644 --- a/ash/shelf/home_button_controller.cc +++ b/ash/shelf/home_button_controller.cc
@@ -5,9 +5,7 @@ #include "ash/shelf/home_button_controller.h" #include "ash/app_list/app_list_controller_impl.h" -#include "ash/assistant/model/assistant_ui_model.h" #include "ash/capture_mode/capture_mode_controller.h" -#include "ash/public/cpp/assistant/controller/assistant_ui_controller.h" #include "ash/root_window_controller.h" #include "ash/scanner/scanner_metrics.h" #include "ash/shelf/home_button.h" @@ -45,8 +43,6 @@ sunfish_scanner_feature_observation_.Observe( shell->sunfish_scanner_feature_watcher()); shell->app_list_controller()->AddObserver(this); - AssistantUiController::Get()->GetModel()->AddObserver(this); - AssistantState::Get()->AddObserver(this); } HomeButtonController::~HomeButtonController() { @@ -54,19 +50,15 @@ // AppListController are destroyed early when Shel is being destroyed, so they // may not exist. - if (AssistantUiController::Get()) - AssistantUiController::Get()->GetModel()->RemoveObserver(this); if (shell->app_list_controller()) shell->app_list_controller()->RemoveObserver(this); - if (AssistantState::Get()) - AssistantState::Get()->RemoveObserver(this); } bool HomeButtonController::MaybeHandleGestureEvent(ui::GestureEvent* event) { switch (event->type()) { case ui::EventType::kGestureTap: case ui::EventType::kGestureTapCancel: - // Unconditionally stop the animation, even if Assistant / Sunfish/Scanner + // Unconditionally stop the animation, even if Sunfish/Scanner // is not currently available - because the animation could have been // started when they _were_ available. // These are no-ops if the animation did not start. @@ -76,7 +68,7 @@ // After animating the ripple, let the button handle the event. return false; case ui::EventType::kGestureTapDown: - if (IsAssistantAvailable() || IsSunfishOrScannerAvailable()) { + if (IsSunfishOrScannerAvailable()) { tap_animation_delay_timer_->Start( FROM_HERE, kAssistantAnimationDelay, base::BindOnce(&HomeButtonController::StartAssistantAnimation, @@ -99,23 +91,10 @@ return true; } - if (IsAssistantAvailable()) { - base::RecordAction(base::UserMetricsAction( - "VoiceInteraction.Started.HomeButtonLongPress")); - tap_overlay_->BurstAnimation(); - event->SetHandled(); - Shell::SetRootWindowForNewWindows( - button_->GetWidget()->GetNativeWindow()->GetRootWindow()); - AssistantUiController::Get()->ShowUi( - AssistantEntryPoint::kLongPressLauncher); - return true; - } - return false; case ui::EventType::kGestureLongTap: - // Only consume the long tap event if Assistant / Sunfish/Scanner is - // available. - if (!(IsAssistantAvailable() || IsSunfishOrScannerAvailable())) { + // Only consume the long tap event if Sunfish/Scanner is available. + if (!IsSunfishOrScannerAvailable()) { return false; } @@ -129,18 +108,7 @@ } bool HomeButtonController::IsLongPressActionAvailable() { - return IsAssistantAvailable() || IsSunfishOrScannerAvailable(); -} - -bool HomeButtonController::IsAssistantVisible() { - return AssistantUiController::Get()->GetModel()->visibility() == - AssistantVisibility::kVisible; -} - -bool HomeButtonController::IsAssistantAvailable() { - AssistantStateBase* state = AssistantState::Get(); - return state->allowed_state() == assistant::AssistantAllowedState::ALLOWED && - state->settings_enabled().value_or(false); + return IsSunfishOrScannerAvailable(); } bool HomeButtonController::IsSunfishOrScannerAvailable() const { @@ -165,23 +133,6 @@ } } -void HomeButtonController::OnAssistantFeatureAllowedChanged( - assistant::AssistantAllowedState state) { - button_->OnIconUpdated(); -} - -void HomeButtonController::OnAssistantSettingsEnabled(bool enabled) { - button_->OnIconUpdated(); -} - -void HomeButtonController::OnUiVisibilityChanged( - AssistantVisibility new_visibility, - AssistantVisibility old_visibility, - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) { - button_->OnIconUpdated(); -} - void HomeButtonController::OnSunfishScannerFeatureStatesChanged( SunfishScannerFeatureWatcher& source) { button_->OnIconUpdated();
diff --git a/ash/shelf/home_button_controller.h b/ash/shelf/home_button_controller.h index 2827dbc..b6b01c8 100644 --- a/ash/shelf/home_button_controller.h +++ b/ash/shelf/home_button_controller.h
@@ -7,7 +7,6 @@ #include <memory> -#include "ash/assistant/model/assistant_ui_model_observer.h" #include "ash/capture_mode/sunfish_scanner_feature_watcher.h" #include "ash/public/cpp/app_list/app_list_controller_observer.h" #include "ash/public/cpp/assistant/assistant_state.h" @@ -33,8 +32,6 @@ // Behavior is tested indirectly in HomeButtonTest and ShelfViewInkDropTest. class HomeButtonController : public AppListControllerObserver, public display::DisplayObserver, - public AssistantStateObserver, - public AssistantUiModelObserver, public SunfishScannerFeatureWatcher::Observer { public: explicit HomeButtonController(HomeButton* button); @@ -53,13 +50,7 @@ // opening the Assistant UI or opening a Sunfish-behavior capture session. bool IsLongPressActionAvailable(); - // Whether the Assistant UI currently showing. - bool IsAssistantVisible(); - private: - // Whether the Assistant is available via long-press. - bool IsAssistantAvailable(); - // Whether Sunfish or Scanner's UI can be shown. bool IsSunfishOrScannerAvailable() const; @@ -69,18 +60,6 @@ // display::DisplayObserver: void OnDisplayTabletStateChanged(display::TabletState state) override; - // AssistantStateObserver: - void OnAssistantFeatureAllowedChanged( - assistant::AssistantAllowedState) override; - void OnAssistantSettingsEnabled(bool enabled) override; - - // AssistantUiModelObserver: - void OnUiVisibilityChanged( - AssistantVisibility new_visibility, - AssistantVisibility old_visibility, - std::optional<AssistantEntryPoint> entry_point, - std::optional<AssistantExitPoint> exit_point) override; - // SunfishScannerFeatureWatcher::Observer: void OnSunfishScannerFeatureStatesChanged( SunfishScannerFeatureWatcher& source) override;
diff --git a/ash/shelf/hotseat_widget_unittest.cc b/ash/shelf/hotseat_widget_unittest.cc index 92fa611..c8e7156 100644 --- a/ash/shelf/hotseat_widget_unittest.cc +++ b/ash/shelf/hotseat_widget_unittest.cc
@@ -11,7 +11,6 @@ #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/test/app_list_test_helper.h" #include "ash/app_list/views/app_list_view.h" -#include "ash/assistant/assistant_controller_impl.h" #include "ash/capture_mode/capture_mode_controller.h" #include "ash/constants/ash_features.h" #include "ash/focus/focus_cycler.h" @@ -404,8 +403,7 @@ EXPECT_EQ(CaptureModeController::Get()->IsActive(), sunfish_or_scanner_enabled()); - // Hotseat should not change when starting a Sunfish-session or showing - // Assistant. + // Hotseat should not change when starting a Sunfish-session watcher.CheckEqual({}); }
diff --git a/ash/shell.cc b/ash/shell.cc index f872b50..376d6f7 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -38,7 +38,6 @@ #include "ash/api/tasks/tasks_delegate.h" #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/app_list_feature_usage_metrics.h" -#include "ash/assistant/assistant_controller_impl.h" #include "ash/auth/active_session_auth_controller_impl.h" #include "ash/birch/birch_model.h" #include "ash/booting/booting_animation_controller.h" @@ -877,14 +876,8 @@ // Accelerometer file reader stops listening to tablet mode controller. AccelerometerReader::GetInstance()->StopListenToTabletModeController(); - // Destroy |ambient_controller_| before |assistant_controller_|. ambient_controller_.reset(); - // Destroy |assistant_controller_| earlier than |tablet_mode_controller_| so - // that the former will destroy the Assistant view hierarchy which has a - // dependency on the latter. - assistant_controller_.reset(); - // Because this function will call |TabletModeController::RemoveObserver|, do // it before destroying |tablet_mode_controller_|. accessibility_controller_->Shutdown(); @@ -1607,7 +1600,6 @@ fullscreen_magnifier_controller_ = std::make_unique<FullscreenMagnifierController>(); mru_window_tracker_ = std::make_unique<MruWindowTracker>(); - assistant_controller_ = std::make_unique<AssistantControllerImpl>(); // MultiDisplayMetricsController has a dependency on `mru_window_tracker_`. multi_display_metrics_controller_ = @@ -1630,8 +1622,8 @@ std::make_unique<SunfishScannerFeatureWatcher>(*session_controller_, *this); - // |tablet_mode_controller_| |mru_window_tracker_|, and - // |assistant_controller_| are put before |app_list_controller_| as they are + // |tablet_mode_controller_| |mru_window_tracker_| + // are put before |app_list_controller_| as they are // used in its constructor. app_list_controller_ = std::make_unique<AppListControllerImpl>();
diff --git a/ash/shell.h b/ash/shell.h index 8f53f65..f6b16f58 100644 --- a/ash/shell.h +++ b/ash/shell.h
@@ -114,7 +114,6 @@ class AshDBusServices; class AshFocusRules; class AshTouchTransformController; -class AssistantControllerImpl; class AudioEffectsController; class AutoclickController; class AutozoomControllerImpl; @@ -446,9 +445,6 @@ return ash_accelerator_configuration_.get(); } AcceleratorLookup* accelerator_lookup() { return accelerator_lookup_.get(); } - AssistantControllerImpl* assistant_controller() { - return assistant_controller_.get(); - } AudioEffectsController* audio_effects_controller() { return audio_effects_controller_.get(); } @@ -1036,7 +1032,6 @@ // May be null in tests or when running on linux-chromeos. scoped_refptr<dbus::Bus> dbus_bus_; std::unique_ptr<AshDBusServices> ash_dbus_services_; - std::unique_ptr<AssistantControllerImpl> assistant_controller_; std::unique_ptr<AudioEffectsController> audio_effects_controller_; std::unique_ptr<AutozoomControllerImpl> autozoom_controller_; std::unique_ptr<BacklightsForcedOffSetter> backlights_forced_off_setter_;
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc index 95d46a0..23941613 100644 --- a/ash/test/ash_test_helper.cc +++ b/ash/test/ash_test_helper.cc
@@ -10,7 +10,6 @@ #include "ash/accelerometer/accelerometer_reader.h" #include "ash/ambient/test/ambient_ash_test_helper.h" #include "ash/app_list/test/app_list_test_helper.h" -#include "ash/assistant/assistant_controller_impl.h" #include "ash/constants/ash_features.h" #include "ash/constants/ash_switches.h" #include "ash/display/display_configuration_controller_test_api.h"
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 516f7d85..9cf9079 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -1759,7 +1759,8 @@ "clang_revision=\"$_clang_revision\" but clang_version=\"$clang_version\". clang_version in build/toolchain/toolchain.gni is likely outdated.") } - if (toolchain_has_rust && _perform_consistency_checks) { + if (toolchain_has_rust && _perform_consistency_checks && + !rust_force_head_revision) { # Ensure that the synced rust version matches what's in git. _rust_revision_lines = filter_include(read_file("//tools/rust/update_rust.py", "list lines"),
diff --git a/build/toolchain/toolchain.gni b/build/toolchain/toolchain.gni index ed381d0..ab22a746 100644 --- a/build/toolchain/toolchain.gni +++ b/build/toolchain/toolchain.gni
@@ -13,6 +13,11 @@ # `gclient runhooks` is run as well. llvm_force_head_revision = false + # Equivalent to llvm_force_head_revision, but for rust. When true, we expect + # to find a locally-build version of rust rather than the version specified + # in //tools/clang/scripts/update.py. + rust_force_head_revision = false + # Cronet is shipped in AOSP, where it is built using the Android Mainline # Clang. Please refer to go/cronet-builders-with-mainline-clang-design for # more information.
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni index 2d24b5952..136f77d 100644 --- a/buildtools/deps_revisions.gni +++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@ declare_args() { # Used to cause full rebuilds on libc++ rolls. This should be kept in sync # with the libcxx_revision var in //DEPS. - libcxx_revision = "65a5746fb4cc5fd7fdd1773b0c50bc556ff8900a" + libcxx_revision = "23b5bc93867b93b73f7be97cf2e8a71e95770e07" }
diff --git a/buildtools/third_party/libc++/libcxx_headers.gni b/buildtools/third_party/libc++/libcxx_headers.gni index f2df8494..8eaa0fe 100644 --- a/buildtools/third_party/libc++/libcxx_headers.gni +++ b/buildtools/third_party/libc++/libcxx_headers.gni
@@ -11,7 +11,7 @@ import("//buildtools/deps_revisions.gni") assert( - libcxx_revision == "65a5746fb4cc5fd7fdd1773b0c50bc556ff8900a", + libcxx_revision == "23b5bc93867b93b73f7be97cf2e8a71e95770e07", "libcxx_headers.gni and third_party/libc++ are out of sync.$0x0A$0x0AIf you were messing around with the libc++ repository, run:$0x0A`buildtools/third_party/libc++/generate_libcxx_headers.py`$0x0A$0x0AIf the script doesn't resolve the error, file a bug to msta@ with reproduction details.$0x0A") libcxx_headers = [ @@ -795,7 +795,6 @@ "//third_party/libc++/src/include/__tree", "//third_party/libc++/src/include/__tuple/find_index.h", "//third_party/libc++/src/include/__tuple/ignore.h", - "//third_party/libc++/src/include/__tuple/make_tuple_types.h", "//third_party/libc++/src/include/__tuple/sfinae_helpers.h", "//third_party/libc++/src/include/__tuple/tuple_element.h", "//third_party/libc++/src/include/__tuple/tuple_like.h",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index e205206..0977009 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -744,6 +744,7 @@ "java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java", "java/src/org/chromium/chrome/browser/metrics/LegacyTabStartupMetricsTracker.java", "java/src/org/chromium/chrome/browser/metrics/StartupMetricsTracker.java", + "java/src/org/chromium/chrome/browser/metrics/StorageSystem.java", "java/src/org/chromium/chrome/browser/metrics/UmaActivityObserver.java", "java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java", "java/src/org/chromium/chrome/browser/metrics/VariationsSession.java",
diff --git a/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml b/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml index cfe56f096..1088d38 100644 --- a/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml +++ b/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml
@@ -28,6 +28,7 @@ android:layout_gravity="start|center_vertical" android:layout_marginVertical="@dimen/message_card_description_vertical_margin" android:layout_weight="1" + android:screenReaderFocusable="true" android:textAlignment="viewStart" android:textAppearance="@style/TextAppearance.TextMedium.Primary" /> <org.chromium.ui.widget.ButtonCompat
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index 9cf638b..0882d0e 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -556,7 +556,7 @@ LayoutInflater.from(mActivity) .inflate(R.layout.new_tab_page_feed_header, null, false); mHeaderView.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE); - if (treatment.equals("none")) { + if (!treatment.equals("label")) { mHeaderView.setVisibility(View.GONE); } } else {
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java index e5a1707..31a5d8c 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
@@ -1230,12 +1230,12 @@ /** Returns the feed header text. */ private @Nullable String getHeaderText(boolean isExpanded) { - if (isExpanded) { + if (isExpanded && ChromeFeatureList.isEnabled(ChromeFeatureList.FEED_HEADER_REMOVAL)) { String treatment = ChromeFeatureList.getFieldTrialParamByFeature( ChromeFeatureList.FEED_HEADER_REMOVAL, "treatment"); // Returns null to indicate that no feed header is shown. - if (treatment.equals("none")) return null; + if (!treatment.equals("label")) return null; } Resources res = mContext.getResources();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java index 6af5496e..3257c58 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java
@@ -144,9 +144,9 @@ int[] dataTypes, @TimePeriod int timePeriod, String[] excludedDomains, - int[] excludedDomainReasons, - String[] ignoredDomains, - int[] ignoredDomainReasons) { + int @Nullable [] excludedDomainReasons, + String @Nullable [] ignoredDomains, + int @Nullable [] ignoredDomainReasons) { BrowsingDataBridgeJni.get() .clearBrowsingData( mProfile, @@ -324,9 +324,9 @@ @JniType("std::vector<int32_t>") int[] dataTypes, int timePeriod, @JniType("std::vector<std::string>") String[] excludedDomains, - @JniType("std::vector<int32_t>") int[] excludedDomainReasons, - @JniType("std::vector<std::string>") String[] ignoredDomains, - @JniType("std::vector<int32_t>") int[] ignoredDomainReasons); + @JniType("std::vector<int32_t>") int @Nullable [] excludedDomainReasons, + @JniType("std::vector<std::string>") String @Nullable [] ignoredDomains, + @JniType("std::vector<int32_t>") int @Nullable [] ignoredDomainReasons); void requestInfoAboutOtherFormsOfBrowsingHistory( @JniType("Profile*") Profile profile, OtherFormsOfBrowsingHistoryListener listener);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java index 428effc5..940bbcb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java
@@ -4,6 +4,8 @@ package org.chromium.chrome.browser.browsing_data; +import static org.chromium.build.NullUtil.assertNonNull; +import static org.chromium.build.NullUtil.assumeNonNull; import static org.chromium.chrome.browser.browsing_data.TimePeriodUtils.getTimePeriodSpinnerOptions; import android.app.Activity; @@ -27,7 +29,6 @@ import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.annotation.IntDef; -import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.collection.ArraySet; import androidx.preference.Preference; @@ -40,6 +41,8 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; +import org.chromium.build.annotations.NullMarked; +import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.browsing_data.BrowsingDataCounterBridge.BrowsingDataCounterCallback; import org.chromium.chrome.browser.browsing_data.TimePeriodUtils.TimePeriodSpinnerOption; @@ -79,6 +82,7 @@ * Settings screen that allows the user to clear browsing data. The user can choose which types of * data to clear (history, cookies, etc), and the time range from which to clear data. */ +@NullMarked public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment implements BrowsingDataBridge.OnClearBrowsingDataListener, Preference.OnPreferenceClickListener, @@ -95,7 +99,7 @@ private final ClearBrowsingDataFragment mParent; private final @DialogOption int mOption; private final ClearBrowsingDataCheckBoxPreference mCheckbox; - private BrowsingDataCounterBridge mCounter; + private @Nullable BrowsingDataCounterBridge mCounter; private @TimePeriod int mSelectedTimePeriod; public Item( @@ -226,17 +230,17 @@ public static final String CLEAR_BROWSING_DATA_FETCHER = "clearBrowsingDataFetcher"; - private OtherFormsOfHistoryDialogFragment mDialogAboutOtherFormsOfBrowsingHistory; + private @Nullable OtherFormsOfHistoryDialogFragment mDialogAboutOtherFormsOfBrowsingHistory; private SigninManager mSigninManager; - private ProgressDialog mProgressDialog; + private @Nullable ProgressDialog mProgressDialog; private Item[] mItems; private ClearBrowsingDataFetcher mFetcher; // This is the dialog we show to the user that lets them 'uncheck' (or exclude) the above // important domains from being cleared. - private ConfirmImportantSitesDialogFragment mConfirmImportantSitesDialog; + private @Nullable ConfirmImportantSitesDialogFragment mConfirmImportantSitesDialog; private @TimePeriod int mLastSelectedTimePeriod; private boolean mShouldShowPostDeleteFeedback; @@ -363,10 +367,10 @@ */ private void clearBrowsingData( Set<Integer> options, - @Nullable String[] excludedDomains, - @Nullable int[] excludedDomainReasons, - @Nullable String[] ignoredDomains, - @Nullable int[] ignoredDomainReasons) { + String @Nullable [] excludedDomains, + int @Nullable [] excludedDomainReasons, + String @Nullable [] ignoredDomains, + int @Nullable [] ignoredDomainReasons) { onClearBrowsingData(); showProgressDialog(); Set<Integer> dataTypes = new ArraySet<>(); @@ -398,6 +402,7 @@ Object spinnerSelection = ((SpinnerPreference) findPreference(PREF_TIME_RANGE)).getSelectedOption(); + assumeNonNull(spinnerSelection); mLastSelectedTimePeriod = ((TimePeriodSpinnerOption) spinnerSelection).getTimePeriod(); int[] dataTypesArray = CollectionUtil.integerCollectionToIntArray(dataTypes); if (excludedDomains != null && excludedDomains.length != 0) { @@ -573,7 +578,7 @@ /** Disable the "Clear" button if none of the options are selected. Otherwise, enable it. */ private void updateButtonState() { - Button clearButton = (Button) getView().findViewById(R.id.clear_button); + Button clearButton = (Button) assumeNonNull(getView()).findViewById(R.id.clear_button); boolean isEnabled = !getSelectedOptions().isEmpty(); clearButton.setEnabled(isEnabled); } @@ -590,9 +595,9 @@ return spinnerOptionIndex; } - private void setUpClearBrowsingDataFetcher(Bundle savedInstanceState) { + private void setUpClearBrowsingDataFetcher(@Nullable Bundle savedInstanceState) { if (savedInstanceState != null) { - mFetcher = savedInstanceState.getParcelable(CLEAR_BROWSING_DATA_FETCHER); + mFetcher = assertNonNull(savedInstanceState.getParcelable(CLEAR_BROWSING_DATA_FETCHER)); return; } @@ -610,7 +615,8 @@ setUpClearBrowsingDataFetcher(savedInstanceState); mPageTitle.set(getString(R.string.clear_browsing_data_title)); SettingsUtils.addPreferencesFromResource(this, R.xml.clear_browsing_data_preferences); - mSigninManager = IdentityServicesProvider.get().getSigninManager(getProfile()); + mSigninManager = + assertNonNull(IdentityServicesProvider.get().getSigninManager(getProfile())); List<Integer> options = getDialogOptions(fragmentArgs); mItems = new Item[options.size()]; @@ -639,6 +645,7 @@ Object spinnerSelection = ((SpinnerPreference) findPreference(PREF_TIME_RANGE)).getSelectedOption(); + assumeNonNull(spinnerSelection); mLastSelectedTimePeriod = ((TimePeriodSpinnerOption) spinnerSelection).getTimePeriod(); for (int i = 0; i < options.size(); i++) { @@ -758,12 +765,12 @@ } @VisibleForTesting - ProgressDialog getProgressDialog() { + @Nullable ProgressDialog getProgressDialog() { return mProgressDialog; } @VisibleForTesting - ConfirmImportantSitesDialogFragment getImportantSitesDialogFragment() { + @Nullable ConfirmImportantSitesDialogFragment getImportantSitesDialogFragment() { return mConfirmImportantSitesDialog; } @@ -813,12 +820,13 @@ mFetcher.getSortedExampleOrigins()); mConfirmImportantSitesDialog.setTargetFragment(this, IMPORTANT_SITES_DIALOG_CODE); mConfirmImportantSitesDialog.show( - getFragmentManager(), ConfirmImportantSitesDialogFragment.FRAGMENT_TAG); + assertNonNull(getFragmentManager()), + ConfirmImportantSitesDialogFragment.FRAGMENT_TAG); } /** Used only to access the dialog about other forms of browsing history from tests. */ @VisibleForTesting - OtherFormsOfHistoryDialogFragment getDialogAboutOtherFormsOfBrowsingHistory() { + @Nullable OtherFormsOfHistoryDialogFragment getDialogAboutOtherFormsOfBrowsingHistory() { return mDialogAboutOtherFormsOfBrowsingHistory; } @@ -827,8 +835,9 @@ * positive button response. */ @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == IMPORTANT_SITES_DIALOG_CODE && resultCode == Activity.RESULT_OK) { + assert data != null; // Deselected means that the user is excluding the domain from being cleared. String[] deselectedDomains = data.getStringArrayExtra( @@ -850,6 +859,7 @@ 1, mFetcher.getMaxImportantSites() + 1, mFetcher.getMaxImportantSites() + 1); + assert ignoredDomains != null; RecordHistogram.recordCustomCountHistogram( "History.ClearBrowsingData.ImportantIgnoredNum", ignoredDomains.length, @@ -911,7 +921,7 @@ } /** Get the last focused activity that has not been destroyed. */ - private Activity getLastFocusedActivity() { + private @Nullable Activity getLastFocusedActivity() { if (ApplicationStatus.hasVisibleActivities()) { return ApplicationStatus.getLastTrackedFocusedActivity(); } else {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ConfirmImportantSitesDialogFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ConfirmImportantSitesDialogFragment.java index 83cd360a..b8d6399 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ConfirmImportantSitesDialogFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ConfirmImportantSitesDialogFragment.java
@@ -4,6 +4,8 @@ package org.chromium.chrome.browser.browsing_data; +import static org.chromium.build.NullUtil.assumeNonNull; + import android.app.Activity; import android.app.ActivityManager; import android.app.Dialog; @@ -30,6 +32,9 @@ import org.chromium.base.CollectionUtil; import org.chromium.base.ContextUtils; +import org.chromium.build.annotations.Initializer; +import org.chromium.build.annotations.NullMarked; +import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileManager; @@ -55,6 +60,7 @@ * We use proper bundle construction (through the {@link #newInstance(String[], int[], String[])} * method) and onActivityResult return conventions. */ +@NullMarked public class ConfirmImportantSitesDialogFragment extends DialogFragment { private class ClearBrowsingDataAdapter extends ArrayAdapter<String> implements AdapterView.OnItemClickListener { @@ -63,7 +69,7 @@ private final RoundedIconGenerator mIconGenerator; private ClearBrowsingDataAdapter( - String[] domains, String[] faviconURLs, Resources resources) { + String[] domains, String @Nullable [] faviconURLs, Resources resources) { super(getActivity(), R.layout.confirm_important_sites_list_row, domains); mDomains = domains; mFaviconURLs = faviconURLs; @@ -77,7 +83,7 @@ } @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(int position, @Nullable View convertView, ViewGroup parent) { View childView = convertView; if (childView == null) { LayoutInflater inflater = LayoutInflater.from(getActivity()); @@ -96,8 +102,10 @@ private void configureChildView(int position, ViewAndFaviconHolder viewHolder) { String domain = mDomains[position]; - viewHolder.checkboxView.setChecked(mCheckedState.get(domain)); + assumeNonNull(viewHolder.checkboxView) + .setChecked(Boolean.TRUE.equals(mCheckedState.get(domain))); viewHolder.checkboxView.setText(domain); + assert mFaviconURLs != null; loadFavicon(viewHolder, mFaviconURLs[position]); } @@ -109,9 +117,9 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String domain = mDomains[position]; ViewAndFaviconHolder viewHolder = (ViewAndFaviconHolder) view.getTag(); - boolean isChecked = mCheckedState.get(domain); + boolean isChecked = Boolean.TRUE.equals(mCheckedState.get(domain)); mCheckedState.put(domain, !isChecked); - viewHolder.checkboxView.setChecked(!isChecked); + assumeNonNull(viewHolder.checkboxView).setChecked(!isChecked); } private void loadFavicon(final ViewAndFaviconHolder viewHolder, final String url) { @@ -119,7 +127,7 @@ new LargeIconCallback() { @Override public void onLargeIconAvailable( - Bitmap icon, + @Nullable Bitmap icon, int fallbackColor, boolean isFallbackColorDefault, @IconType int iconType) { @@ -132,10 +140,11 @@ mIconGenerator, getResources(), mFaviconSize); - viewHolder.imageView.setImageDrawable(image); + assumeNonNull(viewHolder.imageView).setImageDrawable(image); } }; - mLargeIconBridge.getLargeIconForStringUrl(url, mFaviconSize, viewHolder.imageCallback); + assumeNonNull(mLargeIconBridge) + .getLargeIconForStringUrl(url, mFaviconSize, viewHolder.imageCallback); } } @@ -145,9 +154,9 @@ * the favicon image callback so that we can make sure we load the correct favicon. */ private static class ViewAndFaviconHolder { - public CheckBox checkboxView; - public ImageView imageView; - public LargeIconCallback imageCallback; + public @Nullable CheckBox checkboxView; + public @Nullable ImageView imageView; + public @Nullable LargeIconCallback imageCallback; } /** @@ -158,7 +167,9 @@ * @return An instance of ConfirmImportantSitesDialogFragment with the bundle arguments set. */ public static ConfirmImportantSitesDialogFragment newInstance( - String[] importantDomains, int[] importantDomainReasons, String[] faviconURLs) { + String @Nullable [] importantDomains, + int @Nullable [] importantDomainReasons, + String @Nullable [] faviconURLs) { ConfirmImportantSitesDialogFragment dialogFragment = new ConfirmImportantSitesDialogFragment(); Bundle bundle = new Bundle(); @@ -206,36 +217,39 @@ private final Map<String, Integer> mImportantDomainsReasons; /** Array of favicon urls to use for each important domain above. */ - private String[] mFaviconURLs; + private String @Nullable [] mFaviconURLs; /** The map of domains to the checked state, where true is checked. */ private final Map<String, Boolean> mCheckedState; /** The alert dialog shown to the user. */ - private AlertDialog mDialog; + private @Nullable AlertDialog mDialog; /** Our adapter that we use with the list view in the dialog. */ - private ClearBrowsingDataAdapter mAdapter; + private @Nullable ClearBrowsingDataAdapter mAdapter; - private LargeIconBridge mLargeIconBridge; + private @Nullable LargeIconBridge mLargeIconBridge; - private Profile mProfile; + private @Nullable Profile mProfile; /** We store the custom list view for testing */ - private ListView mSitesListView; + private @Nullable ListView mSitesListView; public ConfirmImportantSitesDialogFragment() { mImportantDomainsReasons = new HashMap<>(); mCheckedState = new HashMap<>(); } + @Initializer @Override - public void setArguments(Bundle args) { + public void setArguments(@Nullable Bundle args) { + assumeNonNull(args); super.setArguments(args); - mImportantDomains = args.getStringArray(IMPORTANT_DOMAINS_TAG); + mImportantDomains = assumeNonNull(args.getStringArray(IMPORTANT_DOMAINS_TAG)); mFaviconURLs = args.getStringArray(FAVICON_URLS_TAG); int[] importantDomainReasons = args.getIntArray(IMPORTANT_DOMAIN_REASONS_TAG); for (int i = 0; i < mImportantDomains.length; ++i) { + assert importantDomainReasons != null; mImportantDomainsReasons.put(mImportantDomains[i], importantDomainReasons[i]); mCheckedState.put(mImportantDomains[i], true); } @@ -251,7 +265,7 @@ } @VisibleForTesting - public ListView getSitesList() { + public @Nullable ListView getSitesList() { return mSitesListView; } @@ -264,7 +278,7 @@ } @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { // We check the domains and urls as well due to crbug.com/622879. if (savedInstanceState != null) { // The important domains and favicon URLs aren't currently saved, so if this dialog @@ -326,11 +340,11 @@ IGNORED_DOMAIN_REASONS_TAG, CollectionUtil.integerCollectionToIntArray( ignoredDomainReasons)); - getTargetFragment() + assumeNonNull(getTargetFragment()) .onActivityResult( getTargetRequestCode(), Activity.RESULT_OK, data); } else { - getTargetFragment() + assumeNonNull(getTargetFragment()) .onActivityResult( getTargetRequestCode(), Activity.RESULT_CANCELED,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java index 43277a23..2e1714a3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
@@ -77,6 +77,7 @@ import org.chromium.chrome.browser.media.MediaViewerUtils; import org.chromium.chrome.browser.metrics.LaunchMetrics; import org.chromium.chrome.browser.metrics.PackageMetrics; +import org.chromium.chrome.browser.metrics.StorageSystem; import org.chromium.chrome.browser.metrics.UmaUtils; import org.chromium.chrome.browser.notifications.TrampolineActivityTracker; import org.chromium.chrome.browser.notifications.channels.ChannelsUpdater; @@ -652,6 +653,8 @@ () -> { initAsyncDiskTask(); + StorageSystem.recordStorageType(); + DefaultBrowserInfo.initBrowserFetcher(); AfterStartupTaskUtils.setStartupComplete();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/StorageSystem.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/StorageSystem.java new file mode 100644 index 0000000..f820f1a --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/StorageSystem.java
@@ -0,0 +1,86 @@ +// 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. + +package org.chromium.chrome.browser.metrics; + +import androidx.annotation.Nullable; + +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.task.PostTask; +import org.chromium.base.task.TaskTraits; +import org.chromium.build.annotations.NullMarked; + +import java.io.File; +import java.io.IOException; + +/** Methods for determining and recording the storage system type (e.g., eMMC, UFS). */ +@NullMarked +public class StorageSystem { + // These values are persisted to logs. Entries should not be renumbered and numeric values + // should never be reused. + public @interface StorageType { + int UFS = 0; + int EMMC = 1; + int UNKNOWN = 2; + int UNDETERMINED = 3; + int COUNT = 4; + } + + /** Asynchronously determines the storage type and records it to a UMA histogram. */ + public static void recordStorageType() { + PostTask.postTask( + TaskTraits.BEST_EFFORT_MAY_BLOCK, + () -> { + @StorageType int storageType = getStorageType(); + RecordHistogram.recordEnumeratedHistogram( + "Android.StorageSystem.Type", storageType, StorageType.COUNT); + }); + } + + /** + * Determines the storage type by inspecting system files. + * + * @return The detected storage type. + */ + private static @StorageType int getStorageType() { + try { + String userdataBlock = getResolvedLink("/dev/block/by-name/userdata"); + if (userdataBlock == null) { + return StorageType.UNKNOWN; + } + + // Remove the "/dev/block/" part. + userdataBlock = new File(userdataBlock).getName(); + + if (userdataBlock.startsWith("mmc")) { + return StorageType.EMMC; + } + + String sysfsLink = getResolvedLink("/sys/class/block/" + userdataBlock); + if (sysfsLink == null) { + return StorageType.UNKNOWN; + } + + if (sysfsLink.contains("/host0/")) { + return StorageType.UFS; + } + + return StorageType.UNDETERMINED; + } catch (Exception e) { + return StorageType.UNKNOWN; + } + } + + private static @Nullable String getResolvedLink(String path) { + try { + File file = new File(path); + if (!file.exists()) { + return null; + } + return file.getCanonicalPath(); + } catch (IOException e) { + return null; + } + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java index 8224c10..e3fa37a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
@@ -2556,7 +2556,7 @@ } } - private @UserAgentOverrideOption int calculateUserAgentOverrideOption(@Nullable GURL url) { + public @UserAgentOverrideOption int calculateUserAgentOverrideOption(@Nullable GURL url) { WebContents webContents = getWebContents(); boolean currentRequestDesktopSite = TabUtils.isUsingDesktopUserAgent(webContents); // INHERIT means use the same UA that was used last time.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java index af2939b..4bd07d85 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java
@@ -52,6 +52,7 @@ import org.chromium.components.find_in_page.FindNotificationDetails; import org.chromium.content_public.browser.InvalidateTypes; import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.navigation_controller.UserAgentOverrideOption; import org.chromium.content_public.common.ResourceRequestBody; import org.chromium.url.GURL; @@ -636,6 +637,11 @@ } @Override + public @UserAgentOverrideOption int shouldOverrideUserAgentForPrerender2(GURL url) { + return mTab.calculateUserAgentOverrideOption(url); + } + + @Override public void didChangeCloseSignalInterceptStatus() { mTab.didChangeCloseSignalInterceptStatus(); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java index f05d3a9..41a93c6b 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java
@@ -85,7 +85,11 @@ /** Tests for {@link FeedSurfaceMediator}. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) -@EnableFeatures({ChromeFeatureList.WEB_FEED_SORT, ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP}) +@EnableFeatures({ + ChromeFeatureList.WEB_FEED_SORT, + ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP, + ChromeFeatureList.FEED_HEADER_REMOVAL +}) public class FeedSurfaceMediatorTest { static final @Px int TOOLBAR_HEIGHT = 10; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 6a3af2c1..6065f17 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -10984,33 +10984,6 @@ <message name="IDS_PASSWORD_MANAGER_EXPORT_DIALOG_TITLE" desc="The title of the file selection dialog for exporting passwords"> Export Passwords From Chrome </message> - <message name="IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_TITLE_GPM" desc="The title of the 'save unsynced credentials' bubble."> - Save passwords? - </message> - <message name="IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_DESCRIPTION_GPM" desc="The description text of the 'save unsynced credentials' bubble."> - Google Password Manager couldn't save these passwords in your Google Account. You can save them to this device. - </message> - - <if expr="not use_titlecase"> - <message name="IDS_PASSWORD_MANAGER_SAVE_UNSYNCED_CREDENTIALS_BUTTON_GPM" desc="Button text for the 'save unsynced credentials' bubble's save option."> - Save to device - </message> - </if> - <if expr="use_titlecase"> - <message name="IDS_PASSWORD_MANAGER_SAVE_UNSYNCED_CREDENTIALS_BUTTON_GPM" desc="In Title Case: Button text for the 'save unsynced credentials' bubble's save option."> - Save to Device - </message> - </if> - <if expr="not use_titlecase"> - <message name="IDS_PASSWORD_MANAGER_DISCARD_UNSYNCED_CREDENTIALS_BUTTON" desc="Button text for the 'save unsynced credentials' bubble's discard option."> - No thanks - </message> - </if> - <if expr="use_titlecase"> - <message name="IDS_PASSWORD_MANAGER_DISCARD_UNSYNCED_CREDENTIALS_BUTTON" desc="In Title Case: Button text for the 'save unsynced credentials' bubble's discard option."> - No Thanks - </message> - </if> </if> <if expr="is_android"> <message name="IDS_PASSWORD_MANAGER_SAVE_BUTTON" desc="Mobile: Button text for the 'Save Password' infobar's 'Remember password' option" formatter_data="android_java">
diff --git a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_DISCARD_UNSYNCED_CREDENTIALS_BUTTON.png.sha1 b/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_DISCARD_UNSYNCED_CREDENTIALS_BUTTON.png.sha1 deleted file mode 100644 index 9a8f8281..0000000 --- a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_DISCARD_UNSYNCED_CREDENTIALS_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9ebec308091b1bb9bab8a6baccb905d83daf2a23 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_SAVE_UNSYNCED_CREDENTIALS_BUTTON_GPM.png.sha1 b/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_SAVE_UNSYNCED_CREDENTIALS_BUTTON_GPM.png.sha1 deleted file mode 100644 index 8b2ef99..0000000 --- a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_SAVE_UNSYNCED_CREDENTIALS_BUTTON_GPM.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c65ce842292e418d38c0a55ddc3ecc37c052313d \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_DESCRIPTION_GPM.png.sha1 b/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_DESCRIPTION_GPM.png.sha1 deleted file mode 100644 index 8b2ef99..0000000 --- a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_DESCRIPTION_GPM.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c65ce842292e418d38c0a55ddc3ecc37c052313d \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_TITLE_GPM.png.sha1 b/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_TITLE_GPM.png.sha1 deleted file mode 100644 index 8b2ef99..0000000 --- a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_TITLE_GPM.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c65ce842292e418d38c0a55ddc3ecc37c052313d \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 2d476881..ac05a7553 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1845,6 +1845,10 @@ # TODO(crbug.com/): Remove this circular dependency when # c/b/net/system_network_context_manager.h gets componentized. "//chrome/browser/assist_ranker:impl", + + # TODO(crbug.com/353332589): Remove once profile_manager.h has been moved + # into the //chrome/browser/profiles target. + "//chrome/browser/regional_capabilities:metrics_provider_impl", ] public_deps = [ @@ -1987,6 +1991,8 @@ "//chrome/browser/profiling_host", "//chrome/browser/promos:utils", "//chrome/browser/reading_list", + "//chrome/browser/regional_capabilities", + "//chrome/browser/regional_capabilities:metrics_provider_impl", "//chrome/browser/resource_coordinator:tab_manager_features", "//chrome/browser/resources/accessibility:resources", "//chrome/browser/safe_browsing", @@ -2453,6 +2459,7 @@ "//components/sqlite_proto", "//components/startup_metric_utils", "//components/storage_monitor", + "//components/strike_database:features", "//components/strings", "//components/subresource_filter/content/browser", "//components/subresource_filter/content/shared/browser",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index bedf007..eb424480 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -177,6 +177,7 @@ #include "components/soda/soda_features.h" #include "components/spellcheck/common/spellcheck_features.h" #include "components/spellcheck/spellcheck_buildflags.h" +#include "components/strike_database/strike_database_features.h" #include "components/supervised_user/core/common/features.h" #include "components/supervised_user/core/common/supervised_user_constants.h" #include "components/sync/base/command_line_switches.h" @@ -11018,6 +11019,10 @@ kAndroidTabHighlightingVariations, "AndroidTabHighlightingVariations")}, + {"android-zoom-indicator", flag_descriptions::kAndroidZoomIndicatorName, + flag_descriptions::kAndroidZoomIndicatorDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kAndroidZoomIndicator)}, + {"android-tips-notifications", flag_descriptions::kAndroidTipsNotificationsName, flag_descriptions::kAndroidTipsNotificationsDescription, kOsAndroid, @@ -12765,7 +12770,7 @@ {"disable-autofill-strike-system", flag_descriptions::kDisableAutofillStrikeSystemName, flag_descriptions::kDisableAutofillStrikeSystemDescription, kOsAll, - FEATURE_VALUE_TYPE(autofill::features::kDisableAutofillStrikeSystem)}, + FEATURE_VALUE_TYPE(strike_database::features::kDisableStrikeSystem)}, #if BUILDFLAG(IS_ANDROID) {"allow-non-family-link-url-filter-mode",
diff --git a/chrome/browser/ash/app_list/search/BUILD.gn b/chrome/browser/ash/app_list/search/BUILD.gn index d6e5f3c9..0f5cb01 100644 --- a/chrome/browser/ash/app_list/search/BUILD.gn +++ b/chrome/browser/ash/app_list/search/BUILD.gn
@@ -166,7 +166,6 @@ "//ash", "//ash/constants", "//ash/public/cpp", - "//ash/public/cpp/assistant/test_support", "//ash/public/mojom:accelerator_info", "//ash/webui/help_app_ui", "//ash/webui/personalization_app",
diff --git a/chrome/browser/ash/app_list/search/assistant_text_search_provider.cc b/chrome/browser/ash/app_list/search/assistant_text_search_provider.cc index 0665044d..038ec3d 100644 --- a/chrome/browser/ash/app_list/search/assistant_text_search_provider.cc +++ b/chrome/browser/ash/app_list/search/assistant_text_search_provider.cc
@@ -97,10 +97,6 @@ AssistantTextSearchProvider::AssistantTextSearchProvider() : SearchProvider(SearchCategory::kAssistant) { UpdateResults(); - - // Bind observers. - assistant_controller_observation_.Observe(ash::AssistantController::Get()); - assistant_state_observation_.Observe(ash::AssistantState::Get()); } AssistantTextSearchProvider::~AssistantTextSearchProvider() = default; @@ -119,12 +115,6 @@ } void AssistantTextSearchProvider::OnAssistantControllerDestroying() { - DCHECK(assistant_state_observation_.IsObservingSource( - ash::AssistantState::Get())); - assistant_state_observation_.Reset(); - DCHECK(assistant_controller_observation_.IsObservingSource( - ash::AssistantController::Get())); - assistant_controller_observation_.Reset(); } void AssistantTextSearchProvider::OnAssistantFeatureAllowedChanged(
diff --git a/chrome/browser/ash/app_list/search/assistant_text_search_provider.h b/chrome/browser/ash/app_list/search/assistant_text_search_provider.h index 128cebda..6f23a08 100644 --- a/chrome/browser/ash/app_list/search/assistant_text_search_provider.h +++ b/chrome/browser/ash/app_list/search/assistant_text_search_provider.h
@@ -8,7 +8,6 @@ #include "ash/public/cpp/assistant/assistant_state.h" #include "ash/public/cpp/assistant/controller/assistant_controller.h" #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" -#include "base/scoped_observation.h" #include "chrome/browser/ash/app_list/search/search_provider.h" namespace app_list { @@ -48,13 +47,6 @@ void UpdateResults(); std::u16string query_; - - base::ScopedObservation<ash::AssistantController, - ash::AssistantControllerObserver> - assistant_controller_observation_{this}; - - base::ScopedObservation<ash::AssistantStateBase, ash::AssistantStateObserver> - assistant_state_observation_{this}; }; } // namespace app_list
diff --git a/chrome/browser/ash/system_web_apps/apps/help_app/help_app_untrusted_ui_config.cc b/chrome/browser/ash/system_web_apps/apps/help_app/help_app_untrusted_ui_config.cc index 6f9004d..02f1f5f 100644 --- a/chrome/browser/ash/system_web_apps/apps/help_app/help_app_untrusted_ui_config.cc +++ b/chrome/browser/ash/system_web_apps/apps/help_app/help_app_untrusted_ui_config.cc
@@ -212,8 +212,7 @@ source->AddBoolean( "assistantAllowed", assistant_allowed_state == assistant::AssistantAllowedState::ALLOWED); - source->AddBoolean("assistantEnabled", - AssistantState::Get()->settings_enabled().value_or(false)); + source->AddBoolean("assistantEnabled", false); source->AddBoolean("playStoreEnabled", arc::IsArcPlayStoreEnabledForProfile(profile)); source->AddBoolean("pinEnabled", quick_unlock::IsPinEnabled());
diff --git a/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service_unittest.cc b/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service_unittest.cc index 55be864..09e63c01 100644 --- a/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service_unittest.cc +++ b/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service_unittest.cc
@@ -24,7 +24,6 @@ using ::safe_browsing::BinaryUploadService; using ::testing::_; -using ::testing::Invoke; using ::testing::NiceMock; using ::testing::NotNull; using ::testing::Return; @@ -69,7 +68,7 @@ void SetFileSystemSignals(bool is_os_verified, const char* subject_name = nullptr) { EXPECT_CALL(mock_system_signals_service_, GetFileSystemSignals(_, _)) - .WillRepeatedly(Invoke( + .WillRepeatedly( [is_os_verified, subject_name]( const std::vector<device_signals::GetFileSystemInfoOptions>& options, @@ -93,7 +92,7 @@ std::move(callback).Run({item}); }, is_os_verified, subject_name, std::move(callback))); - })); + }); } private: @@ -152,14 +151,13 @@ settings); request->set_tab_title("tab_title"); ON_CALL(*request, GetRequestData(_)) - .WillByDefault( - Invoke([](BinaryUploadService::Request::DataCallback callback) { - BinaryUploadService::Request::Data data; - data.contents = "contents"; - data.size = data.contents.size(); - std::move(callback).Run(BinaryUploadService::Result::SUCCESS, - std::move(data)); - })); + .WillByDefault([](BinaryUploadService::Request::DataCallback callback) { + BinaryUploadService::Request::Data data; + data.contents = "contents"; + data.size = data.contents.size(); + std::move(callback).Run(BinaryUploadService::Result::SUCCESS, + std::move(data)); + }); return request; }
diff --git a/chrome/browser/enterprise/connectors/device_trust/attestation/ash/ash_attestation_service_impl_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/attestation/ash/ash_attestation_service_impl_unittest.cc index 0ce3ecf..47a1cde 100644 --- a/chrome/browser/enterprise/connectors/device_trust/attestation/ash/ash_attestation_service_impl_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/attestation/ash/ash_attestation_service_impl_unittest.cc
@@ -36,7 +36,6 @@ using base::test::RunOnceCallback; using testing::_; -using testing::Invoke; using testing::StrictMock; namespace enterprise_connectors {
diff --git a/chrome/browser/enterprise/connectors/device_trust/attestation/browser/browser_attestation_service_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/attestation/browser/browser_attestation_service_unittest.cc index b3a27245..7239c905 100644 --- a/chrome/browser/enterprise/connectors/device_trust/attestation/browser/browser_attestation_service_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/attestation/browser/browser_attestation_service_unittest.cc
@@ -19,7 +19,6 @@ #include "testing/gtest/include/gtest/gtest.h" using testing::_; -using testing::Invoke; using testing::StrictMock; namespace enterprise_connectors { @@ -146,21 +145,21 @@ void MockDecorateKeyInfo() { EXPECT_CALL(*mock_device_attester_, DecorateKeyInfo(_, _, _)) - .WillOnce(Invoke([](const std::set<DTCPolicyLevel>& levels, - KeyInfo& key_info, base::OnceClosure done_closure) { + .WillOnce([](const std::set<DTCPolicyLevel>& levels, KeyInfo& key_info, + base::OnceClosure done_closure) { std::move(done_closure).Run(); - })); + }); EXPECT_CALL(*mock_profile_attester_, DecorateKeyInfo(_, _, _)) - .WillOnce(Invoke([](const std::set<DTCPolicyLevel>& levels, - KeyInfo& key_info, base::OnceClosure done_closure) { + .WillOnce([](const std::set<DTCPolicyLevel>& levels, KeyInfo& key_info, + base::OnceClosure done_closure) { std::move(done_closure).Run(); - })); + }); } void MockSignResponse(bool add_browser_signature = true) { EXPECT_CALL(*mock_device_attester_, SignResponse(_, _, _, _)) - .WillOnce(Invoke( + .WillOnce( [add_browser_signature](const std::set<DTCPolicyLevel>& levels, const std::string& challenge_response, SignedData& signed_data, @@ -171,16 +170,15 @@ signed_data.set_signature(kFakeSignature); } std::move(done_closure).Run(); - })); + }); EXPECT_CALL(*mock_profile_attester_, SignResponse(_, _, _, _)) - .WillOnce( - Invoke([](const std::set<DTCPolicyLevel>& levels, - const std::string& challenge_response, - SignedData& signed_data, base::OnceClosure done_closure) { - ASSERT_FALSE(challenge_response.empty()); - std::move(done_closure).Run(); - })); + .WillOnce([](const std::set<DTCPolicyLevel>& levels, + const std::string& challenge_response, + SignedData& signed_data, base::OnceClosure done_closure) { + ASSERT_FALSE(challenge_response.empty()); + std::move(done_closure).Run(); + }); } void VerifyAttestationResponse(
diff --git a/chrome/browser/enterprise/connectors/device_trust/attestation/browser/device_attester_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/attestation/browser/device_attester_unittest.cc index 632346837..16a50f1 100644 --- a/chrome/browser/enterprise/connectors/device_trust/attestation/browser/device_attester_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/attestation/browser/device_attester_unittest.cc
@@ -15,7 +15,6 @@ #include "testing/gtest/include/gtest/gtest.h" using testing::_; -using testing::Invoke; namespace enterprise_connectors { @@ -52,7 +51,7 @@ void SetupPubkeyExport(bool can_export_pubkey = true) { EXPECT_CALL(mock_key_manager_, ExportPublicKeyAsync(_)) - .WillOnce(Invoke( + .WillOnce( [&, can_export_pubkey]( base::OnceCallback<void(std::optional<std::string>)> callback) { if (can_export_pubkey) { @@ -65,15 +64,16 @@ } else { std::move(callback).Run(std::nullopt); } - })); + }); } void SetupSignature(bool can_sign = true) { EXPECT_CALL(mock_key_manager_, SignStringAsync(_, _)) - .WillOnce(Invoke( - [&, can_sign](const std::string& str, - base::OnceCallback<void( - std::optional<std::vector<uint8_t>>)> callback) { + .WillOnce( + [&, can_sign]( + const std::string& str, + base::OnceCallback<void(std::optional<std::vector<uint8_t>>)> + callback) { if (can_sign) { signature = test_key_pair_->key()->SignSlowly(base::as_byte_span(str)); @@ -81,7 +81,7 @@ } else { std::move(callback).Run(std::nullopt); } - })); + }); } base::test::SingleThreadTaskEnvironment task_environment_;
diff --git a/chrome/browser/enterprise/connectors/device_trust/device_trust_service_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/device_trust_service_unittest.cc index c11244ac..0e95860 100644 --- a/chrome/browser/enterprise/connectors/device_trust/device_trust_service_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/device_trust_service_unittest.cc
@@ -26,7 +26,6 @@ #include "testing/gtest/include/gtest/gtest.h" using testing::_; -using testing::Invoke; using testing::NotNull; namespace { @@ -177,14 +176,14 @@ std::string fake_display_name = "fake_display_name"; EXPECT_CALL(*mock_signals_service_, CollectSignals(_)) - .WillOnce(Invoke( + .WillOnce( [&fake_display_name]( base::OnceCallback<void(base::Value::Dict)> signals_callback) { auto fake_signals = std::make_unique<base::Value::Dict>(); fake_signals->Set(device_signals::names::kDisplayName, fake_display_name); std::move(signals_callback).Run(std::move(*fake_signals)); - })); + }); const DTAttestationResult result_code = DTAttestationResult::kSuccess; AttestationResponse attestation_response = {kAttestationResponse, @@ -192,16 +191,16 @@ EXPECT_CALL(*mock_attestation_service_, BuildChallengeResponseForVAChallenge( GetSerializedSignedChallenge(kJsonChallenge), _, levels_, _)) - .WillOnce(Invoke([&fake_display_name, &attestation_response]( - const std::string& challenge, - const base::Value::Dict signals, - const std::set<DTCPolicyLevel> levels, - AttestationService::AttestationCallback callback) { + .WillOnce([&fake_display_name, &attestation_response]( + const std::string& challenge, + const base::Value::Dict signals, + const std::set<DTCPolicyLevel> levels, + AttestationService::AttestationCallback callback) { EXPECT_EQ( signals.FindString(device_signals::names::kDisplayName)->c_str(), fake_display_name); std::move(callback).Run(attestation_response); - })); + }); base::test::TestFuture<const DeviceTrustResponse&> future; device_trust_service->BuildChallengeResponse( @@ -222,14 +221,14 @@ std::string fake_display_name = "fake_display_name"; EXPECT_CALL(*mock_signals_service_, CollectSignals(_)) - .WillOnce(Invoke( + .WillOnce( [&fake_display_name]( base::OnceCallback<void(base::Value::Dict)> signals_callback) { auto fake_signals = std::make_unique<base::Value::Dict>(); fake_signals->Set(device_signals::names::kDisplayName, fake_display_name); std::move(signals_callback).Run(std::move(*fake_signals)); - })); + }); const DTAttestationResult result_code = DTAttestationResult::kMissingSigningKey; @@ -238,13 +237,13 @@ EXPECT_CALL(*mock_attestation_service_, BuildChallengeResponseForVAChallenge( GetSerializedSignedChallenge(kJsonChallenge), _, levels_, _)) - .WillOnce(Invoke([&attestation_response]( - const std::string& challenge, - const base::Value::Dict signals, - const std::set<DTCPolicyLevel> levels, - AttestationService::AttestationCallback callback) { + .WillOnce([&attestation_response]( + const std::string& challenge, + const base::Value::Dict signals, + const std::set<DTCPolicyLevel> levels, + AttestationService::AttestationCallback callback) { std::move(callback).Run(attestation_response); - })); + }); base::test::TestFuture<const DeviceTrustResponse&> future; device_trust_service->BuildChallengeResponse(
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command_unittest.cc index c6b6ce3..a4eda79 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command_unittest.cc
@@ -37,7 +37,6 @@ using testing::_; using testing::ElementsAre; using testing::InSequence; -using testing::Invoke; using testing::Pair; using testing::Return; @@ -181,26 +180,25 @@ result.response_code = response_code; EXPECT_CALL(*mock_cloud_delegate_, UploadBrowserPublicKey(_, _)) - .WillOnce(Invoke( + .WillOnce( [response_code, result, this]( const enterprise_management::DeviceManagementRequest& request, base::OnceCallback<void(policy::DMServerJobResult)> callback) { this->PostUploadSetup(response_code); std::move(callback).Run(result); - })); + }); } else { EXPECT_CALL( *mock_network_delegate_, SendPublicKeyToDmServer(GURL(kFakeDmServerUrl), kFakeDMToken, _, _)) - .WillOnce( - Invoke([response_code, this]( - const GURL& url, const std::string& dm_token, - const std::string& body, - base::OnceCallback<void(HttpResponseCode)> callback) { - this->PostUploadSetup(response_code); - std::move(callback).Run(response_code); - })); + .WillOnce([response_code, this]( + const GURL& url, const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(HttpResponseCode)> callback) { + this->PostUploadSetup(response_code); + std::move(callback).Run(response_code); + }); } } @@ -258,8 +256,9 @@ EXPECT_CALL(*mock_secure_enclave_client_, VerifySecureEnclaveSupported()) .WillOnce(Return(true)); CheckForPermission(); - EXPECT_CALL(*mock_persistence_delegate_, CreateKeyPair()) - .WillOnce(Invoke([]() { return nullptr; })); + EXPECT_CALL(*mock_persistence_delegate_, CreateKeyPair()).WillOnce([]() { + return nullptr; + }); SetUpDmToken(); base::test::TestFuture<KeyRotationCommand::Status> future; @@ -430,12 +429,12 @@ if (is_key_uploaded_by_shared_api()) { base::OnceCallback<void(policy::DMServerJobResult)> captured_callback; EXPECT_CALL(*mock_cloud_delegate_, UploadBrowserPublicKey(_, _)) - .WillOnce(Invoke( + .WillOnce( [&captured_callback]( const enterprise_management::DeviceManagementRequest& request, base::OnceCallback<void(policy::DMServerJobResult)> callback) { captured_callback = std::move(callback); - })); + }); base::test::TestFuture<KeyRotationCommand::Status> future; rotation_command_->Trigger(params_, future.GetCallback()); @@ -452,12 +451,12 @@ EXPECT_CALL( *mock_network_delegate_, SendPublicKeyToDmServer(GURL(kFakeDmServerUrl), kFakeDMToken, _, _)) - .WillOnce(Invoke( - [&captured_callback](const GURL& url, const std::string& dm_token, - const std::string& body, - base::OnceCallback<void(int)> callback) { - captured_callback = std::move(callback); - })); + .WillOnce([&captured_callback](const GURL& url, + const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(int)> callback) { + captured_callback = std::move(callback); + }); base::test::TestFuture<KeyRotationCommand::Status> future; rotation_command_->Trigger(params_, future.GetCallback()); @@ -489,12 +488,12 @@ if (is_key_uploaded_by_shared_api()) { base::OnceCallback<void(policy::DMServerJobResult)> captured_callback; EXPECT_CALL(*mock_cloud_delegate_, UploadBrowserPublicKey(_, _)) - .WillOnce(Invoke( + .WillOnce( [&captured_callback]( const enterprise_management::DeviceManagementRequest& request, base::OnceCallback<void(policy::DMServerJobResult)> callback) { captured_callback = std::move(callback); - })); + }); base::test::TestFuture<KeyRotationCommand::Status> future; rotation_command_->Trigger(params_, future.GetCallback()); @@ -513,12 +512,12 @@ EXPECT_CALL( *mock_network_delegate_, SendPublicKeyToDmServer(GURL(kFakeDmServerUrl), kFakeDMToken, _, _)) - .WillOnce(Invoke( - [&captured_callback](const GURL& url, const std::string& dm_token, - const std::string& body, - base::OnceCallback<void(int)> callback) { - captured_callback = std::move(callback); - })); + .WillOnce([&captured_callback](const GURL& url, + const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(int)> callback) { + captured_callback = std::move(callback); + }); base::test::TestFuture<KeyRotationCommand::Status> future; rotation_command_->Trigger(params_, future.GetCallback());
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl_unittest.cc index e0dbfa1..2e6e3373 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl_unittest.cc
@@ -29,7 +29,6 @@ #include "testing/gtest/include/gtest/gtest.h" using testing::_; -using testing::Invoke; using testing::Return; using testing::StrictMock; @@ -82,30 +81,29 @@ void SetUpKeyLoadAndSyncWithSideEffect(base::RepeatingClosure& side_effect) { EXPECT_CALL(*mock_loader_, LoadKey(_)) .WillRepeatedly( - Invoke([side_effect, this](KeyLoader::LoadKeyCallback callback) { + [side_effect, this](KeyLoader::LoadKeyCallback callback) { side_effect.Run(); std::move(callback).Run( DTCLoadKeyResult(kSuccessUploadCode, test_key_pair_)); - })); + }); } void SetUpKeyLoadAndSyncWithSideEffect( const DTCLoadKeyResult& load_key_result, base::RepeatingClosure& side_effect) { EXPECT_CALL(*mock_loader_, LoadKey(_)) - .WillRepeatedly(Invoke([side_effect, load_key_result]( - KeyLoader::LoadKeyCallback callback) { + .WillRepeatedly([side_effect, + load_key_result](KeyLoader::LoadKeyCallback callback) { side_effect.Run(); std::move(callback).Run(load_key_result); - })); + }); } void SetUpKeyLoadAndSync(const DTCLoadKeyResult& load_key_result) { EXPECT_CALL(*mock_loader_, LoadKey(_)) - .WillRepeatedly( - Invoke([load_key_result](KeyLoader::LoadKeyCallback callback) { - std::move(callback).Run(load_key_result); - })); + .WillRepeatedly([load_key_result](KeyLoader::LoadKeyCallback callback) { + std::move(callback).Run(load_key_result); + }); } void RunUntilIdle() { task_environment_.RunUntilIdle(); } @@ -233,11 +231,11 @@ base::RunLoop create_key_loop; KeyRotationCommand::Callback key_rotation_callback; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { key_rotation_callback = std::move(callback); create_key_loop.Quit(); - })); + }); key_manager()->StartInitialization(); @@ -279,11 +277,11 @@ base::RunLoop create_key_loop; KeyRotationCommand::Callback key_rotation_callback; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { key_rotation_callback = std::move(callback); create_key_loop.Quit(); - })); + }); key_manager()->StartInitialization(); @@ -324,11 +322,11 @@ KeyRotationCommand::Callback key_rotation_callback; base::RunLoop create_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { key_rotation_callback = std::move(callback); create_key_loop.Quit(); - })); + }); key_manager()->StartInitialization(); @@ -392,9 +390,9 @@ if (test_case.triggers_creation) { SetUpKeyLoadAndSync(load_key_result); EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, - KeyRotationCommand::Callback callback) { run_loop.Quit(); })); + KeyRotationCommand::Callback callback) { run_loop.Quit(); }); } else { base::RepeatingClosure side_effect = base::BindLambdaForTesting([&run_loop, this]() { @@ -432,11 +430,11 @@ KeyRotationCommand::Callback failed_rotation_callback; base::RunLoop create_key_fail_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { failed_rotation_callback = std::move(callback); create_key_fail_loop.Quit(); - })); + }); key_manager()->StartInitialization(); @@ -453,11 +451,11 @@ KeyRotationCommand::Callback success_rotation_callback; base::RunLoop create_key_success_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { success_rotation_callback = std::move(callback); create_key_success_loop.Quit(); - })); + }); // Should not be treated as a permanent failure. EXPECT_FALSE(key_manager()->HasPermanentFailure()); @@ -514,11 +512,11 @@ KeyRotationCommand::Callback key_rotation_callback; base::RunLoop create_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { key_rotation_callback = std::move(callback); create_key_loop.Quit(); - })); + }); key_manager()->StartInitialization(); @@ -588,11 +586,11 @@ KeyRotationCommand::Callback rotation_callback; base::RunLoop rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { rotation_callback = std::move(callback); rotate_key_loop.Quit(); - })); + }); std::optional<KeyRotationResult> captured_result; auto completion_callback = @@ -628,11 +626,11 @@ KeyRotationCommand::Callback rotation_callback; base::RunLoop rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { rotation_callback = std::move(callback); rotate_key_loop.Quit(); - })); + }); std::optional<KeyRotationResult> captured_result; auto completion_callback = @@ -669,11 +667,11 @@ KeyRotationCommand::Callback rotation_callback; base::RunLoop rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { rotation_callback = std::move(callback); rotate_key_loop.Quit(); - })); + }); std::optional<KeyRotationResult> captured_result; auto completion_callback = @@ -714,11 +712,11 @@ KeyRotationCommand::Callback rotation_callback; base::RunLoop rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { rotation_callback = std::move(callback); rotate_key_loop.Quit(); - })); + }); std::optional<KeyRotationResult> captured_result; auto completion_callback = @@ -756,11 +754,11 @@ KeyRotationCommand::Callback first_rotation_callback; base::RunLoop first_rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { first_rotation_callback = std::move(callback); first_rotate_key_loop.Quit(); - })); + }); // Create callback parameters for all calls. std::optional<KeyRotationResult> first_captured_result; @@ -791,11 +789,11 @@ KeyRotationCommand::Callback second_rotation_callback; base::RunLoop second_rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kOtherFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { second_rotation_callback = std::move(callback); second_rotate_key_loop.Quit(); - })); + }); // Make the key rotation return a successful status. ASSERT_FALSE(first_rotation_callback.is_null()); @@ -866,11 +864,11 @@ KeyRotationCommand::Callback first_rotation_callback; base::RunLoop first_rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke([&](const std::string& nonce, - KeyRotationCommand::Callback callback) { + .WillOnce([&](const std::string& nonce, + KeyRotationCommand::Callback callback) { first_rotation_callback = std::move(callback); first_rotate_key_loop.Quit(); - })); + }); // Create callback parameters for all calls. std::optional<KeyRotationResult> first_captured_result; @@ -894,11 +892,11 @@ KeyRotationCommand::Callback second_rotation_callback; base::RunLoop second_rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kOtherFakeNonce, _)) - .WillOnce(Invoke([&](const std::string& nonce, - KeyRotationCommand::Callback callback) { + .WillOnce([&](const std::string& nonce, + KeyRotationCommand::Callback callback) { second_rotation_callback = std::move(callback); second_rotate_key_loop.Quit(); - })); + }); // Make the key rotation return a successful status. ASSERT_FALSE(first_rotation_callback.is_null()); @@ -940,11 +938,11 @@ KeyRotationCommand::Callback rotation_callback; base::RunLoop rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { rotation_callback = std::move(callback); rotate_key_loop.Quit(); - })); + }); // Binding the rotate request to the main thread, as the sequence checker will // be expecting that. @@ -991,11 +989,11 @@ KeyRotationCommand::Callback rotation_callback; base::RunLoop rotate_key_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(kFakeNonce, _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { rotation_callback = std::move(callback); rotate_key_loop.Quit(); - })); + }); // Binding the rotate request to the main thread, as the sequence checker will // be expecting that. @@ -1066,11 +1064,11 @@ KeyRotationCommand::Callback failed_rotation_callback; base::RunLoop create_key_fail_loop; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke([&](const std::string& nonce, - KeyRotationCommand::Callback callback) { + .WillOnce([&](const std::string& nonce, + KeyRotationCommand::Callback callback) { failed_rotation_callback = std::move(callback); create_key_fail_loop.Quit(); - })); + }); key_manager()->StartInitialization(); @@ -1122,11 +1120,11 @@ base::RunLoop create_key_loop; KeyRotationCommand::Callback key_creation_callback; EXPECT_CALL(*mock_launcher(), LaunchKeyRotation(std::string(), _)) - .WillOnce(Invoke( + .WillOnce( [&](const std::string& nonce, KeyRotationCommand::Callback callback) { key_creation_callback = std::move(callback); create_key_loop.Quit(); - })); + }); key_manager()->StartInitialization();
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_loader_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_loader_unittest.cc index 7e326a2..288ba32 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_loader_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_loader_unittest.cc
@@ -38,7 +38,6 @@ using test::MockKeyPersistenceDelegate; using testing::_; -using testing::Invoke; using testing::Return; using testing::StrictMock; @@ -86,15 +85,15 @@ std::make_unique<StrictMock<MockKeyPersistenceDelegate>>(); EXPECT_CALL(*mock_persistence_delegate, LoadKeyPair(KeyStorageType::kPermanent, _)) - .WillOnce(Invoke([this, has_key](KeyStorageType key_type, - LoadPersistedKeyResult* result) { + .WillOnce([this, has_key](KeyStorageType key_type, + LoadPersistedKeyResult* result) { if (has_key) { *result = LoadPersistedKeyResult::kSuccess; return test_key_pair_; } *result = LoadPersistedKeyResult::kNotFound; return scoped_refptr<SigningKeyPair>(nullptr); - })); + }); persistence_delegate_factory_.set_next_instance( std::move(mock_persistence_delegate)); } @@ -103,12 +102,12 @@ policy::DMServerJobResult result; result.response_code = response_code; EXPECT_CALL(*mock_management_delegate_, UploadBrowserPublicKey(_, _)) - .WillOnce(Invoke( + .WillOnce( [&, result]( const enterprise_management::DeviceManagementRequest& request, base::OnceCallback<void(policy::DMServerJobResult)> callback) { std::move(callback).Run(result); - })); + }); } void RunAndValidateLoadKey(DTCLoadKeyResult expected_result) {
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_rotation_launcher_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_rotation_launcher_unittest.cc index e68ce3f..29274df4 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_rotation_launcher_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_rotation_launcher_unittest.cc
@@ -85,12 +85,11 @@ std::optional<KeyRotationCommand::Params> params; EXPECT_CALL(*mock_command_, Trigger(testing::_, testing::_)) - .WillOnce(testing::Invoke( - [¶ms](const KeyRotationCommand::Params given_params, - KeyRotationCommand::Callback callback) { - params = given_params; - std::move(callback).Run(KeyRotationCommand::Status::SUCCEEDED); - })); + .WillOnce([¶ms](const KeyRotationCommand::Params given_params, + KeyRotationCommand::Callback callback) { + params = given_params; + std::move(callback).Run(KeyRotationCommand::Status::SUCCEEDED); + }); launcher_->LaunchKeyRotation(kNonce, base::DoNothing());
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/persistence/scoped_key_persistence_delegate_factory.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/core/persistence/scoped_key_persistence_delegate_factory.cc index 19ff8f5..86093591 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/core/persistence/scoped_key_persistence_delegate_factory.cc +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/persistence/scoped_key_persistence_delegate_factory.cc
@@ -63,7 +63,7 @@ auto mocked_delegate = std::make_unique<MockKeyPersistenceDelegate>(); ON_CALL(*mocked_delegate.get(), LoadKeyPair) - .WillByDefault(testing::Invoke( + .WillByDefault( [&side_effect](KeyStorageType type, LoadPersistedKeyResult* result) { side_effect.Run(); if (result) { @@ -71,12 +71,11 @@ } return base::MakeRefCounted<SigningKeyPair>( GenerateHardwareSigningKey(), BPKUR::CHROME_BROWSER_HW_KEY); - })); - ON_CALL(*mocked_delegate.get(), CreateKeyPair) - .WillByDefault(testing::Invoke([]() { - return base::MakeRefCounted<SigningKeyPair>( - GenerateHardwareSigningKey(), BPKUR::CHROME_BROWSER_HW_KEY); - })); + }); + ON_CALL(*mocked_delegate.get(), CreateKeyPair).WillByDefault([]() { + return base::MakeRefCounted<SigningKeyPair>(GenerateHardwareSigningKey(), + BPKUR::CHROME_BROWSER_HW_KEY); + }); return mocked_delegate; } @@ -88,19 +87,17 @@ auto mocked_delegate = std::make_unique<MockKeyPersistenceDelegate>(); ON_CALL(*mocked_delegate.get(), LoadKeyPair) - .WillByDefault(testing::Invoke([](KeyStorageType type, - LoadPersistedKeyResult* result) { + .WillByDefault([](KeyStorageType type, LoadPersistedKeyResult* result) { if (result) { *result = LoadPersistedKeyResult::kSuccess; } return base::MakeRefCounted<SigningKeyPair>( GenerateECSigningKey(), BPKUR::CHROME_BROWSER_OS_KEY); - })); - ON_CALL(*mocked_delegate.get(), CreateKeyPair) - .WillByDefault(testing::Invoke([]() { - return base::MakeRefCounted<SigningKeyPair>( - GenerateECSigningKey(), BPKUR::CHROME_BROWSER_OS_KEY); - })); + }); + ON_CALL(*mocked_delegate.get(), CreateKeyPair).WillByDefault([]() { + return base::MakeRefCounted<SigningKeyPair>(GenerateECSigningKey(), + BPKUR::CHROME_BROWSER_OS_KEY); + }); return mocked_delegate; }
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/key_rotation_manager_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/key_rotation_manager_unittest.cc index 825c998d..25445c53 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/key_rotation_manager_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/key_rotation_manager_unittest.cc
@@ -34,7 +34,6 @@ using testing::ByMove; using testing::ElementsAre; using testing::InSequence; -using testing::Invoke; using testing::Not; using testing::Pair; using testing::Return; @@ -120,13 +119,13 @@ void SetUploadCode(HttpResponseCode response_code) { EXPECT_CALL(*mock_network_delegate_, SendPublicKeyToDmServer(GURL(kDmServerUrl), kDmToken, _, _)) - .WillOnce(Invoke( - [&, response_code](const GURL& url, const std::string& dm_token, - const std::string& body, - base::OnceCallback<void(int)> callback) { - captured_upload_body_ = body; - std::move(callback).Run(response_code); - })); + .WillOnce([&, response_code](const GURL& url, + const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(int)> callback) { + captured_upload_body_ = body; + std::move(callback).Run(response_code); + }); } void SetUpOldKey(bool exists = true) { @@ -140,7 +139,7 @@ old_key_pair_.reset(); EXPECT_CALL(*mock_persistence_delegate_, LoadKeyPair(KeyStorageType::kPermanent, _)) - .WillOnce(Invoke([]() { return nullptr; })); + .WillOnce([]() { return nullptr; }); } } @@ -156,8 +155,9 @@ EXPECT_CALL(*mock_persistence_delegate_, CreateKeyPair()) .WillOnce(Return(new_key_pair_)); } else { - EXPECT_CALL(*mock_persistence_delegate_, CreateKeyPair()) - .WillOnce(Invoke([]() { return nullptr; })); + EXPECT_CALL(*mock_persistence_delegate_, CreateKeyPair()).WillOnce([]() { + return nullptr; + }); } }
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util_unittest.cc index 23509e3..9e562d2 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util_unittest.cc
@@ -33,7 +33,6 @@ enterprise_connectors::test::MockKeyNetworkDelegate::HttpResponseCode; using testing::_; -using testing::Invoke; using testing::Return; namespace { @@ -109,11 +108,11 @@ EXPECT_CALL( *mock_network_delegate_, SendPublicKeyToDmServer(GURL(kFakeDmServerUrl), kFakeDMToken, _, _)) - .WillOnce(Invoke([](const GURL& url, const std::string& dm_token, - const std::string& body, - base::OnceCallback<void(int)> callback) { + .WillOnce([](const GURL& url, const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(int)> callback) { std::move(callback).Run(kSuccessCode); - })); + }); EXPECT_EQ( RotateDeviceTrustKey( @@ -264,11 +263,11 @@ EXPECT_CALL( *mock_network_delegate_, SendPublicKeyToDmServer(GURL(kFakeDmServerUrl), kFakeDMToken, _, _)) - .WillOnce(Invoke([](const GURL& url, const std::string& dm_token, - const std::string& body, - base::OnceCallback<void(int)> callback) { + .WillOnce([](const GURL& url, const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(int)> callback) { std::move(callback).Run(kFailureCode); - })); + }); EXPECT_EQ( RotateDeviceTrustKey( @@ -296,11 +295,11 @@ EXPECT_CALL( *mock_network_delegate_, SendPublicKeyToDmServer(GURL(kFakeDmServerUrl), kFakeDMToken, _, _)) - .WillOnce(Invoke([](const GURL& url, const std::string& dm_token, - const std::string& body, - base::OnceCallback<void(int)> callback) { + .WillOnce([](const GURL& url, const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(int)> callback) { std::move(callback).Run(kConflictCode); - })); + }); EXPECT_EQ( RotateDeviceTrustKey(
diff --git a/chrome/browser/enterprise/connectors/device_trust/navigation_throttle_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/navigation_throttle_unittest.cc index 865e922..ea895e2 100644 --- a/chrome/browser/enterprise/connectors/device_trust/navigation_throttle_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/navigation_throttle_unittest.cc
@@ -43,7 +43,6 @@ using content::NavigationThrottle; using ::testing::_; -using ::testing::Invoke; using ::testing::Return; namespace enterprise_connectors { @@ -140,8 +139,8 @@ std::make_unique<FakeDeviceTrustConnectorService>(test_prefs_); ON_CALL(mock_device_trust_service_, Watches(_)) - .WillByDefault(Invoke( - [this](const GURL& url) { return fake_connector_->Watches(url); })); + .WillByDefault( + [this](const GURL& url) { return fake_connector_->Watches(url); }); } void CreateAndSetMockConsentRequester() {
diff --git a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/browser/browser_signals_decorator_unittest.cc b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/browser/browser_signals_decorator_unittest.cc index 92930b9..66b0a16 100644 --- a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/browser/browser_signals_decorator_unittest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/browser/browser_signals_decorator_unittest.cc
@@ -35,7 +35,6 @@ #endif using testing::_; -using testing::Invoke; using testing::Return; using testing::StrictMock; @@ -202,12 +201,12 @@ void SetUpAggregatorExpectations() { EXPECT_CALL(mock_aggregator_, GetSignals(CreateExpectedRequest(), _)) - .WillOnce(Invoke( + .WillOnce( [this](const device_signals::SignalsAggregationRequest& request, base::OnceCallback<void( device_signals::SignalsAggregationResponse)> callback) { std::move(callback).Run(CreateFilledResponse()); - })); + }); } virtual device_signals::SignalsAggregationResponse CreateFilledResponse() { @@ -362,13 +361,12 @@ SetFakeUserPolicyData(); EXPECT_CALL(mock_aggregator_, GetSignals(CreateExpectedRequest(), _)) - .WillOnce( - Invoke([](const device_signals::SignalsAggregationRequest& request, - base::OnceCallback<void( - device_signals::SignalsAggregationResponse)> callback) { - device_signals::SignalsAggregationResponse empty_response; - std::move(callback).Run(std::move(empty_response)); - })); + .WillOnce([](const device_signals::SignalsAggregationRequest& request, + base::OnceCallback<void( + device_signals::SignalsAggregationResponse)> callback) { + device_signals::SignalsAggregationResponse empty_response; + std::move(callback).Run(std::move(empty_response)); + }); auto decorator = CreateDecorator(); base::RunLoop run_loop;
diff --git a/chrome/browser/enterprise/connectors/device_trust/test/device_trust_test_environment_win.cc b/chrome/browser/enterprise/connectors/device_trust/test/device_trust_test_environment_win.cc index d707e69..fc7f468b 100644 --- a/chrome/browser/enterprise/connectors/device_trust/test/device_trust_test_environment_win.cc +++ b/chrome/browser/enterprise/connectors/device_trust/test/device_trust_test_environment_win.cc
@@ -28,7 +28,6 @@ #include "testing/gmock/include/gmock/gmock.h" using testing::_; -using testing::Invoke; using testing::StrictMock; using BPKUR = enterprise_management::BrowserPublicKeyUploadRequest; @@ -55,18 +54,18 @@ auto mock_network_delegate = std::make_unique<StrictMock<MockKeyNetworkDelegate>>(); EXPECT_CALL(*mock_network_delegate, SendPublicKeyToDmServer(_, _, _, _)) - .WillOnce(Invoke( - [upload_response_code, expected_dm_token, expected_client_id, args]( - const GURL& url, const std::string& dm_token, - const std::string& body, base::OnceCallback<void(int)> callback) { - // Check if the DM Server URL contains the correct Client ID - CHECK(url.spec().find(expected_client_id) != std::string::npos); - // Check if the correct DM Token is being uploaded - CHECK_EQ(dm_token, expected_dm_token); - // TODO(b/269746642): add a check for the 'body' parameter above + .WillOnce([upload_response_code, expected_dm_token, expected_client_id, + args](const GURL& url, const std::string& dm_token, + const std::string& body, + base::OnceCallback<void(int)> callback) { + // Check if the DM Server URL contains the correct Client ID + CHECK(url.spec().find(expected_client_id) != std::string::npos); + // Check if the correct DM Token is being uploaded + CHECK_EQ(dm_token, expected_dm_token); + // TODO(b/269746642): add a check for the 'body' parameter above - std::move(callback).Run(upload_response_code); - })); + std::move(callback).Run(upload_response_code); + }); const auto result = enterprise_connectors::RotateDeviceTrustKey( enterprise_connectors::KeyRotationManager::Create( std::move(mock_network_delegate)),
diff --git a/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_unittest.cc b/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_unittest.cc index 26772f1..4259615 100644 --- a/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_unittest.cc +++ b/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_unittest.cc
@@ -247,12 +247,11 @@ base::RunLoop run_loop; EXPECT_CALL(*client_.get(), UploadSecurityEventReport(_, _, _)) - .WillOnce(testing::Invoke( - [&](bool include_device_info, base::Value::Dict&& report, - policy::CloudPolicyClient::ResultCallback callback) { - upload_callback_ = std::move(callback); - run_loop.Quit(); - })); + .WillOnce([&](bool include_device_info, base::Value::Dict&& report, + policy::CloudPolicyClient::ResultCallback callback) { + upload_callback_ = std::move(callback); + run_loop.Quit(); + }); reporting_client_->ReportRealtimeEvent(kExtensionInstallEvent, std::move(settings), std::move(event)); run_loop.Run(); @@ -298,13 +297,13 @@ base::RunLoop run_loop; EXPECT_CALL(*client_.get(), UploadSecurityEvent(_, _, _)) - .WillOnce(testing::Invoke( + .WillOnce( [&](bool include_device_info, ::chrome::cros::reporting::proto::UploadEventsRequest&& request, policy::CloudPolicyClient::ResultCallback callback) { upload_callback_ = std::move(callback); run_loop.Quit(); - })); + }); reporting_client_->ReportEvent(std::move(extension_install_event), std::move(settings)); run_loop.Run(); @@ -337,12 +336,11 @@ base::RunLoop run_loop; EXPECT_CALL(*client_.get(), UploadSecurityEventReport(_, _, _)) - .WillOnce(testing::Invoke( - [&](bool include_device_info, base::Value::Dict&& report, - policy::CloudPolicyClient::ResultCallback callback) { - upload_callback_ = std::move(callback); - run_loop.Quit(); - })); + .WillOnce([&](bool include_device_info, base::Value::Dict&& report, + policy::CloudPolicyClient::ResultCallback callback) { + upload_callback_ = std::move(callback); + run_loop.Quit(); + }); reporting_client_->ReportRealtimeEvent(kExtensionInstallEvent, std::move(settings), std::move(event)); run_loop.Run(); @@ -388,13 +386,13 @@ base::RunLoop run_loop; EXPECT_CALL(*client_.get(), UploadSecurityEvent(_, _, _)) - .WillOnce(testing::Invoke( + .WillOnce( [&](bool include_device_info, ::chrome::cros::reporting::proto::UploadEventsRequest&& request, policy::CloudPolicyClient::ResultCallback callback) { upload_callback_ = std::move(callback); run_loop.Quit(); - })); + }); reporting_client_->ReportEvent(std::move(extension_install_event), std::move(settings)); run_loop.Run();
diff --git a/chrome/browser/enterprise/data_protection/data_protection_clipboard_utils_unittest.cc b/chrome/browser/enterprise/data_protection/data_protection_clipboard_utils_unittest.cc index 1979eed..93af361 100644 --- a/chrome/browser/enterprise/data_protection/data_protection_clipboard_utils_unittest.cc +++ b/chrome/browser/enterprise/data_protection/data_protection_clipboard_utils_unittest.cc
@@ -174,14 +174,14 @@ DataTransferPolicyController_Allowed) { PolicyControllerTest policy_controller; EXPECT_CALL(policy_controller, PasteIfAllowed) - .WillOnce(testing::Invoke( + .WillOnce( [](base::optional_ref<const ui::DataTransferEndpoint> data_src, base::optional_ref<const ui::DataTransferEndpoint> data_dst, std::variant<size_t, std::vector<base::FilePath>> pasted_content, content::RenderFrameHost* rfh, base::OnceCallback<void(bool)> callback) { std::move(callback).Run(true); - })); + }); base::test::TestFuture<std::optional<content::ClipboardPasteData>> future; PasteIfAllowedByPolicy( @@ -200,14 +200,14 @@ DataTransferPolicyController_Blocked) { PolicyControllerTest policy_controller; EXPECT_CALL(policy_controller, PasteIfAllowed) - .WillOnce(testing::Invoke( + .WillOnce( [](base::optional_ref<const ui::DataTransferEndpoint> data_src, base::optional_ref<const ui::DataTransferEndpoint> data_dst, std::variant<size_t, std::vector<base::FilePath>> pasted_content, content::RenderFrameHost* rfh, base::OnceCallback<void(bool)> callback) { std::move(callback).Run(false); - })); + }); base::test::TestFuture<std::optional<content::ClipboardPasteData>> future; PasteIfAllowedByPolicy(
diff --git a/chrome/browser/enterprise/platform_auth/platform_auth_navigation_throttle_unittest.cc b/chrome/browser/enterprise/platform_auth/platform_auth_navigation_throttle_unittest.cc index 2edd0fb..bb6c12b 100644 --- a/chrome/browser/enterprise/platform_auth/platform_auth_navigation_throttle_unittest.cc +++ b/chrome/browser/enterprise/platform_auth/platform_auth_navigation_throttle_unittest.cc
@@ -39,7 +39,6 @@ using content::NavigationThrottle; using ::testing::_; -using ::testing::Invoke; using ::testing::Return; namespace {
diff --git a/chrome/browser/enterprise/remote_commands/rotate_attestation_credential_job_unittest.cc b/chrome/browser/enterprise/remote_commands/rotate_attestation_credential_job_unittest.cc index e1bece7..36ae554f 100644 --- a/chrome/browser/enterprise/remote_commands/rotate_attestation_credential_job_unittest.cc +++ b/chrome/browser/enterprise/remote_commands/rotate_attestation_credential_job_unittest.cc
@@ -22,7 +22,6 @@ enterprise_connectors::DeviceTrustKeyManager::KeyRotationResult; using testing::_; -using testing::Invoke; namespace enterprise_commands { @@ -69,11 +68,11 @@ void MockKeyRotationWith(KeyRotationResult result) { EXPECT_CALL(mock_key_manager_, RotateKey(kNonceValue, _)) - .WillOnce(Invoke( + .WillOnce( [result](const std::string& nonce, base::OnceCallback<void(KeyRotationResult)> callback) { std::move(callback).Run(result); - })); + }); } std::unique_ptr<RotateAttestationCredentialJob> CreateJob(
diff --git a/chrome/browser/enterprise/reporting/real_time_report_controller_unittest.cc b/chrome/browser/enterprise/reporting/real_time_report_controller_unittest.cc index 8445456..5c3ac23 100644 --- a/chrome/browser/enterprise/reporting/real_time_report_controller_unittest.cc +++ b/chrome/browser/enterprise/reporting/real_time_report_controller_unittest.cc
@@ -32,7 +32,6 @@ using ::testing::_; using ::testing::ByMove; using ::testing::DoAll; -using ::testing::Invoke; using ::testing::Return; using ::testing::WithArgs; @@ -104,12 +103,12 @@ Generate(RealTimeReportType::kExtensionRequest, _)) .WillOnce(DoAll( WithArgs<1>( - Invoke([profile](const MockRealTimeReportGenerator::Data& data) { + [profile](const MockRealTimeReportGenerator::Data& data) { EXPECT_EQ(profile, static_cast<const ExtensionRequestReportGenerator:: ExtensionRequestData&>(data) .profile); - })), + }), Return(ByMove(std::move(reports))))); EXPECT_CALL(*report_uploader, Upload(_, _)).Times(2); @@ -139,13 +138,13 @@ EXPECT_CALL(*report_generator.get(), Generate(RealTimeReportType::kLegacyTech, _)) .WillOnce(DoAll( - WithArgs<1>(Invoke([](const MockRealTimeReportGenerator::Data& data) { + WithArgs<1>([](const MockRealTimeReportGenerator::Data& data) { EXPECT_EQ( kLegacyTechType, static_cast<const LegacyTechReportGenerator::LegacyTechData&>( data) .type); - })), + }), Return(ByMove(std::move(reports))))); EXPECT_CALL(*report_uploader, Upload(_, _)).Times(1);
diff --git a/chrome/browser/enterprise/signin/oidc_authentication_signin_interceptor_unittest.cc b/chrome/browser/enterprise/signin/oidc_authentication_signin_interceptor_unittest.cc index 1d04d67f..6b33a20 100644 --- a/chrome/browser/enterprise/signin/oidc_authentication_signin_interceptor_unittest.cc +++ b/chrome/browser/enterprise/signin/oidc_authentication_signin_interceptor_unittest.cc
@@ -57,7 +57,6 @@ #include "url/gurl.h" using testing::_; -using testing::Invoke; using testing::Return; using policy::MockCloudPolicyClient; @@ -469,41 +468,41 @@ *mock_client_ptr, RegisterWithOidcResponse(_, kExampleOidcTokens.auth_token, kExampleOidcTokens.id_token, _, _, _, _)) - .WillOnce(Invoke([&](const RegistrationParameters&, - const std::string&, const std::string&, - const std::string&, const base::TimeDelta&, bool, - CloudPolicyClient::ResultCallback callback) { + .WillOnce([&](const RegistrationParameters&, const std::string&, + const std::string&, const std::string&, + const base::TimeDelta&, bool, + CloudPolicyClient::ResultCallback callback) { mock_client_ptr->SetStatus(policy::DM_STATUS_TEMPORARY_UNAVAILABLE); mock_client_ptr->NotifyClientError(); std::move(callback).Run(CloudPolicyClient::Result( policy::DM_STATUS_TEMPORARY_UNAVAILABLE, /*net_error=*/1)); register_run_loop.Quit(); - })); + }); } else if (expect_registration_attempt == RegistrationResult::kTimeout) { EXPECT_CALL( *mock_client_ptr, RegisterWithOidcResponse(_, kExampleOidcTokens.auth_token, kExampleOidcTokens.id_token, _, _, _, _)) - .WillOnce(Invoke([&](const RegistrationParameters&, - const std::string&, const std::string&, - const std::string&, const base::TimeDelta&, bool, - CloudPolicyClient::ResultCallback callback) { + .WillOnce([&](const RegistrationParameters&, const std::string&, + const std::string&, const std::string&, + const base::TimeDelta&, bool, + CloudPolicyClient::ResultCallback callback) { mock_client_ptr->SetStatus(policy::DM_STATUS_TEMPORARY_UNAVAILABLE); mock_client_ptr->NotifyClientError(); std::move(callback).Run(CloudPolicyClient::Result( policy::DM_STATUS_TEMPORARY_UNAVAILABLE, /*net_error=*/net::ERR_TIMED_OUT)); register_run_loop.Quit(); - })); + }); } else if (expect_registration_attempt == RegistrationResult::kSuccess) { EXPECT_CALL( *mock_client_ptr, RegisterWithOidcResponse(_, kExampleOidcTokens.auth_token, kExampleOidcTokens.id_token, _, _, _, _)) - .WillOnce(Invoke([&](const RegistrationParameters&, - const std::string&, const std::string&, - const std::string&, const base::TimeDelta&, bool, - CloudPolicyClient::ResultCallback callback) { + .WillOnce([&](const RegistrationParameters&, const std::string&, + const std::string&, const std::string&, + const base::TimeDelta&, bool, + CloudPolicyClient::ResultCallback callback) { mock_client_ptr->SetDMToken(kExampleDmToken); mock_client_ptr->SetStatus(policy::DM_STATUS_SUCCESS); mock_client_ptr->client_id_ = kExampleClientId; @@ -518,7 +517,7 @@ std::move(callback).Run(CloudPolicyClient::Result( policy::DM_STATUS_SUCCESS, /*net_error=*/0)); register_run_loop.Quit(); - })); + }); } interceptor_->SetCloudPolicyClientForTesting(std::move(mock_client)); @@ -549,17 +548,17 @@ OidcProfileCreationResult::kSwitchedToExistingProfile) { EXPECT_CALL(*delegate_, ShowSigninInterceptionBubble(_, _, _)) .Times(1) - .WillRepeatedly(Invoke( + .WillRepeatedly( [](content::WebContents*, const WebSigninInterceptor::Delegate::BubbleParameters&, base::OnceCallback<void(SigninInterceptionResult)> callback) { std::move(callback).Run(SigninInterceptionResult::kAccepted); return nullptr; - })); + }); } else if (expect_dialog_to_show) { EXPECT_CALL(*delegate_, ShowOidcInterceptionDialog(_, _, _, _, _)) .Times(1) - .WillRepeatedly(Invoke( + .WillRepeatedly( [&](content::WebContents*, const WebSigninInterceptor::Delegate::BubbleParameters&, signin::SigninChoiceWithConfirmAndRetryCallback callback, @@ -569,7 +568,7 @@ expected_operation_result); fake_bubble_handle_ = fake_bubble_handle->AsWeakPtr(); return fake_bubble_handle; - })); + }); } else { EXPECT_CALL(*delegate_, ShowOidcInterceptionDialog(_, _, _, _, _)) .Times(0);
diff --git a/chrome/browser/enterprise/signin/profile_token_web_signin_interceptor_unittest.cc b/chrome/browser/enterprise/signin/profile_token_web_signin_interceptor_unittest.cc index 9dec7dc..cfb9add2 100644 --- a/chrome/browser/enterprise/signin/profile_token_web_signin_interceptor_unittest.cc +++ b/chrome/browser/enterprise/signin/profile_token_web_signin_interceptor_unittest.cc
@@ -23,7 +23,6 @@ #include "url/gurl.h" using testing::_; -using testing::Invoke; using testing::WithArgs; namespace { @@ -158,13 +157,13 @@ EXPECT_CALL(*delegate_, ShowSigninInterceptionBubble( _, MatchBubbleParameters(expected_parameters), _)) .Times(1) - .WillOnce(Invoke( + .WillOnce( [](content::WebContents*, const WebSigninInterceptor::Delegate::BubbleParameters&, base::OnceCallback<void(SigninInterceptionResult)> callback) { std::move(callback).Run(SigninInterceptionResult::kDeclined); return nullptr; - })); + }); interceptor_->MaybeInterceptSigninProfile(web_contents(), "id", "token"); base::RunLoop().RunUntilIdle(); @@ -195,13 +194,13 @@ EXPECT_CALL(*delegate_, ShowSigninInterceptionBubble( _, MatchBubbleParameters(expected_parameters), _)) .Times(1) - .WillOnce(Invoke( + .WillOnce( [](content::WebContents*, const WebSigninInterceptor::Delegate::BubbleParameters&, base::OnceCallback<void(SigninInterceptionResult)> callback) { std::move(callback).Run(SigninInterceptionResult::kAccepted); return nullptr; - })); + }); interceptor_->MaybeInterceptSigninProfile(web_contents(), "id", "token"); base::RunLoop().RunUntilIdle(); @@ -232,13 +231,13 @@ EXPECT_CALL(*delegate_, ShowSigninInterceptionBubble( _, MatchBubbleParameters(expected_parameters), _)) .Times(1) - .WillOnce(Invoke( + .WillOnce( [](content::WebContents*, const WebSigninInterceptor::Delegate::BubbleParameters&, base::OnceCallback<void(SigninInterceptionResult)> callback) { std::move(callback).Run(SigninInterceptionResult::kAccepted); return nullptr; - })); + }); interceptor_->MaybeInterceptSigninProfile(web_contents(), std::string(), "token"); @@ -269,13 +268,13 @@ EXPECT_CALL(*delegate_, ShowSigninInterceptionBubble( _, MatchBubbleParameters(expected_parameters), _)) .Times(1) - .WillOnce(Invoke( + .WillOnce( [](content::WebContents*, const WebSigninInterceptor::Delegate::BubbleParameters&, base::OnceCallback<void(SigninInterceptionResult)> callback) { std::move(callback).Run(SigninInterceptionResult::kAccepted); return nullptr; - })); + }); const int num_profiles_before = TestingBrowserProcess::GetGlobal() ->profile_manager()
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 8330abc..52c6c57 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -442,6 +442,15 @@ "expiry_milestone": 145 }, { + "name": "android-zoom-indicator", + "owners": [ + "hitarthkothari@google.com", + "ckitagawa@google.com", + "clank-tab-dev@google.com" + ], + "expiry_milestone": 150 + }, + { "name": "animate-suggestions-list-appearance", "owners": [ "pnoland@chromium.org", "chrome-mobile-search@google.com" ], "expiry_milestone": 145
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index e1294c2..a3bc813 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -4867,6 +4867,10 @@ const char kAndroidTipsNotificationsDescription[] = "Enable tips notifications for supported features on Android."; +const char kAndroidZoomIndicatorName[] = "Android Zoom Indicator"; +const char kAndroidZoomIndicatorDescription[] = + "Enable zoom indicator on Android."; + const char kAnimatedImageDragShadowName[] = "Enable animated image drag shadow on Android."; const char kAnimatedImageDragShadowDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 69d676a..936058dd 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2820,6 +2820,9 @@ extern const char kAndroidTipsNotificationsName[]; extern const char kAndroidTipsNotificationsDescription[]; +extern const char kAndroidZoomIndicatorName[]; +extern const char kAndroidZoomIndicatorDescription[]; + extern const char kAppSpecificHistoryName[]; extern const char kAppSpecificHistoryDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index ecf209b1c..e66a728 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -243,6 +243,7 @@ &kAndroidWindowPopupPredictFinalBounds, &kAndroidWindowPopupResizeAfterSpawn, &kAndroidXRUsesSurfaceControl, + &kAndroidZoomIndicator, &kAnimatedGifRefactor, &kAnimatedImageDragShadow, &kAnnotatedPageContentsVirtualStructure, @@ -728,6 +729,10 @@ "AndroidWindowPopupResizeAfterSpawn", base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kAndroidZoomIndicator, + "AndroidZoomIndicator", + base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kAnimatedGifRefactor, "AnimatedGifRefactor", base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h index b2c9c18..4c00f8ce 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -66,6 +66,7 @@ BASE_DECLARE_FEATURE(kAndroidWindowPopupPredictFinalBounds); BASE_DECLARE_FEATURE(kAndroidWindowPopupResizeAfterSpawn); BASE_DECLARE_FEATURE(kAndroidXRUsesSurfaceControl); +BASE_DECLARE_FEATURE(kAndroidZoomIndicator); BASE_DECLARE_FEATURE(kAnimatedGifRefactor); BASE_DECLARE_FEATURE(kAnimatedImageDragShadow); BASE_DECLARE_FEATURE(kAnnotatedPageContentsVirtualStructure);
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index 9d0609c..4d29c91 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -230,6 +230,7 @@ "AndroidWindowPopupResizeAfterSpawn"; public static final String ANDROID_XR_USES_SURFACE_CONTROL = "AndroidWindowPopupResizeAfterSpawn"; + public static final String ANDROID_ZOOM_INDICATOR = "AndroidZoomIndicator"; 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 = @@ -1313,6 +1314,8 @@ newMutableFlagWithSafeDefault(ANDROID_TAB_HIGHLIGHTING, false); public static final MutableFlagWithSafeDefault sAndroidTipsNotifications = newMutableFlagWithSafeDefault(ANDROID_TIPS_NOTIFICATIONS, false); + public static final MutableFlagWithSafeDefault sAndroidZoomIndicator = + newMutableFlagWithSafeDefault(ANDROID_ZOOM_INDICATOR, false); public static final MutableFlagWithSafeDefault sBcivBottomControls = newMutableFlagWithSafeDefault(BCIV_BOTTOM_CONTROLS, true); public static final MutableFlagWithSafeDefault sBrowserControlsEarlyResize = @@ -1628,7 +1631,7 @@ public static final StringCachedFeatureParam sEdgeToEdgeEverywhereOemMinVersions = newStringCachedFeatureParam( - EDGE_TO_EDGE_EVERYWHERE, "e2e_field_trial_oem_min_versions", ""); + EDGE_TO_EDGE_EVERYWHERE, "e2e_field_trial_oem_min_versions", "35"); public static final StringCachedFeatureParam sEdgeToEdgeUseBackupNavbarInsetsOemMinVersions = newStringCachedFeatureParam( @@ -1646,7 +1649,8 @@ 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", ""); + newStringCachedFeatureParam( + EDGE_TO_EDGE_EVERYWHERE, "e2e_field_trial_oem_list", "realme"); public static final StringCachedFeatureParam sEdgeToEdgeUseBackupNavbarInsetsOemList = newStringCachedFeatureParam(
diff --git a/chrome/browser/metrics/BUILD.gn b/chrome/browser/metrics/BUILD.gn index 55d9f9f..1691060 100644 --- a/chrome/browser/metrics/BUILD.gn +++ b/chrome/browser/metrics/BUILD.gn
@@ -19,7 +19,7 @@ "//base", "//chrome/browser", "//chrome/browser/sync", - "//chrome/test:sync_integration_test_support", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//components/metrics_services_manager", "//components/signin/public/identity_manager", "//components/sync:test_support",
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc index 896be61..2bbdcc52 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -60,6 +60,7 @@ #include "chrome/browser/privacy_budget/privacy_budget_ukm_entry_filter.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profiles_state.h" +#include "chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.h" #include "chrome/browser/safe_browsing/metrics/safe_browsing_metrics_provider.h" #include "chrome/browser/sync/device_info_sync_service_factory.h" #include "chrome/browser/sync/sync_service_factory.h" @@ -1009,6 +1010,10 @@ metrics_service_->RegisterMetricsProvider( std::make_unique<glic::GlicMetricsProvider>()); #endif + + metrics_service_->RegisterMetricsProvider( + std::make_unique< + regional_capabilities::RegionalCapabilitiesMetricsProvider>()); } void ChromeMetricsServiceClient::RegisterUKMProviders() {
diff --git a/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc b/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc index f97c689..cee469d 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc
@@ -202,7 +202,7 @@ size_t expected_providers = 2; // This is the number of metrics providers that are outside any #if macros. - expected_providers += 24; + expected_providers += 25; int sample_rate; if (ChromeMetricsServicesManagerClient::GetSamplingRatePerMille(
diff --git a/chrome/browser/metrics/chromeos_family_link_user_metrics_provider.cc b/chrome/browser/metrics/chromeos_family_link_user_metrics_provider.cc index 0bf7f0e..b013a87 100644 --- a/chrome/browser/metrics/chromeos_family_link_user_metrics_provider.cc +++ b/chrome/browser/metrics/chromeos_family_link_user_metrics_provider.cc
@@ -76,8 +76,8 @@ DCHECK(!access_token_fetcher_); access_token_fetcher_ = std::make_unique< signin::PrimaryAccountAccessTokenFetcher>( - /*consumer_name=*/"ChromeOSFamilyLinkUserMetricsProvider", - identity_manager, signin::ScopeSet(), + signin::OAuthConsumerId::kChromeosFamilyLinkUserMetricsProvider, + identity_manager, base::BindOnce( &ChromeOSFamilyLinkUserMetricsProvider::OnAccessTokenRequestCompleted, // It is safe to use base::Unretained as |this| owns
diff --git a/chrome/browser/password_manager/account_password_store_factory.cc b/chrome/browser/password_manager/account_password_store_factory.cc index 2104214..d923429 100644 --- a/chrome/browser/password_manager/account_password_store_factory.cc +++ b/chrome/browser/password_manager/account_password_store_factory.cc
@@ -55,42 +55,6 @@ using password_manager::PasswordForm; using password_manager::PasswordStore; using password_manager::PasswordStoreInterface; -using password_manager::UnsyncedCredentialsDeletionNotifier; - -#if !BUILDFLAG(IS_ANDROID) -// Returns a repeating callback that to show warning UI that credentials are -// about to be deleted. Note that showing the UI is asynchronous, but safe to -// call from any sequence. -UnsyncedCredentialsDeletionNotifier CreateUnsyncedCredentialsDeletionNotifier( - Profile& profile) { - CHECK_CURRENTLY_ON(content::BrowserThread::UI); - // Tries to show warning UI that `credentials` will be deleted. - auto try_to_show_ui = base::BindRepeating( - [](base::WeakPtr<Profile> profile, - std::vector<PasswordForm> credentials) { - if (!profile) { - return; - } - Browser* browser = chrome::FindBrowserWithProfile(profile.get()); - if (!browser) { - return; - } - content::WebContents* web_contents = - browser->tab_strip_model()->GetActiveWebContents(); - if (!web_contents) { - return; - } - if (auto* ui_controller = - ManagePasswordsUIController::FromWebContents(web_contents)) { - ui_controller->NotifyUnsyncedCredentialsWillBeDeleted( - std::move(credentials)); - } - }, - profile.GetWeakPtr()); - return base::BindPostTask(content::GetUIThreadTaskRunner({}), - std::move(try_to_show_ui)); -} -#endif // !BUILDFLAG(IS_ANDROID) scoped_refptr<RefcountedKeyedService> BuildPasswordStore( content::BrowserContext* context) { @@ -114,16 +78,9 @@ g_browser_process->os_crypt_async(); scoped_refptr<password_manager::PasswordStore> ps = -#if BUILDFLAG(IS_ANDROID) new password_manager::PasswordStore(CreateAccountPasswordStoreBackend( profile->GetPath(), profile->GetPrefs(), - /*unsynced_deletions_notifier=*/base::NullCallback(), os_crypt_async)); -#else - new password_manager::PasswordStore(CreateAccountPasswordStoreBackend( - profile->GetPath(), profile->GetPrefs(), - CreateUnsyncedCredentialsDeletionNotifier(*profile), os_crypt_async)); -#endif affiliations::AffiliationService* affiliation_service = AffiliationServiceFactory::GetForProfile(profile);
diff --git a/chrome/browser/password_manager/factories/password_store_backend_factory.cc b/chrome/browser/password_manager/factories/password_store_backend_factory.cc index 78d8951..768d11c 100644 --- a/chrome/browser/password_manager/factories/password_store_backend_factory.cc +++ b/chrome/browser/password_manager/factories/password_store_backend_factory.cc
@@ -152,8 +152,6 @@ std::unique_ptr<PasswordStoreBackend> CreateAccountPasswordStoreBackend( const base::FilePath& login_db_directory, PrefService* prefs, - password_manager::UnsyncedCredentialsDeletionNotifier - unsynced_deletions_notifier, os_crypt_async::OSCryptAsync* os_crypt_async) { std::unique_ptr<password_manager::LoginDatabase> login_db( password_manager::CreateLoginDatabaseForAccountStorage(login_db_directory, @@ -171,8 +169,7 @@ #else backend = std::make_unique<PasswordStoreBuiltInBackend>( std::move(login_db), syncer::WipeModelUponSyncDisabledBehavior::kAlways, - prefs, os_crypt_async, std::move(unsynced_deletions_notifier)); - + prefs, os_crypt_async); #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) base::FilePath user_data_dir;
diff --git a/chrome/browser/password_manager/factories/password_store_backend_factory.h b/chrome/browser/password_manager/factories/password_store_backend_factory.h index 22af915c..f74d390 100644 --- a/chrome/browser/password_manager/factories/password_store_backend_factory.h +++ b/chrome/browser/password_manager/factories/password_store_backend_factory.h
@@ -35,8 +35,6 @@ CreateAccountPasswordStoreBackend( const base::FilePath& login_db_directory, PrefService* prefs, - password_manager::UnsyncedCredentialsDeletionNotifier - unsynced_deletions_notifier, os_crypt_async::OSCryptAsync* os_crypt_async); #endif // CHROME_BROWSER_PASSWORD_MANAGER_FACTORIES_PASSWORD_STORE_BACKEND_FACTORY_H_
diff --git a/chrome/browser/password_manager/password_manager_test_base.cc b/chrome/browser/password_manager/password_manager_test_base.cc index e975f3e..112e659 100644 --- a/chrome/browser/password_manager/password_manager_test_base.cc +++ b/chrome/browser/password_manager/password_manager_test_base.cc
@@ -148,11 +148,6 @@ return false; } -void BubbleObserver::WaitForSaveUnsyncedCredentialsPrompt() const { - WaitForState( - password_manager::ui::WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE); -} - void BubbleObserver::WaitForState( password_manager::ui::State target_state) const { auto IsTargetStateObserved = [this, target_state]() {
diff --git a/chrome/browser/password_manager/password_manager_test_base.h b/chrome/browser/password_manager/password_manager_test_base.h index 9801c7a..d89bbfa9 100644 --- a/chrome/browser/password_manager/password_manager_test_base.h +++ b/chrome/browser/password_manager/password_manager_test_base.h
@@ -96,9 +96,6 @@ // PasswordManagerBrowserTestBase. bool WaitForFallbackForSaving() const; - // Returns once the prompt for saving unsynced credentials pops up. - void WaitForSaveUnsyncedCredentialsPrompt() const; - private: void WaitForState(password_manager::ui::State target_state) const;
diff --git a/chrome/browser/password_manager/profile_password_store_factory.cc b/chrome/browser/password_manager/profile_password_store_factory.cc index 5f46c693..18aed654 100644 --- a/chrome/browser/password_manager/profile_password_store_factory.cc +++ b/chrome/browser/password_manager/profile_password_store_factory.cc
@@ -59,16 +59,9 @@ DCHECK(!profile->IsOffTheRecord()); - scoped_refptr<PasswordStore> ps; -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_MAC) || \ - BUILDFLAG(IS_OZONE) - ps = new password_manager::PasswordStore( + scoped_refptr<PasswordStore> ps = new password_manager::PasswordStore( CreateProfilePasswordStoreBackend(profile->GetPath(), profile->GetPrefs(), g_browser_process->os_crypt_async())); -#else - NOTIMPLEMENTED(); -#endif - DCHECK(ps); affiliations::AffiliationService* affiliation_service = AffiliationServiceFactory::GetForProfile(profile);
diff --git a/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.cc b/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.cc index 6e71aeab..97a8890 100644 --- a/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.cc +++ b/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.cc
@@ -482,9 +482,8 @@ void PredictionBasedPermissionUiSelector::OnTimeout() { VLOG(1) << "[CPSS] Overall timeout for prediction reached."; - // TODO(crbug.com/441889637): Add a UMA metric for this timeout event. Cleanup(); - FinishRequest(Decision::UseNormalUiAndShowNoWarning()); + FinishRequest(Decision::UseNormalUiAndShowNoWarning(), /*timeout=*/true); } void PredictionBasedPermissionUiSelector::Cancel() { @@ -493,9 +492,12 @@ Cleanup(); } -void PredictionBasedPermissionUiSelector::FinishRequest(Decision decision) { +void PredictionBasedPermissionUiSelector::FinishRequest(Decision decision, + bool timeout) { timeout_timer_.Stop(); + PermissionUmaUtil::RecordPredictionServiceTimeout(timeout); if (!callback_) { + VLOG(1) << "[CPSS] FinishRequest called but callback is null"; return; }
diff --git a/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.h b/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.h index df924e1..bac23eed 100644 --- a/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.h +++ b/chrome/browser/permissions/prediction_service/prediction_based_permission_ui_selector.h
@@ -143,7 +143,7 @@ HoldbackDecisionTest); // A safe way to invoke the callback with a decision. - void FinishRequest(Decision decision); + void FinishRequest(Decision decision, bool timeout = false); // Resets the permission request, the language detection observer and the // passage embedder delegate, which cancels all async operations managed by
diff --git a/chrome/browser/permissions/prediction_service/prediction_service_browsertest.cc b/chrome/browser/permissions/prediction_service/prediction_service_browsertest.cc index 32a14c1..116203c 100644 --- a/chrome/browser/permissions/prediction_service/prediction_service_browsertest.cc +++ b/chrome/browser/permissions/prediction_service/prediction_service_browsertest.cc
@@ -135,6 +135,8 @@ "Permissions.OnDevicePredictionService.InquiryDuration"; constexpr char kCpssV3InquiryDurationHistogram[] = "Permissions.PredictionService.InquiryDuration"; +constexpr char kPredictionServiceTimeoutHistogram[] = + "Permissions.PredictionService.Timeout"; constexpr char kTFLiteLibAvailableHistogram[] = "Permissions.PredictionService.TFLiteLibAvailable"; constexpr char kMSBBHistogram[] = "Permissions.PredictionService.MSBB"; @@ -603,10 +605,14 @@ .Run(/*lookup_successful=*/true, /*response_from_cache=*/true, prediction_service_response); }))); + TriggerPromptAndVerifyUi(test_url, PermissionAction::DISMISSED, GetParam().should_expect_quiet_ui, /*expected_relevance=*/std::nullopt, GetParam().prediction_service_likelihood); + + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + false, 1); } IN_PROC_BROWSER_TEST_P(PredictionServiceHoldbackBrowserTest, @@ -629,6 +635,9 @@ /*should_expect_quiet_ui=*/false, /*expected_relevance=*/std::nullopt, /*expected_prediction_likelihood=*/std::nullopt); + + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + true, 1); } // ----------------------------------------------------------------------------- @@ -772,6 +781,10 @@ histogram_tester().ExpectTotalCount(kCpssV1InquiryDurationHistogram, /*expected_count=*/1); + // Because of the action history we need to trigger the CPSSv1 model we expect + // 5 records here. + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + false, 5); } // ----------------------------------------------------------------------------- @@ -1056,6 +1069,9 @@ ? kAIv3NotificationsHoldbackResponseHistogram : kAIv3GeolocationHoldbackResponseHistogram, /*sample=*/false, /*expected_count=*/1); + + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + false, 1); } // ----------------------------------------------------------------------------- @@ -1271,6 +1287,9 @@ /*sample=*/GetParam().expected_status, /*expected_count=*/1); + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + false, 1); + // Avoid dangling raw_ptr warning: model_handler_provider()->set_passage_embedder_for_testing(nullptr); } @@ -1426,6 +1445,9 @@ kAiv4NotificationsPermissionRequestRelevanceHistogram, /*expected_count=*/0); + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + false, 1); + // Avoid dangling raw_ptr warning: model_handler_provider()->set_passage_embedder_for_testing(nullptr); } @@ -1491,6 +1513,9 @@ /*sample=*/1, /*expected_count=*/1); + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + false, 1); + // Avoid dangling raw_ptr warning: model_handler_provider()->set_passage_embedder_for_testing(nullptr); } @@ -1681,6 +1706,9 @@ : kAiv4GeolocationRenderedTextSizeHistogram, /*sample=*/55, /*expected_bucket_count=*/1); + + histogram_tester().ExpectUniqueSample(kPredictionServiceTimeoutHistogram, + false, 1); } } // namespace permissions
diff --git a/chrome/browser/privacy_budget/BUILD.gn b/chrome/browser/privacy_budget/BUILD.gn index 76ab1f2..7a7d564 100644 --- a/chrome/browser/privacy_budget/BUILD.gn +++ b/chrome/browser/privacy_budget/BUILD.gn
@@ -110,8 +110,8 @@ "//chrome/browser", "//chrome/browser:browser_process", "//chrome/browser/metrics:test_support", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/common/privacy_budget:test_support", - "//chrome/test:sync_integration_test_support", "//chrome/test:test_support", "//components/metrics_services_manager", "//components/sync:test_support",
diff --git a/chrome/browser/regional_capabilities/BUILD.gn b/chrome/browser/regional_capabilities/BUILD.gn index 3278f15..cc06bf4 100644 --- a/chrome/browser/regional_capabilities/BUILD.gn +++ b/chrome/browser/regional_capabilities/BUILD.gn
@@ -8,6 +8,7 @@ source_set("regional_capabilities") { sources = [ + "regional_capabilities_metrics_provider.h", "regional_capabilities_service_client.cc", "regional_capabilities_service_client.h", "regional_capabilities_service_factory.cc", @@ -19,6 +20,7 @@ "//chrome/browser:browser_process", "//chrome/browser/profiles", "//components/country_codes", + "//components/metrics", "//components/regional_capabilities", "//components/variations/service", ] @@ -50,9 +52,22 @@ } } +source_set("metrics_provider_impl") { + sources = [ "regional_capabilities_metrics_provider.cc" ] + deps = [ + ":regional_capabilities", + "//chrome/browser:browser_process", + "//chrome/browser/profiles:profile", + "//components/regional_capabilities", + "//components/regional_capabilities:data", + ] + public_deps = [ "//chrome/browser:browser_public_dependencies" ] +} + source_set("unit_tests") { testonly = true sources = [ + "regional_capabilities_metrics_provider_unittest.cc", "regional_capabilities_service_client_unittest.cc", "regional_capabilities_test_environment.cc", "regional_capabilities_test_environment.h", @@ -61,6 +76,7 @@ deps = [ ":regional_capabilities", "//base/test:test_support", + "//chrome/test:test_support", "//components/country_codes", "//components/metrics", "//components/metrics:test_support",
diff --git a/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.cc b/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.cc new file mode 100644 index 0000000..2b902c5 --- /dev/null +++ b/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.cc
@@ -0,0 +1,38 @@ +// 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. + +#include "chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.h" + +#include "chrome/browser/browser_process.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/regional_capabilities/regional_capabilities_service_factory.h" +#include "components/regional_capabilities/program_settings.h" +#include "components/regional_capabilities/regional_capabilities_metrics.h" +#include "components/regional_capabilities/regional_capabilities_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "third_party/abseil-cpp/absl/container/flat_hash_set.h" + +namespace regional_capabilities { + +void RegionalCapabilitiesMetricsProvider::ProvideCurrentSessionData( + metrics::ChromeUserMetricsExtension* uma_proto) { + absl::flat_hash_set<ActiveRegionalProgram> programs; + for (Profile* profile : + g_browser_process->profile_manager()->GetLoadedProfiles()) { + RegionalCapabilitiesService* regional_capabilities = + RegionalCapabilitiesServiceFactory::GetForProfile(profile); + if (!regional_capabilities) { + // Ignore profiles such as the system profile that don't have a + // RegionalCapabilitiesService. + continue; + } + + programs.insert(regional_capabilities->GetActiveProgramForMetrics()); + } + + RecordActiveRegionalProgram(programs); +} + +} // namespace regional_capabilities
diff --git a/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.h b/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.h new file mode 100644 index 0000000..897ce00d --- /dev/null +++ b/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.h
@@ -0,0 +1,28 @@ +// 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. + +#ifndef CHROME_BROWSER_REGIONAL_CAPABILITIES_REGIONAL_CAPABILITIES_METRICS_PROVIDER_H_ +#define CHROME_BROWSER_REGIONAL_CAPABILITIES_REGIONAL_CAPABILITIES_METRICS_PROVIDER_H_ + +#include "components/metrics/metrics_provider.h" + +namespace regional_capabilities { + +class RegionalCapabilitiesMetricsProvider : public metrics::MetricsProvider { + public: + RegionalCapabilitiesMetricsProvider() = default; + RegionalCapabilitiesMetricsProvider( + const RegionalCapabilitiesMetricsProvider&) = delete; + RegionalCapabilitiesMetricsProvider& operator=( + const RegionalCapabilitiesMetricsProvider&) = delete; + ~RegionalCapabilitiesMetricsProvider() override = default; + + // metrics::MetricsProvider + void ProvideCurrentSessionData( + metrics::ChromeUserMetricsExtension* uma_proto) override; +}; + +} // namespace regional_capabilities + +#endif // CHROME_BROWSER_REGIONAL_CAPABILITIES_REGIONAL_CAPABILITIES_METRICS_PROVIDER_H_
diff --git a/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider_unittest.cc b/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider_unittest.cc new file mode 100644 index 0000000..9c3b1e5 --- /dev/null +++ b/chrome/browser/regional_capabilities/regional_capabilities_metrics_provider_unittest.cc
@@ -0,0 +1,143 @@ +// 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. + +#include "chrome/browser/regional_capabilities/regional_capabilities_metrics_provider.h" + +#include <map> +#include <memory> +#include <string> + +#include "base/test/metrics/histogram_tester.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/regional_capabilities/regional_capabilities_service_factory.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chrome/test/base/testing_profile.h" +#include "chrome/test/base/testing_profile_manager.h" +#include "components/country_codes/country_codes.h" +#include "components/keyed_service/core/keyed_service.h" +#include "components/regional_capabilities/regional_capabilities_metrics.h" +#include "components/regional_capabilities/regional_capabilities_service.h" +#include "components/regional_capabilities/regional_capabilities_switches.h" +#include "components/regional_capabilities/regional_capabilities_test_utils.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace regional_capabilities { + +namespace { + +std::unique_ptr<KeyedService> BuildServiceWithFakeClient( + country_codes::CountryId country_id, + content::BrowserContext* context) { + Profile* profile = Profile::FromBrowserContext(context); + return CreateServiceWithFakeClient(*profile->GetPrefs(), country_id); +} + +} // namespace + +class RegionalCapabilitiesMetricsProviderTest : public testing::Test { + public: + RegionalCapabilitiesMetricsProviderTest() + : profile_manager_(TestingBrowserProcess::GetGlobal()) {} + + void SetUp() override { + ASSERT_TRUE(profile_manager_.SetUp()); +#if BUILDFLAG(IS_ANDROID) + // TODO(https://crbug.com/438133907): once it's supported by the test + // environment, set the regional capabilities directly for this test. + scoped_feature_list_.InitAndDisableFeature( + switches::kResolveRegionalCapabilitiesFromDevice); +#endif // BUILDFLAG(IS_ANDROID) + } + + void TearDown() override { + // The profile manager needs to be destroyed before the task environment. + profile_manager_.DeleteAllTestingProfiles(); + } + + // Creates a profile and associates it with a country. + void CreateProfileWithCountry(const std::string& profile_name, + country_codes::CountryId country_id) { + profile_manager_.CreateTestingProfile( + profile_name, + {TestingProfile::TestingFactory( + RegionalCapabilitiesServiceFactory::GetInstance(), + base::BindRepeating(&BuildServiceWithFakeClient, country_id))}); + } + + protected: + base::HistogramTester histogram_tester_; + RegionalCapabilitiesMetricsProvider metrics_provider_; + TestingProfileManager profile_manager_; + + private: + content::BrowserTaskEnvironment task_environment_; + base::test::ScopedFeatureList scoped_feature_list_; +}; + +TEST_F(RegionalCapabilitiesMetricsProviderTest, NoProfiles) { + metrics_provider_.ProvideCurrentSessionData(nullptr); + + histogram_tester_.ExpectUniqueSample( + "RegionalCapabilities.ActiveRegionalProgram", + ActiveRegionalProgram::kDefault, 1); +} + +TEST_F(RegionalCapabilitiesMetricsProviderTest, SingleProfile_Default) { + CreateProfileWithCountry("profile1", country_codes::CountryId("US")); + + metrics_provider_.ProvideCurrentSessionData(nullptr); + + histogram_tester_.ExpectUniqueSample( + "RegionalCapabilities.ActiveRegionalProgram", + ActiveRegionalProgram::kDefault, 1); +} + +TEST_F(RegionalCapabilitiesMetricsProviderTest, SingleProfile_Waffle) { + CreateProfileWithCountry("profile1", country_codes::CountryId("FR")); + + metrics_provider_.ProvideCurrentSessionData(nullptr); + + histogram_tester_.ExpectUniqueSample( + "RegionalCapabilities.ActiveRegionalProgram", + ActiveRegionalProgram::kWaffle, 1); +} + +// Skip on platforms that don't have a system profile. +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) +TEST_F(RegionalCapabilitiesMetricsProviderTest, + SystemProfileAndRegularProfile_Waffle) { + profile_manager_.CreateSystemProfile(); + CreateProfileWithCountry("profile1", country_codes::CountryId("FR")); + + metrics_provider_.ProvideCurrentSessionData(nullptr); + + histogram_tester_.ExpectUniqueSample( + "RegionalCapabilities.ActiveRegionalProgram", + ActiveRegionalProgram::kWaffle, 1); +} +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) + +TEST_F(RegionalCapabilitiesMetricsProviderTest, MultipleProfiles_Same) { + CreateProfileWithCountry("profile1", country_codes::CountryId("FR")); + CreateProfileWithCountry("profile2", country_codes::CountryId("FR")); + + metrics_provider_.ProvideCurrentSessionData(nullptr); + + histogram_tester_.ExpectUniqueSample( + "RegionalCapabilities.ActiveRegionalProgram", + ActiveRegionalProgram::kWaffle, 1); +} + +TEST_F(RegionalCapabilitiesMetricsProviderTest, MultipleProfiles_Different) { + CreateProfileWithCountry("profile1", country_codes::CountryId("FR")); + CreateProfileWithCountry("profile2", country_codes::CountryId("US")); + metrics_provider_.ProvideCurrentSessionData(nullptr); + histogram_tester_.ExpectUniqueSample( + "RegionalCapabilities.ActiveRegionalProgram", + ActiveRegionalProgram::kMixed, 1); +} + +} // namespace regional_capabilities
diff --git a/chrome/browser/save_to_drive/BUILD.gn b/chrome/browser/save_to_drive/BUILD.gn index 74b9895..2712cce 100644 --- a/chrome/browser/save_to_drive/BUILD.gn +++ b/chrome/browser/save_to_drive/BUILD.gn
@@ -50,7 +50,6 @@ testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] sources = [ - "drive_uploader_browsertest.cc", "pdf_content_reader_browsertest.cc", "save_to_drive_event_dispatcher_browsertest.cc", ] @@ -70,7 +69,10 @@ source_set("unit_tests") { testonly = true - sources = [ "save_to_drive_flow_unittest.cc" ] + sources = [ + "drive_uploader_unittest.cc", + "save_to_drive_flow_unittest.cc", + ] deps = [ ":save_to_drive", "//chrome/browser/pdf:pdf_extension_test_utils",
diff --git a/chrome/browser/save_to_drive/drive_uploader_browsertest.cc b/chrome/browser/save_to_drive/drive_uploader_browsertest.cc deleted file mode 100644 index 9434044b..0000000 --- a/chrome/browser/save_to_drive/drive_uploader_browsertest.cc +++ /dev/null
@@ -1,130 +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. - -#include "chrome/browser/save_to_drive/drive_uploader.h" - -#include "base/test/gmock_callback_support.h" -#include "base/test/mock_callback.h" -#include "base/test/test_future.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/common/extensions/api/pdf_viewer_private.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "components/signin/public/identity_manager/identity_test_environment.h" -#include "content/public/test/browser_test.h" -#include "google_apis/gaia/gaia_urls.h" -#include "google_apis/gaia/google_service_auth_error.h" -#include "net/http/http_request_headers.h" -#include "testing/gtest/include/gtest/gtest.h" - -using base::test::TestFuture; -using extensions::api::pdf_viewer_private::SaveToDriveErrorType; -using extensions::api::pdf_viewer_private::SaveToDriveProgress; -using extensions::api::pdf_viewer_private::SaveToDriveStatus; -using testing::_; -using testing::Field; -using testing::IsEmpty; -using testing::StartsWith; - -namespace save_to_drive { - -using ProgressCallback = DriveUploader::ProgressCallback; - -class FakeDriveUploader : public DriveUploader { - public: - FakeDriveUploader(std::string title, - AccountInfo account_info, - ProgressCallback progress_callback, - Profile* profile) - : DriveUploader(DriveUploaderType::kUnknown, - std::move(title), - std::move(account_info), - std::move(progress_callback), - profile) {} - FakeDriveUploader(const FakeDriveUploader&) = delete; - FakeDriveUploader& operator=(const FakeDriveUploader&) = delete; - ~FakeDriveUploader() override = default; - - // DriveUploader: - void UploadFile() override {} - - const std::vector<std::string>& get_oauth_headers() const { - return oauth_headers_; - } -}; - -class DriveUploaderBrowserTest : public InProcessBrowserTest { - public: - void SetUpOnMainThread() override { - InProcessBrowserTest::SetUpOnMainThread(); - adaptor_ = std::make_unique<IdentityTestEnvironmentProfileAdaptor>( - browser()->profile()); - - identity_test_env_ = adaptor_->identity_test_env(); - } - - void SetUpBrowserContextKeyedServices( - content::BrowserContext* context) override { - IdentityTestEnvironmentProfileAdaptor:: - SetIdentityTestEnvironmentFactoriesOnBrowserContext(context); - } - - void TearDownOnMainThread() override { - identity_test_env_ = nullptr; - adaptor_.reset(); - - InProcessBrowserTest::TearDownOnMainThread(); - } - - protected: - std::unique_ptr<IdentityTestEnvironmentProfileAdaptor> adaptor_; - raw_ptr<signin::IdentityTestEnvironment> identity_test_env_ = nullptr; -}; - -IN_PROC_BROWSER_TEST_F(DriveUploaderBrowserTest, CreateOAuthHeadersSuccess) { - auto account_info = identity_test_env_->MakePrimaryAccountAvailable( - "test@example.com", signin::ConsentLevel::kSignin); - base::MockCallback<ProgressCallback> progress_callback; - FakeDriveUploader uploader("test_title", std::move(account_info), - progress_callback.Get(), browser()->profile()); - TestFuture<void> future; - EXPECT_CALL(progress_callback, Run(Field(&SaveToDriveProgress::status, - SaveToDriveStatus::kFetchOauth))) - .WillOnce(base::test::RunOnceClosure(future.GetCallback())); - uploader.Start(); - - identity_test_env_->WaitForAccessTokenRequestIfNecessaryAndRespondWithToken( - "access_token", base::Time::Now() + base::Hours(1)); - - EXPECT_TRUE(future.Wait()); - EXPECT_THAT(uploader.get_oauth_headers(), - ElementsAre("X-Developer-Key", - GaiaUrls::GetInstance()->oauth2_chrome_client_id(), - net::HttpRequestHeaders::kAuthorization, - StartsWith("Bearer access_token"))); -} - -IN_PROC_BROWSER_TEST_F(DriveUploaderBrowserTest, CreateOAuthHeadersFailure) { - auto account_info = identity_test_env_->MakePrimaryAccountAvailable( - "test@example.com", signin::ConsentLevel::kSignin); - base::MockCallback<ProgressCallback> progress_callback; - FakeDriveUploader uploader("test_title", std::move(account_info), - progress_callback.Get(), browser()->profile()); - TestFuture<void> future; - EXPECT_CALL(progress_callback, - Run(AllOf(Field(&SaveToDriveProgress::status, - SaveToDriveStatus::kUploadFailed), - Field(&SaveToDriveProgress::error_type, - SaveToDriveErrorType::kOauthError)))) - .WillOnce(base::test::RunOnceClosure(future.GetCallback())); - uploader.Start(); - - identity_test_env_->WaitForAccessTokenRequestIfNecessaryAndRespondWithError( - GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED)); - EXPECT_TRUE(future.Wait()); - EXPECT_THAT(uploader.get_oauth_headers(), IsEmpty()); -} - -} // namespace save_to_drive
diff --git a/chrome/browser/save_to_drive/drive_uploader_unittest.cc b/chrome/browser/save_to_drive/drive_uploader_unittest.cc new file mode 100644 index 0000000..5449f40 --- /dev/null +++ b/chrome/browser/save_to_drive/drive_uploader_unittest.cc
@@ -0,0 +1,139 @@ +// 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. + +#include "chrome/browser/save_to_drive/drive_uploader.h" + +#include <memory> +#include <string> +#include <utility> + +#include "base/test/mock_callback.h" +#include "chrome/browser/save_to_drive/content_reader.h" +#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" +#include "chrome/common/extensions/api/pdf_viewer_private.h" +#include "chrome/test/base/testing_profile.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "content/public/test/browser_task_environment.h" +#include "google_apis/gaia/core_account_id.h" +#include "google_apis/gaia/google_service_auth_error.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace save_to_drive { + +namespace { + +using extensions::api::pdf_viewer_private::SaveToDriveErrorType; +using extensions::api::pdf_viewer_private::SaveToDriveProgress; +using extensions::api::pdf_viewer_private::SaveToDriveStatus; +using testing::_; +using testing::AllOf; +using testing::Field; + +class MockContentReader : public ContentReader { + public: + MOCK_METHOD(void, Open, (OpenCallback callback), (override)); + MOCK_METHOD(size_t, GetSize, (), (override)); + MOCK_METHOD(void, + Read, + (uint32_t offset, uint32_t size, ContentReadCallback callback), + (override)); + MOCK_METHOD(void, Close, (), (override)); +}; + +class FakeDriveUploader : public DriveUploader { + public: + FakeDriveUploader(std::string title, + AccountInfo account_info, + ProgressCallback progress_callback, + Profile* profile) + : DriveUploader(DriveUploaderType::kUnknown, + std::move(title), + std::move(account_info), + std::move(progress_callback), + profile) {} + FakeDriveUploader(const FakeDriveUploader&) = delete; + FakeDriveUploader& operator=(const FakeDriveUploader&) = delete; + ~FakeDriveUploader() override = default; + + MOCK_METHOD(void, UploadFile, (), (override)); +}; + +class DriveUploaderTest : public testing::Test { + public: + DriveUploaderTest() + : profile_(IdentityTestEnvironmentProfileAdaptor:: + CreateProfileForIdentityTestEnvironment()), + adaptor_(std::make_unique<IdentityTestEnvironmentProfileAdaptor>( + profile_.get())) {} + DriveUploaderTest(const DriveUploaderTest&) = delete; + DriveUploaderTest& operator=(const DriveUploaderTest&) = delete; + ~DriveUploaderTest() override = default; + + protected: + signin::IdentityTestEnvironment* test_env() { + return adaptor_->identity_test_env(); + } + + content::BrowserTaskEnvironment task_environment_; + std::unique_ptr<TestingProfile> profile_; + std::unique_ptr<IdentityTestEnvironmentProfileAdaptor> adaptor_; + base::MockCallback<DriveUploader::ProgressCallback> progress_callback_; + MockContentReader mock_content_reader_; +}; + +TEST_F(DriveUploaderTest, FetchAccessTokenSuccess) { + auto account_info = test_env()->MakePrimaryAccountAvailable( + "test@example.com", signin::ConsentLevel::kSignin); + auto uploader = std::make_unique<FakeDriveUploader>( + "test_title", account_info, progress_callback_.Get(), profile_.get()); + + EXPECT_CALL(progress_callback_, + Run(AllOf(Field(&SaveToDriveProgress::status, + SaveToDriveStatus::kFetchOauth), + Field(&SaveToDriveProgress::error_type, + SaveToDriveErrorType::kNoError)))); + + uploader->Start(); + test_env()->WaitForAccessTokenRequestIfNecessaryAndRespondWithToken( + "test_token", base::Time::Max()); +} + +TEST_F(DriveUploaderTest, FetchAccessTokenFailure) { + auto account_info = test_env()->MakePrimaryAccountAvailable( + "test@example.com", signin::ConsentLevel::kSignin); + auto uploader = std::make_unique<FakeDriveUploader>( + "test_title", account_info, progress_callback_.Get(), profile_.get()); + + EXPECT_CALL(progress_callback_, + Run(AllOf(Field(&SaveToDriveProgress::status, + SaveToDriveStatus::kUploadFailed), + Field(&SaveToDriveProgress::error_type, + SaveToDriveErrorType::kOauthError)))); + + uploader->Start(); + test_env()->WaitForAccessTokenRequestIfNecessaryAndRespondWithError( + GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED)); +} + +TEST_F(DriveUploaderTest, NoRefreshToken) { + AccountInfo account_info; + account_info.email = "test@example.com"; + account_info.account_id = CoreAccountId::FromGaiaId(GaiaId("12345")); + + auto uploader = std::make_unique<FakeDriveUploader>( + "test_title", account_info, progress_callback_.Get(), profile_.get()); + + EXPECT_CALL(progress_callback_, + Run(AllOf(Field(&SaveToDriveProgress::status, + SaveToDriveStatus::kUploadFailed), + Field(&SaveToDriveProgress::error_type, + SaveToDriveErrorType::kOauthError)))); + + uploader->Start(); +} + +} // namespace + +} // namespace save_to_drive
diff --git a/chrome/browser/sync/chrome_sync_controller_builder.cc b/chrome/browser/sync/chrome_sync_controller_builder.cc index 394b541..a1bc7e3 100644 --- a/chrome/browser/sync/chrome_sync_controller_builder.cc +++ b/chrome/browser/sync/chrome_sync_controller_builder.cc
@@ -272,16 +272,9 @@ /*delegate_for_full_sync_mode=*/ std::make_unique<syncer::ForwardingDataTypeControllerDelegate>( delegate), - // TODO(crbug.com/424698545): This special-casing shouldn't be necessary - // for ChromeOS, but currently the transport mode delegate may be - // exercised in some unexpected cases. -#if BUILDFLAG(IS_CHROMEOS) - /*delegate_for_transport_mode=*/nullptr -#else // BUILDFLAG(IS_CHROMEOS) /*delegate_for_transport_mode=*/ std::make_unique<syncer::ForwardingDataTypeControllerDelegate>( delegate) -#endif // BUILDFLAG(IS_CHROMEOS) )); } #endif // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/sync/test/integration/BUILD.gn b/chrome/browser/sync/test/integration/BUILD.gn index ff3b4021..59a2366cf 100644 --- a/chrome/browser/sync/test/integration/BUILD.gn +++ b/chrome/browser/sync/test/integration/BUILD.gn
@@ -17,6 +17,7 @@ configs += [ "//build/config:precompiled_headers" ] defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] deps = [ + ":sync_integration_test_support", "//chrome/browser/password_manager/factories", "//chrome/browser/plus_addresses", "//chrome/browser/prefs", @@ -27,7 +28,6 @@ "//chrome/browser/ui:browser_navigator_params_headers", "//chrome/browser/ui:ui_features", "//chrome/test:browser_tests_runner", - "//chrome/test:sync_integration_test_support", "//chrome/test:test_support", "//components/bookmarks/browser", "//components/commerce/core:feature_list", @@ -347,3 +347,245 @@ ] } } + +# For Android, this target has to be built along with the +# sync_integration_test_support_java target from the test target dependencies. +source_set("sync_integration_test_support") { + testonly = true + sources = [ + "autofill_helper.cc", + "autofill_helper.h", + "await_match_status_change_checker.cc", + "await_match_status_change_checker.h", + "bookmarks_helper.cc", + "bookmarks_helper.h", + "committed_all_nudged_changes_checker.cc", + "committed_all_nudged_changes_checker.h", + "contact_info_helper.cc", + "contact_info_helper.h", + "device_info_helper.cc", + "device_info_helper.h", + "encryption_helper.cc", + "encryption_helper.h", + "exponential_backoff_helper.cc", + "exponential_backoff_helper.h", + "fake_server_match_status_checker.cc", + "fake_server_match_status_checker.h", + "fake_sync_gcm_driver_for_instance_id.cc", + "fake_sync_gcm_driver_for_instance_id.h", + "history_helper.cc", + "history_helper.h", + "invalidations/fake_server_sync_invalidation_sender.cc", + "invalidations/fake_server_sync_invalidation_sender.h", + "invalidations/invalidations_status_checker.cc", + "invalidations/invalidations_status_checker.h", + "multi_client_status_change_checker.cc", + "multi_client_status_change_checker.h", + "offer_helper.cc", + "offer_helper.h", + "password_sharing_invitation_helper.cc", + "password_sharing_invitation_helper.h", + "passwords_helper.cc", + "passwords_helper.h", + "preferences_helper.cc", + "preferences_helper.h", + "quiesce_status_change_checker.cc", + "quiesce_status_change_checker.h", + "saved_tab_groups_helper.cc", + "saved_tab_groups_helper.h", + "secondary_account_helper.cc", + "secondary_account_helper.h", + "send_tab_to_self_helper.cc", + "send_tab_to_self_helper.h", + "session_hierarchy_match_checker.cc", + "session_hierarchy_match_checker.h", + "shared_tab_group_data_helper.cc", + "shared_tab_group_data_helper.h", + "single_client_status_change_checker.cc", + "single_client_status_change_checker.h", + "status_change_checker.cc", + "status_change_checker.h", + "sync_datatype_helper.cc", + "sync_datatype_helper.h", + "sync_disabled_checker.cc", + "sync_disabled_checker.h", + "sync_engine_stopped_checker.cc", + "sync_engine_stopped_checker.h", + "sync_service_impl_harness.cc", + "sync_service_impl_harness.h", + "sync_signin_delegate.cc", + "sync_signin_delegate.h", + "sync_test.cc", + "sync_test.h", + "sync_test_account.h", + "sync_test_tab_utils.cc", + "sync_test_tab_utils.h", + "updated_progress_marker_checker.cc", + "updated_progress_marker_checker.h", + "wallet_helper.cc", + "wallet_helper.h", + ] + + public_deps = [ + "//chrome/browser", + "//chrome/browser/favicon", + "//chrome/test:test_support", + "//components/autofill/content/browser", + "//components/power_bookmarks/core:features", + ] + + deps = [ + "//base", + "//chrome/browser:main_extra_parts", + "//chrome/browser/autofill", + "//chrome/browser/password_manager/factories", + "//chrome/browser/profiles", + "//chrome/browser/search_engines", + "//chrome/browser/sync", + "//components/autofill/core/common:credit_card_number_validation", + "//components/bookmarks/browser", + "//components/bookmarks/browser:test_support", + "//components/bookmarks/managed", + "//components/browser_sync", + "//components/commerce/core:feature_list", + "//components/favicon/core", + "//components/os_crypt/sync:test_support", + "//components/password_manager/core/browser:password_manager_buildflags", + "//components/plus_addresses/core/common:features", + "//components/saved_tab_groups/public", + "//components/send_tab_to_self", + "//components/signin/public/identity_manager:test_support", + "//components/sync", + "//components/sync:test_support", + "//components/sync_bookmarks", + "//components/tab_groups", + "//components/tabs:public", + "//components/webapps/common", + "//content/public/browser", + "//content/test:test_support", + "//net", + "//services/network/public/mojom", + "//skia", + ] + + if (is_android) { + sources += [ + "fake_sync_signin_delegate_android.cc", + "fake_sync_signin_delegate_android.h", + "live_sync_signin_delegate_android.cc", + "live_sync_signin_delegate_android.h", + "sync_test_utils_android.cc", + "sync_test_utils_android.h", + "webapks_helper.cc", + "webapks_helper.h", + ] + + deps += [ + "//chrome/browser/android/webapk:webapk_sources", + "//chrome/browser/password_manager/android:utils", + "//chrome/browser/ui/android/tab_model", + "//chrome/test:sync_integration_test_support_jni_headers", + "//chrome/test:test_support_jni_headers", + "//components/saved_tab_groups/public:conversion_utils", + ] + } else { + sources += [ + "apps_helper.cc", + "apps_helper.h", + "cookie_helper.cc", + "cookie_helper.h", + "extension_settings_helper.cc", + "extension_settings_helper.h", + "fake_sync_signin_delegate_desktop.cc", + "fake_sync_signin_delegate_desktop.h", + "live_sync_signin_delegate_desktop.cc", + "live_sync_signin_delegate_desktop.h", + "migration_waiter.cc", + "migration_waiter.h", + "migration_watcher.cc", + "migration_watcher.h", + "search_engines_helper.cc", + "search_engines_helper.h", + "sessions_helper.cc", + "sessions_helper.h", + "sync_app_helper.cc", + "sync_app_helper.h", + "sync_integration_test_util.cc", + "sync_integration_test_util.h", + "themes_helper.cc", + "themes_helper.h", + "user_events_helper.cc", + "user_events_helper.h", + "webauthn_credentials_helper.cc", + "webauthn_credentials_helper.h", + ] + + deps += [ + "//chrome/browser/apps/app_service", + "//chrome/browser/themes", + "//chrome/browser/ui/webui/signin:login", + "//chrome/browser/ui/webui/signin:test_support_ui", + "//chrome/browser/web_applications:web_applications_test_support", + "//chrome/browser/webauthn", + "//components/send_tab_to_self", + "//components/trusted_vault", + "//components/webapps/browser", + "//components/webauthn/core/browser", + "//components/webauthn/core/browser:passkey_model", + ] + + if (!is_mac) { + sources += [ + "dictionary_helper.cc", + "dictionary_helper.h", + "dictionary_load_observer.cc", + "dictionary_load_observer.h", + ] + } + } + + if (is_chromeos) { + sources += [ + "printers_helper.cc", + "printers_helper.h", + "sync_app_list_helper.cc", + "sync_app_list_helper.h", + "sync_arc_package_helper.cc", + "sync_arc_package_helper.h", + "workspace_desk_helper.cc", + "workspace_desk_helper.h", + ] + + public_deps += [ "//chrome/browser/ash/app_list" ] + + deps += [ + "//ash/app_list:test_support", + "//chrome/browser/ash/app_list/arc", + "//chrome/browser/ash/app_list/test:test_support", + "//chrome/browser/ash/arc", + "//chrome/browser/ash/arc:arc_util", + "//chrome/browser/ash/arc/session", + "//chrome/browser/ash/net", + "//chrome/browser/ash/printing", + "//chrome/browser/ash/system_web_apps/test_support", + "//chromeos/ash/components/browser_context_helper", + "//chromeos/ash/components/network/portal_detector", + "//chromeos/ash/experiences/arc:arc_test_support", + "//chromeos/ash/experiences/arc/mojom", + "//chromeos/printing", + "//components/desks_storage", + "//components/user_manager:test_support", + ] + } + + if (enable_extensions_core) { + sources += [ + "extensions_helper.cc", + "extensions_helper.h", + "sync_extension_helper.cc", + "sync_extension_helper.h", + ] + + deps += [ "//chrome/browser/extensions" ] + } +}
diff --git a/chrome/browser/sync/test/integration/password_manager_sync_test.cc b/chrome/browser/sync/test/integration/password_manager_sync_test.cc index e97212a3..dad4524 100644 --- a/chrome/browser/sync/test/integration/password_manager_sync_test.cc +++ b/chrome/browser/sync/test/integration/password_manager_sync_test.cc
@@ -805,32 +805,6 @@ bubble_observer.WaitForAutomaticUpdatePrompt(); } -IN_PROC_BROWSER_TEST_F(PasswordManagerSyncTest, - SignOutWithUnsyncedPasswordsOpensBubble) { - ASSERT_TRUE(SetupClients()); - content::WebContents* web_contents = GetNewTab(GetBrowser(0)); - - SetupSyncTransportWithPasswordAccountStorage(); - - // Force credentials saved to the account to be unsynced. - GetFakeServer()->SetHttpError(net::HTTP_BAD_REQUEST); - - NavigateToFile(web_contents, kExampleHostname, - "/password/password_form.html"); - FillAndSubmitPasswordForm(web_contents, "accountuser", "accountpass"); - - // Save the password in the account store. - BubbleObserver bubble_observer(web_contents); - bubble_observer.AcceptSavePrompt(); - std::vector<std::unique_ptr<password_manager::PasswordForm>> - account_credentials = GetAllLoginsFromAccountPasswordStore(); - ASSERT_THAT(account_credentials, - ElementsAre(MatchesLogin("accountuser", "accountpass"))); - - SignOut(); - bubble_observer.WaitForSaveUnsyncedCredentialsPrompt(); -} - #if BUILDFLAG(ENABLE_DICE_SUPPORT) // TODO(b/327118794): Delete this test once implicit signin no longer exists.
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc index 7ef6949..fa04e03 100644 --- a/chrome/browser/sync/test/integration/sync_test.cc +++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -1115,7 +1115,7 @@ #if BUILDFLAG(IS_CHROMEOS) // OS sync types run in transport mode. - allowed_types.PutAll({syncer::APP_LIST, syncer::ARC_PACKAGE, + allowed_types.PutAll({syncer::APP_LIST, syncer::ARC_PACKAGE, syncer::WEB_APPS, syncer::OS_PREFERENCES, syncer::OS_PRIORITY_PREFERENCES}); #endif // BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 9a7231e41..26ee98a 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -4035,8 +4035,6 @@ "views/passwords/password_cross_domain_confirmation_popup_view_views.h", "views/passwords/password_generation_popup_view_views.cc", "views/passwords/password_generation_popup_view_views.h", - "views/passwords/password_save_unsynced_credentials_locally_view.cc", - "views/passwords/password_save_unsynced_credentials_locally_view.h", "views/passwords/password_save_update_view.cc", "views/passwords/password_save_update_view.h", "views/passwords/post_save_compromised_bubble_view.cc",
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java index 67508a6..22b0892d 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
@@ -92,7 +92,7 @@ protected ThemeColorProvider mThemeColorProvider; protected IncognitoStateProvider mIncognitoStateProvider; - private MenuButtonCoordinator mMenuButtonCoordinator; + protected MenuButtonCoordinator mMenuButtonCoordinator; private @Nullable AppMenuButtonHelper mAppMenuButtonHelper; private ToggleTabStackButtonCoordinator mTabSwitcherButtonCoordinator;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java index b20fe60..19632bc 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
@@ -403,6 +403,7 @@ mToolbarWidthConsumers[ToolbarComponentId.ADAPTIVE_BUTTON] = mOptionalButtonToolbarWidthConsumer; mToolbarWidthConsumers[ToolbarComponentId.TAB_SWITCHER] = tabSwitcherButtonCoordinator; + mToolbarWidthConsumers[ToolbarComponentId.MENU] = menuButtonCoordinator; } @Override @@ -450,11 +451,6 @@ @VisibleForTesting int getWidthForStaticComponents() { int width = 0; - int buttonWidth = - getContext().getResources().getDimensionPixelSize(R.dimen.toolbar_button_width); - if (getMenuButtonCoordinator().isVisible()) { - width += buttonWidth; - } // Account for the minimum width of the location bar. width += (int) @@ -757,4 +753,10 @@ void setTabStackButtonCoordinatorForTesting(ToggleTabStackButtonCoordinator coordinator) { mToolbarWidthConsumers[ToolbarComponentId.TAB_SWITCHER] = coordinator; } + + @Override + void setMenuButtonCoordinatorForTesting(MenuButtonCoordinator coordinator) { + mMenuButtonCoordinator = coordinator; + mToolbarWidthConsumers[ToolbarComponentId.MENU] = coordinator; + } }
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTabletUnitTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTabletUnitTest.java index 4d70ec5..24b9635 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTabletUnitTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTabletUnitTest.java
@@ -25,6 +25,7 @@ import static org.chromium.chrome.browser.toolbar.top.ToolbarUtils.ToolbarComponentId.BACK; import static org.chromium.chrome.browser.toolbar.top.ToolbarUtils.ToolbarComponentId.FORWARD; import static org.chromium.chrome.browser.toolbar.top.ToolbarUtils.ToolbarComponentId.HOME; +import static org.chromium.chrome.browser.toolbar.top.ToolbarUtils.ToolbarComponentId.MENU; import static org.chromium.chrome.browser.toolbar.top.ToolbarUtils.ToolbarComponentId.RELOAD; import static org.chromium.chrome.browser.toolbar.top.ToolbarUtils.ToolbarComponentId.TAB_SWITCHER; @@ -214,6 +215,7 @@ doReturn(buttonWidth).when(mReloadButtonCoordinator).updateVisibility(anyInt()); doReturn(buttonWidth).when(mBackButtonCoordinator).updateVisibility(anyInt()); doReturn(buttonWidth).when(mTabSwitcherButtonCoordinator).updateVisibility(anyInt()); + doReturn(buttonWidth).when(mMenuButtonCoordinator).updateVisibility(anyInt()); mForwardButtonCoordinator = new ForwardButtonCoordinator( @@ -842,40 +844,46 @@ mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(BACK)); + assertToolbarComponentsReceivedWidth(Set.of(MENU)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(2 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(BACK, TAB_SWITCHER)); + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(3 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(BACK, RELOAD, TAB_SWITCHER)); + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(4 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - - assertToolbarComponentsReceivedWidth(Set.of(BACK, FORWARD, RELOAD, TAB_SWITCHER)); + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK, RELOAD, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(5 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(HOME, BACK, FORWARD, RELOAD, TAB_SWITCHER)); + + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK, FORWARD, RELOAD, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(6 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); assertToolbarComponentsReceivedWidth( - Set.of(HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); + Set.of(MENU, HOME, BACK, FORWARD, RELOAD, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(7 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); assertToolbarComponentsReceivedWidth( - Set.of(HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); + Set.of(MENU, HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); + + mToolbarTablet.onMeasure( + MeasureSpec.makeMeasureSpec(8 * buttonWidth + widthForStaticComponents, EXACTLY), + UNSPECIFIED); + assertToolbarComponentsReceivedWidth( + Set.of(MENU, HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); } @SuppressLint("WrongCall") @@ -890,41 +898,47 @@ .getDimensionPixelSize(R.dimen.toolbar_button_width); mToolbarTablet.onMeasure( + MeasureSpec.makeMeasureSpec(8 * buttonWidth + widthForStaticComponents, EXACTLY), + UNSPECIFIED); + assertToolbarComponentsReceivedWidth( + Set.of(MENU, HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); + + mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(7 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); assertToolbarComponentsReceivedWidth( - Set.of(HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); + Set.of(MENU, HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(6 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); assertToolbarComponentsReceivedWidth( - Set.of(HOME, BACK, FORWARD, RELOAD, ADAPTIVE_BUTTON, TAB_SWITCHER)); + Set.of(MENU, HOME, BACK, FORWARD, RELOAD, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(5 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(HOME, BACK, FORWARD, RELOAD, TAB_SWITCHER)); + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK, FORWARD, RELOAD, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(4 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(BACK, FORWARD, RELOAD, TAB_SWITCHER)); + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK, RELOAD, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(3 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(BACK, RELOAD, TAB_SWITCHER)); + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK, TAB_SWITCHER)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(2 * buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(BACK, TAB_SWITCHER)); + assertToolbarComponentsReceivedWidth(Set.of(MENU, BACK)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(buttonWidth + widthForStaticComponents, EXACTLY), UNSPECIFIED); - assertToolbarComponentsReceivedWidth(Set.of(BACK)); + assertToolbarComponentsReceivedWidth(Set.of(MENU)); mToolbarTablet.onMeasure( MeasureSpec.makeMeasureSpec(widthForStaticComponents, EXACTLY), UNSPECIFIED); @@ -964,11 +978,18 @@ verify(mTabSwitcherButtonCoordinator, never()).updateVisibility(geq(buttonWidth)); } + if (visibleComponents.contains(MENU)) { + verify(mMenuButtonCoordinator).updateVisibility(geq(buttonWidth)); + } else { + verify(mMenuButtonCoordinator, never()).updateVisibility(geq(buttonWidth)); + } + Mockito.clearInvocations( mHomeButtonCoordinator, mBackButtonCoordinator, mReloadButtonCoordinator, - mTabSwitcherButtonCoordinator); + mTabSwitcherButtonCoordinator, + mMenuButtonCoordinator); // Replace with a mock when the ForwardButtonCoordinator has its own unit tests. assertEquals(
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarUtils.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarUtils.java index 3b67559..065e2d5 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarUtils.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarUtils.java
@@ -69,6 +69,7 @@ public static final @ToolbarComponentId int[] RANKED_TOOLBAR_COMPONENTS = new int[] { + ToolbarComponentId.MENU, ToolbarComponentId.BACK, ToolbarComponentId.TAB_SWITCHER, ToolbarComponentId.ADAPTIVE_BUTTON, @@ -84,6 +85,7 @@ ToolbarComponentId.RELOAD, ToolbarComponentId.ADAPTIVE_BUTTON, ToolbarComponentId.TAB_SWITCHER, + ToolbarComponentId.MENU, ToolbarComponentId.COUNT }) @Retention(RetentionPolicy.SOURCE) @@ -94,7 +96,8 @@ int RELOAD = 3; int ADAPTIVE_BUTTON = 4; int TAB_SWITCHER = 5; - int COUNT = 6; + int MENU = 6; + int COUNT = 7; } /**
diff --git a/chrome/browser/ui/passwords/bubble_controllers/BUILD.gn b/chrome/browser/ui/passwords/bubble_controllers/BUILD.gn index 33236f0..af3a7e5d 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/BUILD.gn +++ b/chrome/browser/ui/passwords/bubble_controllers/BUILD.gn
@@ -13,7 +13,6 @@ "move_to_account_store_bubble_controller.h", "password_bubble_controller_base.h", "post_save_compromised_bubble_controller.h", - "save_unsynced_credentials_locally_bubble_controller.h", "save_update_bubble_controller.h", "shared_passwords_notifications_bubble_controller.h", ] @@ -53,7 +52,6 @@ "move_to_account_store_bubble_controller.cc", "password_bubble_controller_base.cc", "post_save_compromised_bubble_controller.cc", - "save_unsynced_credentials_locally_bubble_controller.cc", "save_update_bubble_controller.cc", "shared_passwords_notifications_bubble_controller.cc", ] @@ -117,7 +115,6 @@ "manage_passwords_bubble_controller_unittest.cc", "move_to_account_store_bubble_controller_unittest.cc", "post_save_compromised_bubble_controller_unittest.cc", - "save_unsynced_credentials_locally_bubble_controller_unittest.cc", "save_update_bubble_controller_unittest.cc", "shared_passwords_notifications_bubble_controller_unittest.cc", ]
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.cc deleted file mode 100644 index 9f3c398b..0000000 --- a/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.cc +++ /dev/null
@@ -1,60 +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. - -#include "chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.h" - -#include <utility> - -#include "chrome/browser/ui/passwords/passwords_model_delegate.h" -#include "chrome/grit/generated_resources.h" -#include "components/password_manager/core/browser/password_form.h" -#include "components/password_manager/core/browser/password_form_metrics_recorder.h" -#include "ui/base/l10n/l10n_util.h" - -namespace metrics_util = password_manager::metrics_util; - -SaveUnsyncedCredentialsLocallyBubbleController:: - SaveUnsyncedCredentialsLocallyBubbleController( - base::WeakPtr<PasswordsModelDelegate> delegate) - : PasswordBubbleControllerBase( - std::move(delegate), - /*display_disposition=*/metrics_util:: - AUTOMATIC_SAVE_UNSYNCED_CREDENTIALS_LOCALLY), - dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION), - unsynced_credentials_(delegate_->GetUnsyncedCredentials()) {} - -SaveUnsyncedCredentialsLocallyBubbleController:: - ~SaveUnsyncedCredentialsLocallyBubbleController() { - OnBubbleClosing(); -} - -void SaveUnsyncedCredentialsLocallyBubbleController::OnSaveClicked( - const std::vector<bool>& was_credential_selected) { - DCHECK(was_credential_selected.size() == unsynced_credentials_.size()); - std::vector<password_manager::PasswordForm> credentials_to_save; - for (size_t i = 0; i < unsynced_credentials_.size(); i++) { - if (was_credential_selected[i]) { - credentials_to_save.push_back(unsynced_credentials_[i]); - } - } - delegate_->SaveUnsyncedCredentialsInProfileStore(credentials_to_save); -} - -void SaveUnsyncedCredentialsLocallyBubbleController::OnCancelClicked() { - delegate_->DiscardUnsyncedCredentials(); -} - -void SaveUnsyncedCredentialsLocallyBubbleController::ReportInteractions() { - metrics_util::LogGeneralUIDismissalReason(dismissal_reason_); - // Record UKM statistics on dismissal reason. - if (metrics_recorder_) { - metrics_recorder_->RecordUIDismissalReason(dismissal_reason_); - } -} - -std::u16string SaveUnsyncedCredentialsLocallyBubbleController::GetTitle() - const { - return l10n_util::GetStringUTF16( - IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_TITLE_GPM); -}
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.h deleted file mode 100644 index c41ea07..0000000 --- a/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.h +++ /dev/null
@@ -1,51 +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. - -#ifndef CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_SAVE_UNSYNCED_CREDENTIALS_LOCALLY_BUBBLE_CONTROLLER_H_ -#define CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_SAVE_UNSYNCED_CREDENTIALS_LOCALLY_BUBBLE_CONTROLLER_H_ - -#include <vector> - -#include "base/memory/weak_ptr.h" -#include "chrome/browser/ui/passwords/bubble_controllers/password_bubble_controller_base.h" - -class PasswordsModelDelegate; - -namespace password_manager { -struct PasswordForm; -} // namespace password_manager - -// This controller provides data and actions for the -// PasswordSaveUnsyncedCredentialsLocallyView. -class SaveUnsyncedCredentialsLocallyBubbleController - : public PasswordBubbleControllerBase { - public: - explicit SaveUnsyncedCredentialsLocallyBubbleController( - base::WeakPtr<PasswordsModelDelegate> delegate); - ~SaveUnsyncedCredentialsLocallyBubbleController() override; - - // Called by the view code when the save button is clicked by the user. Saves - // the credentials whose corresponding position in |was_credential_selected| - // holds true. - void OnSaveClicked(const std::vector<bool>& was_credential_selected); - - // Called by the view code when the cancel button is clicked by the user. - // Drops the unsynced credentials. - void OnCancelClicked(); - - const std::vector<password_manager::PasswordForm>& unsynced_credentials() - const { - return unsynced_credentials_; - } - - private: - // PasswordBubbleControllerBase methods: - std::u16string GetTitle() const override; - void ReportInteractions() override; - - password_manager::metrics_util::UIDismissalReason dismissal_reason_; - std::vector<password_manager::PasswordForm> unsynced_credentials_; -}; - -#endif // CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_SAVE_UNSYNCED_CREDENTIALS_LOCALLY_BUBBLE_CONTROLLER_H_
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller_unittest.cc b/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller_unittest.cc deleted file mode 100644 index 44f6aca..0000000 --- a/chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller_unittest.cc +++ /dev/null
@@ -1,66 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.h" - -#include <vector> - -#include "base/strings/utf_string_conversions.h" -#include "chrome/browser/ui/passwords/passwords_model_delegate_mock.h" -#include "components/password_manager/core/browser/password_form.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using base::ASCIIToUTF16; -using testing::NiceMock; -using testing::ReturnRef; - -class SaveUnsyncedCredentialsLocallyBubbleControllerTest - : public ::testing::Test { - public: - SaveUnsyncedCredentialsLocallyBubbleControllerTest() { - unsynced_credentials_.resize(2); - unsynced_credentials_[0].username_value = u"user1"; - unsynced_credentials_[0].password_value = u"password1"; - unsynced_credentials_[1].username_value = u"user2"; - unsynced_credentials_[1].password_value = u"password2"; - } - ~SaveUnsyncedCredentialsLocallyBubbleControllerTest() override = default; - - protected: - NiceMock<PasswordsModelDelegateMock> model_delegate_mock_; - std::vector<password_manager::PasswordForm> unsynced_credentials_; -}; - -TEST_F(SaveUnsyncedCredentialsLocallyBubbleControllerTest, - ShouldGetCredentialsFromDelegate) { - EXPECT_CALL(model_delegate_mock_, GetUnsyncedCredentials()) - .WillOnce(ReturnRef(unsynced_credentials_)); - SaveUnsyncedCredentialsLocallyBubbleController controller( - model_delegate_mock_.AsWeakPtr()); - EXPECT_EQ(controller.unsynced_credentials(), unsynced_credentials_); -} - -TEST_F(SaveUnsyncedCredentialsLocallyBubbleControllerTest, - ShouldSaveSelectedCredentialsInProfileStoreOnSaveButtonClicked) { - EXPECT_CALL(model_delegate_mock_, GetUnsyncedCredentials()) - .WillOnce(ReturnRef(unsynced_credentials_)); - SaveUnsyncedCredentialsLocallyBubbleController controller( - model_delegate_mock_.AsWeakPtr()); - EXPECT_CALL(model_delegate_mock_, - SaveUnsyncedCredentialsInProfileStore( - std::vector<password_manager::PasswordForm>{ - unsynced_credentials_[1]})); - controller.OnSaveClicked({false, true}); -} - -TEST_F(SaveUnsyncedCredentialsLocallyBubbleControllerTest, - ShouldDiscardCredentialsInProfileStoreOnCancelButtonClicked) { - EXPECT_CALL(model_delegate_mock_, GetUnsyncedCredentials()) - .WillOnce(ReturnRef(unsynced_credentials_)); - SaveUnsyncedCredentialsLocallyBubbleController controller( - model_delegate_mock_.AsWeakPtr()); - EXPECT_CALL(model_delegate_mock_, DiscardUnsyncedCredentials); - controller.OnCancelClicked(); -}
diff --git a/chrome/browser/ui/passwords/manage_passwords_state.cc b/chrome/browser/ui/passwords/manage_passwords_state.cc index cf9c692..08c0a34 100644 --- a/chrome/browser/ui/passwords/manage_passwords_state.cc +++ b/chrome/browser/ui/passwords/manage_passwords_state.cc
@@ -316,12 +316,6 @@ } } -void ManagePasswordsState::ProcessUnsyncedCredentialsWillBeDeleted( - std::vector<password_manager::PasswordForm> unsynced_credentials) { - unsynced_credentials_ = std::move(unsynced_credentials); - SetState(password_manager::ui::WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE); -} - void ManagePasswordsState::ChooseCredential(const PasswordForm* form) { DCHECK_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, state()); DCHECK(!credentials_callback_.is_null()); @@ -348,7 +342,6 @@ clear_selected_password(); local_credentials_forms_.clear(); credentials_callback_.Reset(); - unsynced_credentials_.clear(); single_credential_mode_credential_.reset(); gpm_pin_created_during_recent_passkey_creation_ = false; passkey_rp_id_.clear();
diff --git a/chrome/browser/ui/passwords/manage_passwords_state.h b/chrome/browser/ui/passwords/manage_passwords_state.h index c6316b7..147dd1c2 100644 --- a/chrome/browser/ui/passwords/manage_passwords_state.h +++ b/chrome/browser/ui/passwords/manage_passwords_state.h
@@ -123,9 +123,6 @@ void ProcessLoginsChanged( const password_manager::PasswordStoreChangeList& changes); - void ProcessUnsyncedCredentialsWillBeDeleted( - std::vector<password_manager::PasswordForm> unsynced_credentials); - // Called when the user chooses a credential. |form| is passed to the // credentials callback. Method should be called in the // CREDENTIAL_REQUEST_STATE state. @@ -140,10 +137,6 @@ const std::u16string& new_password); password_manager::ui::State state() const { return state_; } - const std::vector<password_manager::PasswordForm>& unsynced_credentials() - const { - return unsynced_credentials_; - } const url::Origin& origin() const { return origin_; } password_manager::PasswordFormManagerForUI* form_manager() const { return form_manager_.get(); @@ -221,9 +214,6 @@ std::vector<std::unique_ptr<password_manager::PasswordForm>> local_credentials_forms_; - // Contains any non synced credentials. - std::vector<password_manager::PasswordForm> unsynced_credentials_; - // A callback to be invoked when user selects a credential. CredentialsCallback credentials_callback_;
diff --git a/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc index 29d4f1d..0fd82d8e 100644 --- a/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc
@@ -628,17 +628,6 @@ EXPECT_EQ(url::Origin::Create(saved_match().url), passwords_data().origin()); } -TEST_F(ManagePasswordsStateTest, ProcessUnsyncedCredentialsWillBeDeleted) { - std::vector<PasswordForm> unsynced_credentials(1); - unsynced_credentials[0].username_value = u"user"; - unsynced_credentials[0].password_value = u"password"; - passwords_data().ProcessUnsyncedCredentialsWillBeDeleted( - unsynced_credentials); - EXPECT_EQ(passwords_data().state(), - password_manager::ui::WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE); - EXPECT_EQ(passwords_data().unsynced_credentials(), unsynced_credentials); -} - TEST_F(ManagePasswordsStateTest, OnMovablePasswordSubmitted) { std::vector<PasswordForm> password_forms = {saved_match()}; std::vector<PasswordForm> federated_matches = {local_federated_form()};
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index e1efc57ee..4098e3c 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -687,16 +687,6 @@ UpdateBubbleAndIconVisibility(); } -void ManagePasswordsUIController::NotifyUnsyncedCredentialsWillBeDeleted( - std::vector<password_manager::PasswordForm> unsynced_credentials) { - passwords_data_.ProcessUnsyncedCredentialsWillBeDeleted( - std::move(unsynced_credentials)); - DCHECK(GetState() == - password_manager::ui::WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE); - bubble_status_ = BubbleStatus::SHOULD_POP_UP; - UpdateBubbleAndIconVisibility(); -} - void ManagePasswordsUIController::OnLoginsChanged( password_manager::PasswordStoreInterface* /*store*/, const password_manager::PasswordStoreChangeList& changes) { @@ -823,11 +813,6 @@ : password_manager::metrics_util::CredentialSourceType::kUnknown; } -const std::vector<password_manager::PasswordForm>& -ManagePasswordsUIController::GetUnsyncedCredentials() const { - return passwords_data_.unsynced_credentials(); -} - const std::vector<std::unique_ptr<password_manager::PasswordForm>>& ManagePasswordsUIController::GetCurrentForms() const { return passwords_data_.GetCurrentForms(); @@ -1048,30 +1033,6 @@ } } -void ManagePasswordsUIController::SaveUnsyncedCredentialsInProfileStore( - const std::vector<password_manager::PasswordForm>& selected_credentials) { - auto profile_store_form_saver = - std::make_unique<password_manager::FormSaverImpl>( - passwords_data_.client()->GetProfilePasswordStore()); - for (const password_manager::PasswordForm& form : selected_credentials) { - // Only newly-saved or newly-updated credentials can be unsynced. Since - // conflicts are solved in that process, any entry in the profile store - // similar to |form| actually contains the same essential information. This - // means Save() can be safely called here, no password loss happens. - profile_store_form_saver->Save(form, /*matches=*/{}, - /*old_password=*/std::u16string()); - } - ClearPopUpFlagForBubble(); - passwords_data_.OnInactive(); - UpdateBubbleAndIconVisibility(); -} - -void ManagePasswordsUIController::DiscardUnsyncedCredentials() { - ClearPopUpFlagForBubble(); - passwords_data_.OnInactive(); - UpdateBubbleAndIconVisibility(); -} - void ManagePasswordsUIController::MovePasswordToAccountStore() { CHECK(GetState() == password_manager::ui::MOVE_CREDENTIAL_AFTER_LOG_IN_STATE ||
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h index 1a742dc..d99e2bd 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
@@ -133,9 +133,6 @@ void OnPasskeyNotAccepted(std::string passkey_rp_id) override; void OnPasskeyUpgrade(std::string passkey_rp_id) override; - virtual void NotifyUnsyncedCredentialsWillBeDeleted( - std::vector<password_manager::PasswordForm> unsynced_credentials); - // PasswordStoreInterface::Observer: void OnLoginsChanged( password_manager::PasswordStoreInterface* store, @@ -169,8 +166,6 @@ override; password_manager::ui::State GetState() const override; const password_manager::PasswordForm& GetPendingPassword() const override; - const std::vector<password_manager::PasswordForm>& GetUnsyncedCredentials() - const override; password_manager::metrics_util::CredentialSourceType GetCredentialSource() const override; const std::vector<std::unique_ptr<password_manager::PasswordForm>>& @@ -194,10 +189,6 @@ void OnPasswordsRevealed() override; void SavePassword(const std::u16string& username, const std::u16string& password) override; - void SaveUnsyncedCredentialsInProfileStore( - const std::vector<password_manager::PasswordForm>& selected_credentials) - override; - void DiscardUnsyncedCredentials() override; void MovePasswordToAccountStore() override; void MovePendingPasswordToAccountStoreUsingHelper( const password_manager::PasswordForm& form,
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc index 3132d6a..03dca2a 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -235,18 +235,6 @@ } } -password_manager::PasswordForm BuildFormFromLoginAndURL( - const std::string& username, - const std::string& password, - const std::string& url) { - password_manager::PasswordForm form; - form.username_value = base::ASCIIToUTF16(username); - form.password_value = base::ASCIIToUTF16(password); - form.url = GURL(url); - form.signon_realm = form.url.DeprecatedGetOriginAsURL().spec(); - return form; -} - password_manager::PasswordForm CreateInsecureCredential(PasswordForm form) { form.password_issues.insert( {InsecureType::kLeaked, @@ -1711,74 +1699,6 @@ password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); } -TEST_F(ManagePasswordsUIControllerTest, - NotifyUnsyncedCredentialsWillBeDeleted) { - EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); - std::vector<password_manager::PasswordForm> credentials(2); - credentials[0] = - BuildFormFromLoginAndURL("user1", "password1", "http://a.com"); - credentials[1] = - BuildFormFromLoginAndURL("user2", "password2", "http://b.com"); - - controller()->NotifyUnsyncedCredentialsWillBeDeleted(credentials); - - EXPECT_EQ(controller()->GetUnsyncedCredentials(), credentials); - EXPECT_TRUE(controller()->opened_automatic_bubble()); - ExpectIconAndControllerStateIs( - password_manager::ui::WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE); -} - -TEST_F(ManagePasswordsUIControllerTest, SaveUnsyncedCredentialsInProfileStore) { - std::vector<password_manager::PasswordForm> credentials = { - BuildFormFromLoginAndURL("user1", "password1", "http://a.com"), - BuildFormFromLoginAndURL("user2", "password2", "http://b.com")}; - - // Set expectations on the store. - MockPasswordStoreInterface* profile_store = - client().GetProfilePasswordStore(); - EXPECT_CALL(*profile_store, - AddLogin(MatchesLoginAndURL(credentials[0].username_value, - credentials[0].password_value, - credentials[0].url), - _)); - EXPECT_CALL(*profile_store, - AddLogin(MatchesLoginAndURL(credentials[1].username_value, - credentials[1].password_value, - credentials[1].url), - _)); - - // Save. - EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); - controller()->SaveUnsyncedCredentialsInProfileStore(credentials); - - // Check the credentials are gone and the bubble is closed. - EXPECT_TRUE(controller()->GetUnsyncedCredentials().empty()); - EXPECT_FALSE(controller()->opened_automatic_bubble()); - ExpectIconAndControllerStateIs(password_manager::ui::INACTIVE_STATE); -} - -TEST_F(ManagePasswordsUIControllerTest, DiscardUnsyncedCredentials) { - // Setup state with unsynced credentials. - EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); - std::vector<password_manager::PasswordForm> credentials = { - BuildFormFromLoginAndURL("user", "password", "http://a.com")}; - controller()->NotifyUnsyncedCredentialsWillBeDeleted(std::move(credentials)); - - // No save should happen on the profile store. - MockPasswordStoreInterface* profile_store = - client().GetProfilePasswordStore(); - EXPECT_CALL(*profile_store, AddLogin).Times(0); - - // Discard. - EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); - controller()->DiscardUnsyncedCredentials(); - - // Check the credentials are gone and the bubble is closed. - EXPECT_TRUE(controller()->GetUnsyncedCredentials().empty()); - EXPECT_FALSE(controller()->opened_automatic_bubble()); - ExpectIconAndControllerStateIs(password_manager::ui::INACTIVE_STATE); -} - TEST_F(ManagePasswordsUIControllerTest, OpenBubbleForMovableForm) { base::HistogramTester histogram_tester;
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate.h b/chrome/browser/ui/passwords/passwords_model_delegate.h index 8aa2c060..95c1937 100644 --- a/chrome/browser/ui/passwords/passwords_model_delegate.h +++ b/chrome/browser/ui/passwords/passwords_model_delegate.h
@@ -62,10 +62,6 @@ // SAVE_CONFIRMATION_STATE, the returned credential in AUTO_SIGNIN_STATE. virtual const password_manager::PasswordForm& GetPendingPassword() const = 0; - // Returns unsynced credentials being deleted upon signout. - virtual const std::vector<password_manager::PasswordForm>& - GetUnsyncedCredentials() const = 0; - // Returns the source of the credential to be saved. virtual password_manager::metrics_util::CredentialSourceType GetCredentialSource() const = 0; @@ -136,17 +132,6 @@ virtual void SavePassword(const std::u16string& username, const std::u16string& password) = 0; - // Called when the user chooses to save locally some of the unsynced - // credentials that were deleted from the account store on signout. - virtual void SaveUnsyncedCredentialsInProfileStore( - const std::vector<password_manager::PasswordForm>& - selected_credentials) = 0; - - // Called when the user chooses not to save locally the unsynced credentials - // deleted from the account store on signout (the ones returned by - // GetUnsyncedCredentials()). - virtual void DiscardUnsyncedCredentials() = 0; - // Called from the dialog controller when a user confirms moving the recently // used or selected credential to their account store. virtual void MovePasswordToAccountStore() = 0;
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h index 92daddf..580ee47 100644 --- a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h +++ b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
@@ -39,10 +39,6 @@ GetPendingPassword, (), (const override)); - MOCK_METHOD(const std::vector<password_manager::PasswordForm>&, - GetUnsyncedCredentials, - (), - (const override)); MOCK_METHOD(password_manager::metrics_util::CredentialSourceType, GetCredentialSource, (), @@ -86,11 +82,6 @@ SavePassword, (const std::u16string&, const std::u16string&), (override)); - MOCK_METHOD(void, - SaveUnsyncedCredentialsInProfileStore, - (const std::vector<password_manager::PasswordForm>&), - (override)); - MOCK_METHOD(void, DiscardUnsyncedCredentials, (), (override)); MOCK_METHOD(void, MovePasswordToAccountStore, (), (override)); MOCK_METHOD(void, BlockMovingPasswordToAccountStore, (), (override)); MOCK_METHOD(void,
diff --git a/chrome/browser/ui/signin/BUILD.gn b/chrome/browser/ui/signin/BUILD.gn index 9603f038..3bec370d 100644 --- a/chrome/browser/ui/signin/BUILD.gn +++ b/chrome/browser/ui/signin/BUILD.gn
@@ -189,12 +189,12 @@ "//base/test:test_support", "//chrome/browser", "//chrome/browser/sync", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/browser/ui", "//chrome/browser/ui:ui_features", "//chrome/browser/ui/browser_window", "//chrome/browser/ui/views/frame:toolbar_button_provider", "//chrome/browser/ui/webui/signin:test_support_ui", - "//chrome/test:sync_integration_test_support", "//chrome/test:test_support_ui", "//components/signin/public/base", "//components/signin/public/base:signin_switches", @@ -216,7 +216,6 @@ "//chrome/browser/ui/toasts/api:toasts", "//chrome/browser/ui/webui/signin/signout_confirmation", "//chrome/browser/web_applications:web_applications_test_support", - "//chrome/test:sync_integration_test_support", "//chrome/test:test_support", "//components/sync:test_support", ]
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_page_action_controller.cc b/chrome/browser/ui/views/passwords/manage_passwords_page_action_controller.cc index 5ef27d6..50eb552 100644 --- a/chrome/browser/ui/views/passwords/manage_passwords_page_action_controller.cc +++ b/chrome/browser/ui/views/passwords/manage_passwords_page_action_controller.cc
@@ -48,7 +48,6 @@ case password_manager::ui::UPDATE_CONFIRMATION_STATE: case password_manager::ui::CREDENTIAL_REQUEST_STATE: case password_manager::ui::AUTO_SIGNIN_STATE: - case password_manager::ui::WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE: case password_manager::ui::MANAGE_STATE: case password_manager::ui::PASSWORD_UPDATED_SAFE_STATE: case password_manager::ui::PASSWORD_UPDATED_MORE_TO_FIX:
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc index d699091..d7eacfb 100644 --- a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc +++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
@@ -25,7 +25,6 @@ #include "chrome/browser/ui/views/passwords/password_add_username_view.h" #include "chrome/browser/ui/views/passwords/password_auto_sign_in_view.h" #include "chrome/browser/ui/views/passwords/password_change/successful_password_change_view.h" -#include "chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h" #include "chrome/browser/ui/views/passwords/password_save_update_view.h" #include "chrome/browser/ui/views/passwords/post_save_compromised_bubble_view.h" #include "chrome/browser/ui/views/passwords/shared_passwords_notification_view.h" @@ -131,10 +130,6 @@ password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || model_state == password_manager::ui::PENDING_PASSWORD_STATE) { view = new PasswordSaveUpdateView(web_contents, anchor_view, reason); - } else if (model_state == password_manager::ui:: - WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE) { - view = new PasswordSaveUnsyncedCredentialsLocallyView(web_contents, - anchor_view); } else if (model_state == password_manager::ui::MOVE_CREDENTIAL_AFTER_LOG_IN_STATE || model_state == password_manager::ui::
diff --git a/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.cc b/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.cc deleted file mode 100644 index 74ed27d..0000000 --- a/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.cc +++ /dev/null
@@ -1,135 +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. - -#include "chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h" - -#include <numeric> -#include <string> -#include <utility> - -#include "chrome/browser/ui/passwords/passwords_model_delegate.h" -#include "chrome/browser/ui/passwords/ui_utils.h" -#include "chrome/browser/ui/views/chrome_layout_provider.h" -#include "chrome/browser/ui/views/chrome_typography.h" -#include "chrome/browser/ui/views/passwords/views_utils.h" -#include "chrome/grit/generated_resources.h" -#include "ui/base/l10n/l10n_util.h" -#include "ui/base/metadata/metadata_impl_macros.h" -#include "ui/base/mojom/dialog_button.mojom.h" -#include "ui/base/ui_base_types.h" -#include "ui/views/accessibility/view_accessibility.h" -#include "ui/views/border.h" -#include "ui/views/controls/label.h" -#include "ui/views/layout/box_layout.h" -#include "ui/views/window/dialog_delegate.h" - -PasswordSaveUnsyncedCredentialsLocallyView:: - PasswordSaveUnsyncedCredentialsLocallyView( - content::WebContents* web_contents, - views::View* anchor_view) - : PasswordBubbleViewBase(web_contents, - anchor_view, - /*easily_dismissable=*/false), - controller_(PasswordsModelDelegateFromWebContents(web_contents)) { - SetButtons(static_cast<int>(ui::mojom::DialogButton::kOk) | - static_cast<int>(ui::mojom::DialogButton::kCancel)); - SetAcceptCallback( - base::BindOnce(&PasswordSaveUnsyncedCredentialsLocallyView::OnSaveClicked, - base::Unretained(this))); - SetButtonLabel( - ui::mojom::DialogButton::kOk, - l10n_util::GetStringUTF16( - IDS_PASSWORD_MANAGER_SAVE_UNSYNCED_CREDENTIALS_BUTTON_GPM)); - SetButtonLabel(ui::mojom::DialogButton::kCancel, - l10n_util::GetStringUTF16( - IDS_PASSWORD_MANAGER_DISCARD_UNSYNCED_CREDENTIALS_BUTTON)); - SetCancelCallback(base::BindOnce( - &SaveUnsyncedCredentialsLocallyBubbleController::OnCancelClicked, - base::Unretained(&controller_))); - SetShowIcon(true); - CreateLayout(); -} - -PasswordSaveUnsyncedCredentialsLocallyView:: - ~PasswordSaveUnsyncedCredentialsLocallyView() = default; - -PasswordBubbleControllerBase* -PasswordSaveUnsyncedCredentialsLocallyView::GetController() { - return &controller_; -} - -const PasswordBubbleControllerBase* -PasswordSaveUnsyncedCredentialsLocallyView::GetController() const { - return &controller_; -} - -ui::ImageModel PasswordSaveUnsyncedCredentialsLocallyView::GetWindowIcon() { - return ui::ImageModel::FromVectorIcon(GooglePasswordManagerVectorIcon(), - ui::kColorIcon); -} - -void PasswordSaveUnsyncedCredentialsLocallyView::CreateLayout() { - SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical)); - - auto description = std::make_unique<views::Label>( - l10n_util::GetStringUTF16( - IDS_PASSWORD_MANAGER_UNSYNCED_CREDENTIALS_BUBBLE_DESCRIPTION_GPM), - views::style::CONTEXT_DIALOG_BODY_TEXT, views::style::STYLE_HINT); - description->SetMultiLine(true); - description->SetHorizontalAlignment(gfx::ALIGN_LEFT); - description->SetBorder(views::CreateEmptyBorder( - gfx::Insets::TLBR(0, 0, - ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_RELATED_CONTROL_VERTICAL_SMALL), - 0))); - AddChildView(std::move(description)); - - DCHECK(!controller_.unsynced_credentials().empty()); - for (const password_manager::PasswordForm& form : - controller_.unsynced_credentials()) { - auto* row_view = AddChildView(std::make_unique<views::View>()); - auto* checkbox = row_view->AddChildView(std::make_unique<views::Checkbox>( - std::u16string(), views::Button::PressedCallback())); - checkbox->SetCallback(base::BindRepeating( - &PasswordSaveUnsyncedCredentialsLocallyView::ButtonPressed, - base::Unretained(this), base::Unretained(checkbox))); - checkbox->SetBorder(views::CreateEmptyBorder( - gfx::Insets::TLBR(0, 0, 0, - ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_RELATED_CONTROL_HORIZONTAL_SMALL)))); - // Usually all passwords should be saved, so they're selected by default. - checkbox->SetChecked(true); - num_selected_checkboxes_++; - auto* username_label = row_view->AddChildView(CreateUsernameLabel(form)); - checkbox->GetViewAccessibility().SetName(*username_label); - auto* password_label = row_view->AddChildView(CreatePasswordLabel(form)); - auto* row_layout = - row_view->SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kHorizontal)); - row_layout->SetFlexForView(username_label, 1); - row_layout->SetFlexForView(password_label, 1); - - checkboxes_.push_back(checkbox); - } -} - -void PasswordSaveUnsyncedCredentialsLocallyView::ButtonPressed( - views::Checkbox* checkbox) { - num_selected_checkboxes_ += checkbox->GetChecked() ? 1 : -1; - GetOkButton()->SetState(num_selected_checkboxes_ - ? views::Button::ButtonState::STATE_NORMAL - : views::Button::ButtonState::STATE_DISABLED); -} - -void PasswordSaveUnsyncedCredentialsLocallyView::OnSaveClicked() { - std::vector<bool> was_credential_selected; - for (const views::Checkbox* checkbox : checkboxes_) { - was_credential_selected.push_back(checkbox->GetChecked()); - } - controller_.OnSaveClicked(was_credential_selected); -} - -BEGIN_METADATA(PasswordSaveUnsyncedCredentialsLocallyView) -END_METADATA
diff --git a/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h b/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h deleted file mode 100644 index b1d300b6..0000000 --- a/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h +++ /dev/null
@@ -1,50 +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. - -#ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_SAVE_UNSYNCED_CREDENTIALS_LOCALLY_VIEW_H_ -#define CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_SAVE_UNSYNCED_CREDENTIALS_LOCALLY_VIEW_H_ - -#include <memory> -#include <vector> - -#include "base/memory/raw_ptr.h" -#include "chrome/browser/ui/passwords/bubble_controllers/save_unsynced_credentials_locally_bubble_controller.h" -#include "chrome/browser/ui/views/passwords/password_bubble_view_base.h" -#include "components/password_manager/core/browser/password_form.h" -#include "content/public/browser/web_contents.h" -#include "ui/base/metadata/metadata_header_macros.h" -#include "ui/views/controls/button/checkbox.h" -#include "ui/views/view.h" - -// A dialog that shows up on sign out in case there are passwords not committed -// to the user account. By clicking the save button, the user can save those -// passwords locally. -class PasswordSaveUnsyncedCredentialsLocallyView - : public PasswordBubbleViewBase { - METADATA_HEADER(PasswordSaveUnsyncedCredentialsLocallyView, - PasswordBubbleViewBase) - - public: - PasswordSaveUnsyncedCredentialsLocallyView(content::WebContents* web_contents, - views::View* anchor_view); - ~PasswordSaveUnsyncedCredentialsLocallyView() override; - - private: - // PasswordBubbleViewBase: - PasswordBubbleControllerBase* GetController() override; - const PasswordBubbleControllerBase* GetController() const override; - ui::ImageModel GetWindowIcon() override; - - void CreateLayout(); - - void ButtonPressed(views::Checkbox* checkbox); - - void OnSaveClicked(); - - SaveUnsyncedCredentialsLocallyBubbleController controller_; - int num_selected_checkboxes_ = 0; - std::vector<raw_ptr<views::Checkbox, VectorExperimental>> checkboxes_; -}; - -#endif // CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_SAVE_UNSYNCED_CREDENTIALS_LOCALLY_VIEW_H_
diff --git a/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view_unittest.cc b/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view_unittest.cc deleted file mode 100644 index 3a2e210..0000000 --- a/chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view_unittest.cc +++ /dev/null
@@ -1,66 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/passwords/password_save_unsynced_credentials_locally_view.h" - -#include <utility> -#include <vector> - -#include "base/memory/raw_ptr.h" -#include "base/strings/utf_string_conversions.h" -#include "chrome/browser/ui/passwords/passwords_model_delegate_mock.h" -#include "chrome/browser/ui/views/passwords/password_bubble_view_test_base.h" -#include "components/password_manager/core/browser/password_form.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "ui/views/bubble/bubble_dialog_delegate_view.h" -#include "ui/views/widget/widget.h" - -using base::ASCIIToUTF16; -using testing::ReturnRef; - -class PasswordSaveUnsyncedCredentialsLocallyViewTest - : public PasswordBubbleViewTestBase { - public: - PasswordSaveUnsyncedCredentialsLocallyViewTest() { - ON_CALL(*model_delegate_mock(), GetUnsyncedCredentials()) - .WillByDefault(ReturnRef(unsynced_credentials_)); - - unsynced_credentials_.resize(1); - unsynced_credentials_[0].username_value = u"user"; - unsynced_credentials_[0].password_value = u"password"; - } - ~PasswordSaveUnsyncedCredentialsLocallyViewTest() override = default; - - void CreateViewAndShow(); - - void TearDown() override; - - protected: - raw_ptr<PasswordSaveUnsyncedCredentialsLocallyView> view_ = nullptr; - std::vector<password_manager::PasswordForm> unsynced_credentials_; -}; - -void PasswordSaveUnsyncedCredentialsLocallyViewTest::CreateViewAndShow() { - CreateAnchorViewAndShow(); - - view_ = new PasswordSaveUnsyncedCredentialsLocallyView(web_contents(), - anchor_view()); - views::BubbleDialogDelegateView::CreateBubble(view_)->Show(); -} - -void PasswordSaveUnsyncedCredentialsLocallyViewTest::TearDown() { - std::exchange(view_, nullptr) - ->GetWidget() - ->CloseWithReason(views::Widget::ClosedReason::kCloseButtonClicked); - - PasswordBubbleViewTestBase::TearDown(); -} - -TEST_F(PasswordSaveUnsyncedCredentialsLocallyViewTest, HasTitleAndTwoButtons) { - CreateViewAndShow(); - EXPECT_TRUE(view_->ShouldShowWindowTitle()); - EXPECT_TRUE(view_->GetOkButton()); - EXPECT_TRUE(view_->GetCancelButton()); -}
diff --git a/chrome/browser/ui/webui/ash/edu_coexistence/edu_coexistence_login_handler.cc b/chrome/browser/ui/webui/ash/edu_coexistence/edu_coexistence_login_handler.cc index 5e8b14fd..7c4bc05 100644 --- a/chrome/browser/ui/webui/ash/edu_coexistence/edu_coexistence_login_handler.cc +++ b/chrome/browser/ui/webui/ash/edu_coexistence/edu_coexistence_login_handler.cc
@@ -157,17 +157,11 @@ // Start observing IdentityManager. identity_manager->AddObserver(this); - OAuth2AccessTokenManager::ScopeSet scopes; - scopes.insert(GaiaConstants::kKidsSupervisionSetupChildOAuth2Scope); - scopes.insert(GaiaConstants::kAccountsReauthOAuth2Scope); - scopes.insert(GaiaConstants::kAuditRecordingOAuth2Scope); - scopes.insert(GaiaConstants::kClearCutOAuth2Scope); - scopes.insert(GaiaConstants::kKidManagementPrivilegedOAuth2Scope); - // Start fetching oauth access token. access_token_fetcher_ = std::make_unique<signin::PrimaryAccountAccessTokenFetcher>( - "EduCoexistenceLoginHandler", identity_manager, scopes, + signin::OAuthConsumerId::kEduCoexistenceLoginHandler, + identity_manager, base::BindOnce( &EduCoexistenceLoginHandler::OnOAuthAccessTokensFetched, base::Unretained(this)),
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc index 2aef280..f90ad537 100644 --- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc +++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
@@ -94,8 +94,10 @@ SkColor color = cp.GetColor(id); // If web contents are being inverted because the system is in high-contrast // mode, any system theme colors we use must be inverted too to cancel out. - return native_theme->GetPlatformHighContrastColorScheme() == - ui::NativeTheme::PlatformHighContrastColorScheme::kDark + // TODO(pkasting): I'm not sure this conditional is correct anymore. + return (native_theme->InForcedColorsMode() && + native_theme->GetPreferredColorScheme() == + ui::NativeTheme::PreferredColorScheme::kDark) ? color_utils::InvertColor(color) : color; }
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc index 7f7f9ef..aa5a236 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -340,9 +340,9 @@ class SiteSettingsHandlerBaseTest : public testing::Test { public: - SiteSettingsHandlerBaseTest() { - // Fully initialize |profile_| in the constructor since some children - // classes need it right away for SetUp(). + SiteSettingsHandlerBaseTest() = default; + + void SetUp() override { testing_profile_manager_ = std::make_unique<TestingProfileManager>( TestingBrowserProcess::GetGlobal()); EXPECT_TRUE(testing_profile_manager_->SetUp()); @@ -356,9 +356,7 @@ #if BUILDFLAG(IS_CHROMEOS) SetUpUserManager(profile_.get()); #endif - } - void SetUp() override { browsing_topics::BrowsingTopicsServiceFactory::GetInstance() ->SetTestingFactoryAndUse( profile(), @@ -380,6 +378,8 @@ safety_hub_test_util::CreateNotificationPermissionsReviewService(profile()); + SetUpIsolatedWebApp(); + handler_ = std::make_unique<SiteSettingsHandler>(profile()); handler()->set_web_ui(web_ui()); handler()->AllowJavascript(); @@ -1174,6 +1174,9 @@ /*storage_size=*/0, /*cookie_count=*/1}}; + protected: + virtual void SetUpIsolatedWebApp() {} + private: content::BrowserTaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; @@ -2951,12 +2954,10 @@ class SiteSettingsHandlerIsolatedWebAppTest : public SiteSettingsHandlerBaseTest { - public: - void SetUp() override { + protected: + void SetUpIsolatedWebApp() override { web_app::test::AwaitStartWebAppProviderAndSubsystems(profile()); iwa_url_info_ = InstallIsolatedWebApp("IWA Name"); - - SiteSettingsHandlerBaseTest::SetUp(); } protected: @@ -3980,26 +3981,12 @@ class PersistentPermissionsSiteSettingsHandlerTest : public SiteSettingsHandlerBaseTest { - void SetUp() override { - SiteSettingsHandlerBaseTest::SetUp(); - handler_ = std::make_unique<SiteSettingsHandler>(&profile_); - handler_->set_web_ui(web_ui()); - handler_->AllowJavascript(); - web_ui()->ClearTrackedCalls(); - } - - void TearDown() override { handler_->DisallowJavascript(); } - public: PersistentPermissionsSiteSettingsHandlerTest() { feature_list_.InitAndEnableFeature( features::kFileSystemAccessPersistentPermissions); } - protected: - TestingProfile profile_; - std::unique_ptr<SiteSettingsHandler> handler_; - private: base::test::ScopedFeatureList feature_list_; }; @@ -4009,7 +3996,7 @@ TEST_F(PersistentPermissionsSiteSettingsHandlerTest, HandleGetFileSystemGrants) { ChromeFileSystemAccessPermissionContext* context = - FileSystemAccessPermissionContextFactory::GetForProfile(&profile_); + FileSystemAccessPermissionContextFactory::GetForProfile(profile()); auto kTestOrigin1 = url::Origin::Create(GURL("https://www.a.com")); auto kTestOrigin2 = url::Origin::Create(GURL("https://www.b.com")); @@ -4054,7 +4041,7 @@ base::Value::List get_file_system_permissions_args; get_file_system_permissions_args.Append(kCallbackId); - handler_->HandleGetFileSystemGrants(get_file_system_permissions_args); + handler()->HandleGetFileSystemGrants(get_file_system_permissions_args); const content::TestWebUI::CallData& data = *web_ui()->call_data().back(); const base::Value::List& grants = data.arg3()->GetList(); @@ -4109,7 +4096,7 @@ TEST_F(PersistentPermissionsSiteSettingsHandlerTest, HandleRevokeFileSystemGrant) { ChromeFileSystemAccessPermissionContext* context = - FileSystemAccessPermissionContextFactory::GetForProfile(&profile_); + FileSystemAccessPermissionContextFactory::GetForProfile(profile()); auto kTestOrigin1 = url::Origin::Create(GURL("https://www.a.com")); auto kTestOrigin2 = url::Origin::Create(GURL("https://www.b.com")); @@ -4146,8 +4133,8 @@ base::Value::List get_file_system_grants_permissions_args; get_file_system_grants_permissions_args.Append(kCallbackId); - handler_->HandleRevokeFileSystemGrant(revoke_origin1_grant_permissions_args); - handler_->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); + handler()->HandleRevokeFileSystemGrant(revoke_origin1_grant_permissions_args); + handler()->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); const content::TestWebUI::CallData& data = *web_ui()->call_data().back(); const base::Value::List& grants = data.arg3()->GetList(); @@ -4168,8 +4155,8 @@ revoke_origin2_grant_permissions_args.Append("https://www.b.com"); revoke_origin2_grant_permissions_args.Append("/e/"); - handler_->HandleRevokeFileSystemGrant(revoke_origin2_grant_permissions_args); - handler_->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); + handler()->HandleRevokeFileSystemGrant(revoke_origin2_grant_permissions_args); + handler()->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); const content::TestWebUI::CallData& updated_data = *web_ui()->call_data().back(); const base::Value::List& updated_grants = updated_data.arg3()->GetList(); @@ -4191,7 +4178,7 @@ TEST_F(PersistentPermissionsSiteSettingsHandlerTest, HandleRevokeFileSystemGrants) { ChromeFileSystemAccessPermissionContext* context = - FileSystemAccessPermissionContextFactory::GetForProfile(&profile_); + FileSystemAccessPermissionContextFactory::GetForProfile(profile()); auto kTestOrigin1 = url::Origin::Create(GURL("https://www.a.com")); auto kTestOrigin2 = url::Origin::Create(GURL("https://www.b.com")); @@ -4223,7 +4210,7 @@ base::Value::List get_file_system_grants_permissions_args; get_file_system_grants_permissions_args.Append(kCallbackId); - handler_->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); + handler()->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); const content::TestWebUI::CallData& data = *web_ui()->call_data().back(); const base::Value::List& grants = data.arg3()->GetList(); @@ -4234,9 +4221,9 @@ base::Value::List revoke_origin1_grants_permissions_args; revoke_origin1_grants_permissions_args.Append("https://www.a.com"); - handler_->HandleRevokeFileSystemGrants( + handler()->HandleRevokeFileSystemGrants( revoke_origin1_grants_permissions_args); - handler_->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); + handler()->HandleGetFileSystemGrants(get_file_system_grants_permissions_args); const content::TestWebUI::CallData& updated_data = *web_ui()->call_data().back(); const base::Value::List& updated_grants = updated_data.arg3()->GetList();
diff --git a/chrome/browser/ui/webui/signin/ash/edu_account_login_handler.cc b/chrome/browser/ui/webui/signin/ash/edu_account_login_handler.cc index d892831..80332df1 100644 --- a/chrome/browser/ui/webui/signin/ash/edu_account_login_handler.cc +++ b/chrome/browser/ui/webui/signin/ash/edu_account_login_handler.cc
@@ -221,11 +221,9 @@ Profile* profile = Profile::FromWebUI(web_ui()); signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); - OAuth2AccessTokenManager::ScopeSet scopes; - scopes.insert(GaiaConstants::kAccountsReauthOAuth2Scope); access_token_fetcher_ = std::make_unique<signin::PrimaryAccountAccessTokenFetcher>( - "EduAccountLoginHandler", identity_manager, scopes, + signin::OAuthConsumerId::kEduAccountLoginHandler, identity_manager, base::BindOnce( &EduAccountLoginHandler::CreateReAuthProofTokenForParent, base::Unretained(this), std::move(obfuscated_gaia_id),
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc index c364d1c..65a1857 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc
@@ -1454,8 +1454,12 @@ tab_data->show_icon = tab_renderer_data.show_icon; + // https://crbug.com/435697558: Use the max value of + // GetLastInteractionTimeTicks and GetLastActiveTimeTicks to account for + // interaction without across multiple windows without switching tabs. const base::TimeTicks last_active_time_ticks = - contents->GetLastActiveTimeTicks(); + std::max(contents->GetLastInteractionTimeTicks(), + contents->GetLastActiveTimeTicks()); tab_data->last_active_time_ticks = last_active_time_ticks; // last_active_time_for_testing can affect pixel tests depending on when the
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc index 3203d2a..32d6548 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc
@@ -405,6 +405,52 @@ handler()->GetProfileData(std::move(callback3)); } +TEST_F(TabSearchPageHandlerTest, TabActivationChangedByInteraction) { + EXPECT_CALL(page_, TabUpdated(_)).Times(1); + EXPECT_CALL(page_, TabsRemoved(_)).Times(1); + + AddTabWithTitle(browser1(), GURL(kTabUrl1), kTabName1); + AddTabWithTitle(browser1(), GURL(kTabUrl2), kTabName2); + + base::TimeTicks tab1_ticks; + base::TimeTicks tab2_ticks; + + // Get initial last active time ticks. + tab_search::mojom::PageHandler::GetProfileDataCallback callback1 = + base::BindLambdaForTesting( + [&](tab_search::mojom::ProfileDataPtr profile_tabs) { + ASSERT_EQ(2u, profile_tabs->windows.size()); + auto* window1 = profile_tabs->windows[0].get(); + ASSERT_EQ(2u, window1->tabs.size()); + // Tabs are in index order. + tab1_ticks = window1->tabs[0]->last_active_time_ticks; + tab2_ticks = window1->tabs[1]->last_active_time_ticks; + }); + handler()->GetProfileData(std::move(callback1)); + + auto task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>(); + task_runner->FastForwardBy(base::Seconds(1)); + + // Simulate interaction with the first tab. + browser1()->tab_strip_model()->GetWebContentsAt(0)->Copy(); + + // Get last active time ticks again and verify. + tab_search::mojom::PageHandler::GetProfileDataCallback callback2 = + base::BindLambdaForTesting( + [&](tab_search::mojom::ProfileDataPtr profile_tabs) { + ASSERT_EQ(2u, profile_tabs->windows.size()); + auto* window1 = profile_tabs->windows[0].get(); + ASSERT_EQ(2u, window1->tabs.size()); + base::TimeTicks new_tab1_ticks = + window1->tabs[0]->last_active_time_ticks; + base::TimeTicks new_tab2_ticks = + window1->tabs[1]->last_active_time_ticks; + EXPECT_GT(new_tab1_ticks, tab1_ticks); + EXPECT_EQ(new_tab2_ticks, tab2_ticks); + }); + handler()->GetProfileData(std::move(callback2)); +} + TEST_F(TabSearchPageHandlerTest, TabsAndGroups) { ASSERT_TRUE(browser()->tab_strip_model()->SupportsTabGroups());
diff --git a/chrome/browser/web_applications/commands/internal/command_internal.cc b/chrome/browser/web_applications/commands/internal/command_internal.cc index 753d1c54..af612d4 100644 --- a/chrome/browser/web_applications/commands/internal/command_internal.cc +++ b/chrome/browser/web_applications/commands/internal/command_internal.cc
@@ -11,6 +11,7 @@ #include "base/atomic_sequence_num.h" #include "base/check.h" #include "base/functional/bind.h" +#include "base/i18n/time_formatting.h" #include "base/location.h" #include "base/values.h" #include "chrome/browser/web_applications/locks/all_apps_lock.h" @@ -71,6 +72,14 @@ ->Set("scheduled_location", location.ToString()); } +void CommandBase::SetScheduledAt(base::PassKey<WebAppCommandManager>) { + DCHECK_CALLED_ON_VALID_SEQUENCE(command_sequence_checker_); + GetMutableDebugValue() + .EnsureDict("!metadata") + ->Set("scheduled_at", + base::TimeFormatTimeOfDayWithMilliseconds(base::Time::Now())); +} + void CommandBase::SetCommandManager(base::PassKey<WebAppCommandManager>, WebAppCommandManager* command_manager) { DCHECK_CALLED_ON_VALID_SEQUENCE(command_sequence_checker_); @@ -93,7 +102,10 @@ void CommandBase::SetStarted() { DCHECK_CALLED_ON_VALID_SEQUENCE(command_sequence_checker_); started_ = true; - GetMutableDebugValue().EnsureDict("!metadata")->Set("started", true); + auto* metadata = GetMutableDebugValue().EnsureDict("!metadata"); + metadata->Set("started", true); + metadata->Set("started_at", + base::TimeFormatTimeOfDayWithMilliseconds(base::Time::Now())); } void CommandBase::CompleteAndSelfDestructInternal(
diff --git a/chrome/browser/web_applications/commands/internal/command_internal.h b/chrome/browser/web_applications/commands/internal/command_internal.h index 65c1f70..aa0cb9b 100644 --- a/chrome/browser/web_applications/commands/internal/command_internal.h +++ b/chrome/browser/web_applications/commands/internal/command_internal.h
@@ -68,6 +68,8 @@ void SetScheduledLocation(base::PassKey<WebAppCommandManager>, const base::Location& location); + void SetScheduledAt(base::PassKey<WebAppCommandManager>); + // Sets the command manager, allowing `CompleteAndSelfDestruct` to // work correctly. void SetCommandManager(base::PassKey<WebAppCommandManager>,
diff --git a/chrome/browser/web_applications/commands/web_app_command.h b/chrome/browser/web_applications/commands/web_app_command.h index cb3c618..72cb1ce 100644 --- a/chrome/browser/web_applications/commands/web_app_command.h +++ b/chrome/browser/web_applications/commands/web_app_command.h
@@ -13,10 +13,12 @@ #include "base/functional/bind.h" #include "base/functional/callback.h" +#include "base/i18n/time_formatting.h" #include "base/location.h" #include "base/memory/raw_ptr.h" #include "base/sequence_checker.h" #include "base/strings/to_string.h" +#include "base/time/time.h" #include "base/types/pass_key.h" #include "base/values.h" #include "chrome/browser/web_applications/commands/command_result.h" @@ -191,6 +193,8 @@ "result", base::ToString(std::tie<CallbackArgs&...>(args_for_callback...))); metadata->Set("completion_location", base::ToString(location)); + metadata->Set("completed_at", + base::TimeFormatTimeOfDayWithMilliseconds(base::Time::Now())); // Note: `BindOnce` should correctly handle copying any ref or move // arguments internally. This allows the callback arguments to contain ref
diff --git a/chrome/browser/web_applications/web_app_command_manager.cc b/chrome/browser/web_applications/web_app_command_manager.cc index dd08b3d0..7521821 100644 --- a/chrome/browser/web_applications/web_app_command_manager.cc +++ b/chrome/browser/web_applications/web_app_command_manager.cc
@@ -71,6 +71,7 @@ command->SetScheduledLocation(base::PassKey<WebAppCommandManager>(), location); + command->SetScheduledAt(base::PassKey<WebAppCommandManager>()); command->SetCommandManager(base::PassKey<WebAppCommandManager>(), this); internal::CommandBase::Id command_id = command->id(); CHECK(!base::Contains(commands_, command_id));
diff --git a/chrome/browser/web_applications/web_app_command_manager_unittest.cc b/chrome/browser/web_applications/web_app_command_manager_unittest.cc index 66bbf46..ff4812c 100644 --- a/chrome/browser/web_applications/web_app_command_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_command_manager_unittest.cc
@@ -11,6 +11,7 @@ #include "base/barrier_callback.h" #include "base/barrier_closure.h" #include "base/containers/flat_set.h" +#include "base/containers/to_vector.h" #include "base/functional/callback_forward.h" #include "base/functional/callback_helpers.h" #include "base/location.h" @@ -527,14 +528,8 @@ auto get_metadata_field_names = [](const base::Value::Dict& command_dict) -> std::vector<std::string> { - std::vector<std::string> names; - const base::Value::Dict* metadata = command_dict.FindDict("!metadata"); - std::transform( - metadata->cbegin(), metadata->cend(), std::back_inserter(names), - [](base::Value::Dict::const_iterator::reference pair) -> std::string { - return pair.first; - }); - return names; + return base::ToVector(*command_dict.FindDict("!metadata"), + [](const auto& kv) { return kv.first; }); }; base::Value::List* log = command_manager_debug_value.FindList("command_log"); @@ -544,16 +539,17 @@ get_metadata_field_names(log->front().GetDict()), ::testing::UnorderedElementsAre( "command_result", "completion_location", "id", "initial_lock_request", - "name", "result", "started", "scheduled_location")); + "name", "result", "started", "scheduled_location", "scheduled_at", + "completed_at", "started_at")); base::Value::List* queue = command_manager_debug_value.FindList("command_queue"); ASSERT_TRUE(queue); ASSERT_GT(queue->size(), 0ul); - EXPECT_THAT( - get_metadata_field_names(queue->front().GetDict()), - ::testing::UnorderedElementsAre("id", "initial_lock_request", "name", - "started", "scheduled_location")); + EXPECT_THAT(get_metadata_field_names(queue->front().GetDict()), + ::testing::UnorderedElementsAre( + "id", "initial_lock_request", "name", "started", + "scheduled_location", "scheduled_at")); } TEST_F(WebAppCommandManagerTest, DestroySharedWebContentsOnPostTask) {
diff --git a/chrome/browser/webauthn/BUILD.gn b/chrome/browser/webauthn/BUILD.gn index d1c1579..3b292b6 100644 --- a/chrome/browser/webauthn/BUILD.gn +++ b/chrome/browser/webauthn/BUILD.gn
@@ -62,8 +62,8 @@ "//base", "//chrome/browser", "//chrome/browser/sync", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/browser/ui", - "//chrome/test:sync_integration_test_support", "//chrome/test:test_support_ui", "//components/os_crypt/sync:test_support", "//components/signin/public/identity_manager:test_support",
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt index 95d7761..c7b19af 100644 --- a/chrome/build/android-arm64.pgo.txt +++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@ -chrome-android64-main-1756808038-42f3c2ceed4891c17825eae90f8ec65a2dc31edd-261d2c3616964b8c9aec27336821e08d357cc369.profdata +chrome-android64-main-1756822069-de4bd7d7669f6757eebc12283731a9eadfb5bee8-28a1ee4d22e556527709ae0c833a2580a4f89f7e.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 27f9a6d..02692ac 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1756792286-23a5fed8d4f940fb4cffa6de6aafd24341e80dbf-5b682b34bdc7b7dad38231dc003c5d91394fea45.profdata +chrome-mac-main-1756814343-34e64840d94a4f8c078e502eea400f9b678dc550-af4c4b4a345d0ad4a3f8aa22f873f21587a1a6e3.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 4e0bf1b..0127685 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1756792286-1adc25df1df8c6dab97915e7e465f29198eafbb6-5b682b34bdc7b7dad38231dc003c5d91394fea45.profdata +chrome-win32-main-1756803502-220b7b3c12588346e324a15b398e7a00e4fa5edb-dde15930c4bf0c6c6424b21021203dbd21508dfe.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 6cca337..38203c0 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1756792286-1cd0881349dc5206f671cdd3251586cbad7e5b32-5b682b34bdc7b7dad38231dc003c5d91394fea45.profdata +chrome-win64-main-1756803502-2c048ae3b0371bc55013ee081f39516aa2cf9532-dde15930c4bf0c6c6424b21021203dbd21508dfe.profdata
diff --git a/chrome/renderer/autofill/form_autofill_browsertest.cc b/chrome/renderer/autofill/form_autofill_browsertest.cc index 8bce1a8f..80e7805 100644 --- a/chrome/renderer/autofill/form_autofill_browsertest.cc +++ b/chrome/renderer/autofill/form_autofill_browsertest.cc
@@ -317,7 +317,6 @@ if (auto p = FindFormAndFieldForFormControlElement( element, *base::MakeRefCounted<FieldDataManager>(), kExtractFormDataCallTimerStateDummy, /*button_titles_cache=*/nullptr, - /*extract_options=*/{}, /*form_cache=*/{})) { return p->first; } @@ -371,23 +370,17 @@ test::AutofillRendererTest::TearDown(); } - std::optional<FormData> ExtractFormData( - WebFormElement form, - DenseSet<ExtractOption> extract_options = {}) { + std::optional<FormData> ExtractFormData(WebFormElement form) { return form_util::ExtractFormData( GetDocument(), form, *base::MakeRefCounted<FieldDataManager>(), - kExtractFormDataCallTimerStateDummy, /*button_titles_cache=*/nullptr, - extract_options); + kExtractFormDataCallTimerStateDummy, /*button_titles_cache=*/nullptr); } std::optional<std::pair<FormData, raw_ref<const FormFieldData>>> - FindFormAndFieldForFormControlElement( - WebFormControlElement control, - DenseSet<ExtractOption> extract_options = {}) { + FindFormAndFieldForFormControlElement(WebFormControlElement control) { return form_util::FindFormAndFieldForFormControlElement( control, *base::MakeRefCounted<FieldDataManager>(), kExtractFormDataCallTimerStateDummy, /*button_titles_cache=*/nullptr, - extract_options, /*form_cache=*/{}); } @@ -1840,7 +1833,7 @@ FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - /*extract_options=*/{}, &result); + &result); FormFieldData expected; expected.set_form_control_type(FormControlType::kInputText); @@ -1861,7 +1854,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_id_attribute(u"element"); @@ -1883,7 +1876,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_id_attribute(u"element"); @@ -1905,7 +1898,7 @@ element.SetAutofillState(WebAutofillState::kAutofilled); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_id_attribute(u"element"); @@ -1930,7 +1923,7 @@ element.SetAutofillState(WebAutofillState::kAutofilled); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_id_attribute(u"checkbox"); @@ -1945,7 +1938,7 @@ element = GetInputElementById("radio"); element.SetAutofillState(WebAutofillState::kAutofilled); WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); expected.set_id_attribute(u"radio"); expected.set_name(expected.id_attribute()); expected.set_value(u"male"); @@ -1969,7 +1962,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_id_attribute(u"element"); @@ -2004,7 +1997,7 @@ FormFieldData result1; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result1); + &result1); FormFieldData expected; expected.set_id_attribute(u"element"); @@ -2042,7 +2035,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); EXPECT_TRUE(result.options().empty()); } @@ -2061,7 +2054,7 @@ FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); ASSERT_EQ(2u, result.options().size()); EXPECT_EQ(u"usa", result.options()[0].text); EXPECT_EQ(u"uk", result.options()[1].text); @@ -2081,7 +2074,7 @@ FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); ASSERT_EQ(1u, result.options().size()); EXPECT_EQ(u"+1 (Canada)", result.options()[0].text); } @@ -2097,7 +2090,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_id_attribute(u"element"); @@ -2121,7 +2114,7 @@ FormFieldData result_sans_value; FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_id_attribute(u"element"); @@ -2144,7 +2137,7 @@ WebFormControlElement element = GetFormControlElementById("password"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); FormFieldData expected; expected.set_max_length(FormFieldData::kDefaultMaxLength); @@ -2220,8 +2213,7 @@ GetFormControlElementById(test_case.element_id); FormFieldData result; WebFormControlElementToFormFieldForTesting(WebFormElement(), element, - nullptr, - /*extract_options=*/{}, &result); + nullptr, &result); FormFieldData expected; expected.set_id_attribute(ASCIIToUTF16(test_case.element_id)); @@ -2254,7 +2246,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, result.text_direction()); } @@ -2269,7 +2261,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, result.text_direction()); } @@ -2285,7 +2277,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, result.text_direction()); } @@ -2300,7 +2292,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, result.text_direction()); } @@ -2316,7 +2308,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, result.text_direction()); } @@ -2333,7 +2325,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, result.text_direction()); // text-align: left @@ -2347,7 +2339,7 @@ element = GetFormControlElementById("element"); WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, result.text_direction()); } @@ -2364,7 +2356,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, result.text_direction()); } @@ -2381,7 +2373,7 @@ WebFormControlElement element = GetFormControlElementById("element"); FormFieldData result; WebFormControlElementToFormFieldForTesting(element.Form(), element, nullptr, - {}, &result); + &result); EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, result.text_direction()); }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index c60cdd5..29200c3 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1720,11 +1720,11 @@ "../browser/devtools/protocol/devtools_protocol_browsertest.cc", ] deps += [ - ":sync_integration_test_support", "//chrome/browser/data_saver", "//chrome/browser/devtools", "//chrome/browser/devtools:test_support", "//chrome/browser/preloading:prefs", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/browser/ui/autofill", "//components/infobars/content", "//components/javascript_dialogs", @@ -1832,7 +1832,6 @@ ":chrome_test_launcher", ":persisted_tab_data_test_proto", ":platform_browser_tests", - ":sync_integration_test_support", ":sync_integration_test_support_java", ":test_support", ":test_support_java", @@ -1868,6 +1867,7 @@ "//chrome/browser/segmentation_platform:test_utils", "//chrome/browser/supervised_user:android_browser_tests", "//chrome/browser/sync", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/browser/touch_to_fill/password_manager/password_generation/android:public", "//chrome/browser/ui:ui_features", "//chrome/browser/ui/android/hats:browser_tests", @@ -2286,7 +2286,6 @@ deps = [ ":browser_tests_runner", ":platform_browser_tests", - ":sync_integration_test_support", ":test_support", ":test_support_ui", ":webrtc_browser_tests_base", @@ -2417,6 +2416,7 @@ "//chrome/browser/supervised_user:test_support", "//chrome/browser/support_tool:support_tool_proto", "//chrome/browser/sync", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/browser/tab_group_sync:factories", "//chrome/browser/task_manager/common", "//chrome/browser/themes", @@ -8163,7 +8163,6 @@ "../browser/ui/views/passwords/password_bubble_view_test_base.h", "../browser/ui/views/passwords/password_change/password_change_toast_unittest.cc", "../browser/ui/views/passwords/password_change/successful_password_change_view_unittest.cc", - "../browser/ui/views/passwords/password_save_unsynced_credentials_locally_view_unittest.cc", "../browser/ui/views/passwords/password_save_update_view_unittest.cc", "../browser/ui/views/passwords/post_save_compromised_bubble_view_unittest.cc", "../browser/ui/views/passwords/shared_passwords_notification_view_unittest.cc", @@ -8854,7 +8853,6 @@ "//ash/assistant/model", "//ash/assistant/util", "//ash/public/cpp:test_support", - "//ash/public/cpp/assistant/test_support", "//ash/public/cpp/resources:ash_public_unscaled_resources", "//ash/resources/vector_icons", "//ash/strings", @@ -11269,7 +11267,6 @@ deps = [ ":chrome_test_launcher", - ":sync_integration_test_support", ":test_support", ":test_support_ui", ":webrtc_browser_tests_base", @@ -11319,6 +11316,7 @@ "//chrome/browser/signin/e2e_tests:test_support", "//chrome/browser/status_icons", "//chrome/browser/sync", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/browser/themes", "//chrome/browser/ui", "//chrome/browser/ui:browser_element_identifiers", @@ -12231,247 +12229,6 @@ } } -# For Android, this target has to be built along with the -# sync_integration_test_support_java target from the test target dependencies. -source_set("sync_integration_test_support") { - testonly = true - sources = [ - "../browser/sync/test/integration/autofill_helper.cc", - "../browser/sync/test/integration/autofill_helper.h", - "../browser/sync/test/integration/await_match_status_change_checker.cc", - "../browser/sync/test/integration/await_match_status_change_checker.h", - "../browser/sync/test/integration/bookmarks_helper.cc", - "../browser/sync/test/integration/bookmarks_helper.h", - "../browser/sync/test/integration/committed_all_nudged_changes_checker.cc", - "../browser/sync/test/integration/committed_all_nudged_changes_checker.h", - "../browser/sync/test/integration/contact_info_helper.cc", - "../browser/sync/test/integration/contact_info_helper.h", - "../browser/sync/test/integration/device_info_helper.cc", - "../browser/sync/test/integration/device_info_helper.h", - "../browser/sync/test/integration/encryption_helper.cc", - "../browser/sync/test/integration/encryption_helper.h", - "../browser/sync/test/integration/exponential_backoff_helper.cc", - "../browser/sync/test/integration/exponential_backoff_helper.h", - "../browser/sync/test/integration/fake_server_match_status_checker.cc", - "../browser/sync/test/integration/fake_server_match_status_checker.h", - "../browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.cc", - "../browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h", - "../browser/sync/test/integration/history_helper.cc", - "../browser/sync/test/integration/history_helper.h", - "../browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.cc", - "../browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.h", - "../browser/sync/test/integration/invalidations/invalidations_status_checker.cc", - "../browser/sync/test/integration/invalidations/invalidations_status_checker.h", - "../browser/sync/test/integration/multi_client_status_change_checker.cc", - "../browser/sync/test/integration/multi_client_status_change_checker.h", - "../browser/sync/test/integration/offer_helper.cc", - "../browser/sync/test/integration/offer_helper.h", - "../browser/sync/test/integration/password_sharing_invitation_helper.cc", - "../browser/sync/test/integration/password_sharing_invitation_helper.h", - "../browser/sync/test/integration/passwords_helper.cc", - "../browser/sync/test/integration/passwords_helper.h", - "../browser/sync/test/integration/preferences_helper.cc", - "../browser/sync/test/integration/preferences_helper.h", - "../browser/sync/test/integration/quiesce_status_change_checker.cc", - "../browser/sync/test/integration/quiesce_status_change_checker.h", - "../browser/sync/test/integration/saved_tab_groups_helper.cc", - "../browser/sync/test/integration/saved_tab_groups_helper.h", - "../browser/sync/test/integration/secondary_account_helper.cc", - "../browser/sync/test/integration/secondary_account_helper.h", - "../browser/sync/test/integration/send_tab_to_self_helper.cc", - "../browser/sync/test/integration/send_tab_to_self_helper.h", - "../browser/sync/test/integration/session_hierarchy_match_checker.cc", - "../browser/sync/test/integration/session_hierarchy_match_checker.h", - "../browser/sync/test/integration/shared_tab_group_data_helper.cc", - "../browser/sync/test/integration/shared_tab_group_data_helper.h", - "../browser/sync/test/integration/single_client_status_change_checker.cc", - "../browser/sync/test/integration/single_client_status_change_checker.h", - "../browser/sync/test/integration/status_change_checker.cc", - "../browser/sync/test/integration/status_change_checker.h", - "../browser/sync/test/integration/sync_datatype_helper.cc", - "../browser/sync/test/integration/sync_datatype_helper.h", - "../browser/sync/test/integration/sync_disabled_checker.cc", - "../browser/sync/test/integration/sync_disabled_checker.h", - "../browser/sync/test/integration/sync_engine_stopped_checker.cc", - "../browser/sync/test/integration/sync_engine_stopped_checker.h", - "../browser/sync/test/integration/sync_service_impl_harness.cc", - "../browser/sync/test/integration/sync_service_impl_harness.h", - "../browser/sync/test/integration/sync_signin_delegate.cc", - "../browser/sync/test/integration/sync_signin_delegate.h", - "../browser/sync/test/integration/sync_test.cc", - "../browser/sync/test/integration/sync_test.h", - "../browser/sync/test/integration/sync_test_account.h", - "../browser/sync/test/integration/sync_test_tab_utils.cc", - "../browser/sync/test/integration/sync_test_tab_utils.h", - "../browser/sync/test/integration/updated_progress_marker_checker.cc", - "../browser/sync/test/integration/updated_progress_marker_checker.h", - "../browser/sync/test/integration/wallet_helper.cc", - "../browser/sync/test/integration/wallet_helper.h", - ] - if (!is_android) { - sources += [ - "../browser/sync/test/integration/apps_helper.cc", - "../browser/sync/test/integration/apps_helper.h", - "../browser/sync/test/integration/cookie_helper.cc", - "../browser/sync/test/integration/cookie_helper.h", - "../browser/sync/test/integration/dictionary_helper.cc", - "../browser/sync/test/integration/dictionary_helper.h", - "../browser/sync/test/integration/dictionary_load_observer.cc", - "../browser/sync/test/integration/dictionary_load_observer.h", - "../browser/sync/test/integration/extension_settings_helper.cc", - "../browser/sync/test/integration/extension_settings_helper.h", - "../browser/sync/test/integration/fake_sync_signin_delegate_desktop.cc", - "../browser/sync/test/integration/fake_sync_signin_delegate_desktop.h", - "../browser/sync/test/integration/live_sync_signin_delegate_desktop.cc", - "../browser/sync/test/integration/live_sync_signin_delegate_desktop.h", - "../browser/sync/test/integration/migration_waiter.cc", - "../browser/sync/test/integration/migration_waiter.h", - "../browser/sync/test/integration/migration_watcher.cc", - "../browser/sync/test/integration/migration_watcher.h", - "../browser/sync/test/integration/search_engines_helper.cc", - "../browser/sync/test/integration/search_engines_helper.h", - "../browser/sync/test/integration/sessions_helper.cc", - "../browser/sync/test/integration/sessions_helper.h", - "../browser/sync/test/integration/sync_app_helper.cc", - "../browser/sync/test/integration/sync_app_helper.h", - "../browser/sync/test/integration/sync_integration_test_util.cc", - "../browser/sync/test/integration/sync_integration_test_util.h", - "../browser/sync/test/integration/themes_helper.cc", - "../browser/sync/test/integration/themes_helper.h", - "../browser/sync/test/integration/user_events_helper.cc", - "../browser/sync/test/integration/user_events_helper.h", - "../browser/sync/test/integration/webauthn_credentials_helper.cc", - "../browser/sync/test/integration/webauthn_credentials_helper.h", - ] - } else { - sources += [ - "../browser/sync/test/integration/fake_sync_signin_delegate_android.cc", - "../browser/sync/test/integration/fake_sync_signin_delegate_android.h", - "../browser/sync/test/integration/live_sync_signin_delegate_android.cc", - "../browser/sync/test/integration/live_sync_signin_delegate_android.h", - "../browser/sync/test/integration/sync_test_utils_android.cc", - "../browser/sync/test/integration/sync_test_utils_android.h", - "../browser/sync/test/integration/webapks_helper.cc", - "../browser/sync/test/integration/webapks_helper.h", - ] - } - if (enable_extensions_core) { - sources += [ - "../browser/sync/test/integration/extensions_helper.cc", - "../browser/sync/test/integration/extensions_helper.h", - "../browser/sync/test/integration/sync_extension_helper.cc", - "../browser/sync/test/integration/sync_extension_helper.h", - ] - } - public_deps = [ - ":test_support", - "//chrome/browser", - "//chrome/browser/favicon", - "//components/autofill/content/browser", - "//components/power_bookmarks/core:features", - ] - deps = [ - "//base", - "//chrome/browser:main_extra_parts", - "//chrome/browser/autofill", - "//chrome/browser/password_manager/factories", - "//chrome/browser/profiles", - "//chrome/browser/search_engines", - "//chrome/browser/sync", - "//components/autofill/core/common:credit_card_number_validation", - "//components/bookmarks/browser", - "//components/bookmarks/browser:test_support", - "//components/bookmarks/managed", - "//components/browser_sync", - "//components/commerce/core:feature_list", - "//components/favicon/core", - "//components/os_crypt/sync:test_support", - "//components/password_manager/core/browser:password_manager_buildflags", - "//components/plus_addresses/core/common:features", - "//components/saved_tab_groups/public", - "//components/send_tab_to_self", - "//components/signin/public/identity_manager:test_support", - "//components/sync", - "//components/sync:test_support", - "//components/sync_bookmarks", - "//components/tab_groups", - "//components/tabs:public", - "//components/webapps/common", - "//content/public/browser", - "//content/test:test_support", - "//net", - "//services/network/public/mojom", - "//skia", - ] - - if (is_mac) { - sources -= [ - "../browser/sync/test/integration/dictionary_helper.cc", - "../browser/sync/test/integration/dictionary_helper.h", - "../browser/sync/test/integration/dictionary_load_observer.cc", - "../browser/sync/test/integration/dictionary_load_observer.h", - ] - } - if (is_chromeos) { - sources += [ - "../browser/sync/test/integration/printers_helper.cc", - "../browser/sync/test/integration/printers_helper.h", - "../browser/sync/test/integration/sync_app_list_helper.cc", - "../browser/sync/test/integration/sync_app_list_helper.h", - "../browser/sync/test/integration/sync_arc_package_helper.cc", - "../browser/sync/test/integration/sync_arc_package_helper.h", - "../browser/sync/test/integration/workspace_desk_helper.cc", - "../browser/sync/test/integration/workspace_desk_helper.h", - ] - public_deps += [ "//chrome/browser/ash/app_list" ] - deps += [ - "//ash/app_list:test_support", - "//chrome/browser/ash/app_list/arc", - "//chrome/browser/ash/app_list/test:test_support", - "//chrome/browser/ash/arc", - "//chrome/browser/ash/arc:arc_util", - "//chrome/browser/ash/arc/session", - "//chrome/browser/ash/net", - "//chrome/browser/ash/printing", - "//chrome/browser/ash/system_web_apps/test_support", - "//chromeos/ash/components/browser_context_helper", - "//chromeos/ash/components/network/portal_detector", - "//chromeos/ash/experiences/arc:arc_test_support", - "//chromeos/ash/experiences/arc/mojom", - "//chromeos/printing", - "//components/desks_storage", - "//components/user_manager:test_support", - ] - } - if (is_android) { - deps += [ - ":sync_integration_test_support_jni_headers", - ":test_support_jni_headers", - "//chrome/browser/android/webapk:webapk_sources", - "//chrome/browser/password_manager/android:utils", - "//chrome/browser/ui/android/tab_model", - "//components/saved_tab_groups/public:conversion_utils", - ] - if (enable_extensions_core) { - deps += [ "//chrome/browser/extensions" ] - } - } else { - deps += [ - "//chrome/browser/apps/app_service", - "//chrome/browser/themes", - "//chrome/browser/ui/webui/signin:login", - "//chrome/browser/ui/webui/signin:test_support_ui", - "//chrome/browser/web_applications:web_applications_test_support", - "//chrome/browser/webauthn", - "//components/send_tab_to_self", - "//components/trusted_vault", - "//components/webapps/browser", - "//components/webauthn/core/browser", - "//components/webauthn/core/browser:passkey_model", - ] - } -} - if (!is_android) { test("sync_integration_tests") { use_xvfb = use_xvfb_in_this_config @@ -12499,11 +12256,11 @@ deps = [ ":chrome_test_launcher", - ":sync_integration_test_support", ":test_support", ":test_support_ui", "//chrome/app:chrome_dll_resources", "//chrome/app:command_ids", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/browser/ui", "//components/bookmarks/browser", "//components/password_manager/core/browser",
diff --git a/chrome/test/supervised_user/BUILD.gn b/chrome/test/supervised_user/BUILD.gn index 2587a5f..1fe0daa 100644 --- a/chrome/test/supervised_user/BUILD.gn +++ b/chrome/test/supervised_user/BUILD.gn
@@ -18,7 +18,7 @@ public_deps = [ ":child_accounts", "//base", - "//chrome/test:sync_integration_test_support", + "//chrome/browser/sync/test/integration:sync_integration_test_support", "//chrome/test:test_support", "//components/signin/public/identity_manager:test_support", "//components/supervised_user/test_support",
diff --git a/clank b/clank index ced3635..adb0ed2 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit ced3635c6f861e027c3f1c20a71be39b4fd724d1 +Subproject commit adb0ed24d1920f5972d5e07ce95ed892fdb9e1f5
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc index cb9d112..175515d 100644 --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -641,11 +641,10 @@ DCHECK(form_util::MaybeWasOwnedByFrame(element, unsafe_render_frame())); if (std::optional<FormAndField> form_and_field = - FindFormAndFieldForFormControlElement( + form_util::FindFormAndFieldForFormControlElement( element, field_data_manager(), GetCallTimerState(kDidChangeScrollOffsetImpl), button_titles_cache(), - MaybeExtractDatalist({form_util::ExtractOption::kBounds}), /*form_cache=*/{})) { auto& [form, field] = *form_and_field; if (auto* autofill_driver = unsafe_autofill_driver()) { @@ -704,11 +703,10 @@ if (auto control = new_focused_element.DynamicTo<WebFormControlElement>()) { if (std::optional<FormAndField> form_and_field = - FindFormAndFieldForFormControlElement( + form_util::FindFormAndFieldForFormControlElement( control, field_data_manager(), GetCallTimerState(kFocusedElementChanged), button_titles_cache(), - MaybeExtractDatalist({form_util::ExtractOption::kBounds}), /*form_cache=*/{})) { auto& [form, field] = *form_and_field; if (auto* autofill_driver = unsafe_autofill_driver()) { @@ -767,12 +765,10 @@ if (WebFormControlElement control = element.DynamicTo<WebFormControlElement>()) { if (std::optional<FormAndField> form_and_field = - FindFormAndFieldForFormControlElement( + form_util::FindFormAndFieldForFormControlElement( control, self.field_data_manager(), self.GetCallTimerState(kHandleCaretMovedInFormField), self.button_titles_cache(), - self.MaybeExtractDatalist( - {form_util::ExtractOption::kBounds}), /*form_cache=*/{})) { auto& [form, field] = *form_and_field; if (auto* autofill_driver = self.unsafe_autofill_driver()) { @@ -1027,12 +1023,10 @@ } if (std::optional<FormAndField> form_and_field = - FindFormAndFieldForFormControlElement( + form_util::FindFormAndFieldForFormControlElement( element, field_data_manager(), GetCallTimerState(kOnTextFieldValueChanged), - button_titles_cache(), - MaybeExtractDatalist({form_util::ExtractOption::kBounds}), - form_cache)) { + button_titles_cache(), form_cache)) { auto& [form, field] = *form_and_field; if (auto* autofill_driver = unsafe_autofill_driver()) { autofill_driver->TextFieldValueChanged(form, field->renderer_id(), @@ -1046,12 +1040,10 @@ const SynchronousFormCache& form_cache) { DCHECK(form_util::MaybeWasOwnedByFrame(element, unsafe_render_frame())); if (std::optional<FormAndField> form_and_field = - FindFormAndFieldForFormControlElement( + form_util::FindFormAndFieldForFormControlElement( element, field_data_manager(), GetCallTimerState(kOnProvisionallySaveForm), - button_titles_cache(), - MaybeExtractDatalist({form_util::ExtractOption::kBounds}), - form_cache)) { + button_titles_cache(), form_cache)) { auto& [form, field] = *form_and_field; if (auto* autofill_driver = unsafe_autofill_driver()) { autofill_driver->SelectControlSelectionChanged(form, @@ -1573,8 +1565,6 @@ form_util::FindFormAndFieldForFormControlElement( element, field_data_manager(), GetCallTimerState(kQueryAutofillSuggestions), button_titles_cache(), - {form_util::ExtractOption::kDatalist, - form_util::ExtractOption::kBounds}, form_cache); if (!form_and_field) { return; @@ -1663,13 +1653,10 @@ std::move(callback).Run(std::nullopt); return; } - DenseSet<form_util::ExtractOption> extract_options = - MaybeExtractDatalist({form_util::ExtractOption::kBounds}); if (!form_id) { if (std::optional<FormData> form = form_util::ExtractFormData( document, WebFormElement(), field_data_manager(), - GetCallTimerState(kExtractForm), button_titles_cache(), - extract_options)) { + GetCallTimerState(kExtractForm), button_titles_cache())) { std::move(callback).Run(std::move(form)); return; } @@ -1677,8 +1664,7 @@ if (WebFormElement form_element = form_util::GetFormByRendererId(form_id)) { if (std::optional<FormData> form = form_util::ExtractFormData( document, form_element, field_data_manager(), - GetCallTimerState(kExtractForm), button_titles_cache(), - extract_options)) { + GetCallTimerState(kExtractForm), button_titles_cache())) { std::move(callback).Run(std::move(form)); return; } @@ -1964,8 +1950,7 @@ form_util::FindFormAndFieldForFormControlElement( element, field_data_manager(), GetCallTimerState(kBatchSelectOptionChange), - button_titles_cache(), - /*extract_options=*/{}, /*form_cache=*/{})) { + button_titles_cache(), /*form_cache=*/{})) { auto& [form, field] = *form_and_field; if (auto* autofill_driver = unsafe_autofill_driver(); autofill_driver && !field->options().empty()) { @@ -2100,7 +2085,7 @@ form_util::FindFormAndFieldForFormControlElement( element, field_data_manager(), GetCallTimerState(kJavaScriptChangedValue), button_titles_cache(), - /*extract_options=*/{}, /*form_cache=*/{})) { + /*form_cache=*/{})) { auto& [form, field] = *form_and_field; if (auto* autofill_driver = unsafe_autofill_driver()) { autofill_driver->JavaScriptChangedAutofilledValue( @@ -2146,9 +2131,6 @@ form_element, WebInputElement(), SynchronousFormCache(form_util::GetFormRendererId(form_element), provisionally_saved_form())); - // TODO(crbug.com/40281981): Figure out if this is still needed, and - // document the reason, otherwise remove. - update_submission_data_on_user_edit(); // Fire the form submission event to avoid missing submissions where // websites handle the onsubmit event. This also gets the form before // Javascript's submit event handler could change it. We don't clear @@ -2376,14 +2358,6 @@ submitted_forms_.clear(); } -DenseSet<form_util::ExtractOption> AutofillAgent::MaybeExtractDatalist( - DenseSet<form_util::ExtractOption> extract_options) { - if (config_.extract_all_datalists) { - extract_options.insert(form_util::ExtractOption::kDatalist); - } - return extract_options; -} - mojom::AutofillDriver* AutofillAgent::unsafe_autofill_driver() { if (IsPrerendering()) { if (!deferring_autofill_driver_) {
diff --git a/components/autofill/content/renderer/autofill_agent.h b/components/autofill/content/renderer/autofill_agent.h index 1715f41..206e4c1 100644 --- a/components/autofill/content/renderer/autofill_agent.h +++ b/components/autofill/content/renderer/autofill_agent.h
@@ -441,10 +441,6 @@ // cleared in this method. void OnFormNoLongerSubmittable(); - // Amends the given `extract_options` with datalists if required. - DenseSet<form_util::ExtractOption> MaybeExtractDatalist( - DenseSet<form_util::ExtractOption> extract_options); - // Helpers for SelectFieldOptionsChanged() and // DataListOptionsChanged(), which get called after a timer that is restarted // when another event of the same type started.
diff --git a/components/autofill/content/renderer/autofill_agent_browsertest.cc b/components/autofill/content/renderer/autofill_agent_browsertest.cc index 36e4b392..a5dc1c0 100644 --- a/components/autofill/content/renderer/autofill_agent_browsertest.cc +++ b/components/autofill/content/renderer/autofill_agent_browsertest.cc
@@ -996,7 +996,7 @@ FormFieldData form_field; form_util::WebFormControlElementToFormFieldForTesting( blink::WebFormElement(), field, &autofill_agent().field_data_manager(), - {}, &form_field); + &form_field); form_field.set_value(u"autofilled"); form_field.set_is_autofilled(true);
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc index ba9825b..2a821b8 100644 --- a/components/autofill/content/renderer/form_autofill_util.cc +++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -1889,15 +1889,14 @@ return form_controls; } -// Fills out a FormField object from a given autofillable WebFormControlElement. -// |extract_options|: See the enum ExtractOption above for details. Field -// properties will be copied from |field_data_manager|, if the argument is not -// null and has entry for |element| (see properties in FieldPropertiesFlags). +// Populates out a FormField object from a given autofillable +// WebFormControlElement. Field properties are copied from |field_data_manager|, +// if the argument is not null and has entry for |element| (see properties in +// FieldPropertiesFlags). void WebFormControlElementToFormField( const WebFormElement& form_element, const WebFormControlElement& element, const FieldDataManager* field_data_manager, - DenseSet<ExtractOption> extract_options, FormFieldData* field, ShadowFieldData* shadow_data) { DCHECK(field); @@ -2065,8 +2064,7 @@ const WebDocument& document, const WebFormElement& form_element, const FieldDataManager& field_data_manager, - ButtonTitlesCache* button_titles_cache, - DenseSet<ExtractOption> extract_options) { + ButtonTitlesCache* button_titles_cache) { CHECK(!form_element || form_element.GetDocument() == document, base::NotFatalUntil::M142); @@ -2124,8 +2122,8 @@ fields.emplace_back(); shadow_fields.emplace_back(); WebFormControlElementToFormField(form_element, control_element, - &field_data_manager, extract_options, - &fields.back(), &shadow_fields.back()); + &field_data_manager, &fields.back(), + &shadow_fields.back()); // Finds the last frame that precedes |control_element|. while (next_iframe < iframe_elements.size() && @@ -2246,12 +2244,10 @@ const WebFormElement& form_element, const FieldDataManager& field_data_manager, const CallTimerState& timer_state, - ButtonTitlesCache* button_titles_cache, - DenseSet<ExtractOption> extract_options) { + ButtonTitlesCache* button_titles_cache) { ScopedCallTimer timer("ExtractFormData", timer_state); return ExtractFormDataWithFieldsAndFrames( - document, form_element, field_data_manager, button_titles_cache, - extract_options); + document, form_element, field_data_manager, button_titles_cache); } GURL GetCanonicalActionForForm(const WebFormElement& form) { @@ -2419,7 +2415,6 @@ const FieldDataManager& field_data_manager, const CallTimerState& timer_state, form_util::ButtonTitlesCache* button_titles_cache, - DenseSet<ExtractOption> extract_options, const SynchronousFormCache& form_cache) { DCHECK(element); @@ -2429,17 +2424,16 @@ WebDocument document = element.GetDocument(); WebFormElement owning_form = element.GetOwningFormForAutofill(); - std::optional<FormData> form = form_cache.GetOrExtractForm( - document, owning_form, field_data_manager, timer_state, - button_titles_cache, extract_options); + std::optional<FormData> form = + form_cache.GetOrExtractForm(document, owning_form, field_data_manager, + timer_state, button_titles_cache); const bool extract_form_data_succeeded = form.has_value(); if (!form) { // If we couldn't extract the form, ignore the fields other than `element`. // This gives Autocomplete and other handlers the chance to handle it. FormFieldData field; - WebFormControlElementToFormField(owning_form, element, nullptr, - extract_options, &field, + WebFormControlElementToFormField(owning_form, element, nullptr, &field, /*shadow_data=*/nullptr); form.emplace(); form->set_fields({std::move(field)}); @@ -3075,10 +3069,9 @@ const WebFormElement& form_element, const WebFormControlElement& element, const FieldDataManager* field_data_manager, - DenseSet<ExtractOption> extract_options, FormFieldData* field) { WebFormControlElementToFormField(form_element, element, field_data_manager, - extract_options, field, + field, /*shadow_data=*/nullptr); }
diff --git a/components/autofill/content/renderer/form_autofill_util.h b/components/autofill/content/renderer/form_autofill_util.h index 162ea86..6b43eaf2 100644 --- a/components/autofill/content/renderer/form_autofill_util.h +++ b/components/autofill/content/renderer/form_autofill_util.h
@@ -64,18 +64,6 @@ // heuristics for a given form element. using ButtonTitlesCache = base::flat_map<FormRendererId, ButtonTitleList>; -// A bit field mask to extract data from WebFormControlElement. -// Copied to components/autofill/ios/browser/resources/autofill_controller.js. -enum class ExtractOption { - kBounds, // Extract bounds from WebFormControlElement, could - // trigger layout if needed. - kDatalist, // Extract datalist from WebFormControlElement, the total - // number of options is up to kMaxListSize and each option - // has as far as kMaxDataLength. - kMinValue = kBounds, - kMaxValue = kDatalist, -}; - // Extract FormData from `form_element` or the unowned form if // `form_element.IsNull()`. // @@ -90,8 +78,7 @@ const blink::WebFormElement& form_element, const FieldDataManager& field_data_manager, const CallTimerState& timer_state, - ButtonTitlesCache* button_titles_cache, - DenseSet<ExtractOption> extract_options = {}); + ButtonTitlesCache* button_titles_cache); // Helper function to assist in getting the canonical form of the action and // origin. The action will properly take into account <BASE>, and both will @@ -155,7 +142,6 @@ const FieldDataManager& field_data_manager, const CallTimerState& timer_state, form_util::ButtonTitlesCache* button_titles_cache, - DenseSet<ExtractOption> extract_options, const SynchronousFormCache& form_cache); // Creates a FormData containing a single field out of a contenteditable @@ -356,7 +342,6 @@ const blink::WebFormElement& form_element, const blink::WebFormControlElement& element, const FieldDataManager* field_data_manager, - DenseSet<ExtractOption> extract_options, FormFieldData* field); } // namespace form_util
diff --git a/components/autofill/content/renderer/form_autofill_util_browsertest.cc b/components/autofill/content/renderer/form_autofill_util_browsertest.cc index dc916238..e42c35d09 100644 --- a/components/autofill/content/renderer/form_autofill_util_browsertest.cc +++ b/components/autofill/content/renderer/form_autofill_util_browsertest.cc
@@ -226,21 +226,17 @@ WebDocument GetDocument() { return GetMainFrame()->GetDocument(); } - std::optional<FormData> ExtractFormData( - WebFormElement form, - DenseSet<ExtractOption> extract_options = {}) { - return form_util::ExtractFormData( - GetDocument(), form, field_data_manager(), kCallTimerStateDummy, - /*button_titles_cache=*/nullptr, extract_options); + std::optional<FormData> ExtractFormData(WebFormElement form) { + return form_util::ExtractFormData(GetDocument(), form, field_data_manager(), + kCallTimerStateDummy, + /*button_titles_cache=*/nullptr); } std::optional<std::pair<FormData, raw_ref<const FormFieldData>>> - FindFormAndFieldForFormControlElement( - WebFormControlElement control, - DenseSet<ExtractOption> extract_options = {}) { + FindFormAndFieldForFormControlElement(WebFormControlElement control) { return form_util::FindFormAndFieldForFormControlElement( control, field_data_manager(), kCallTimerStateDummy, - /*button_titles_cache=*/nullptr, extract_options, + /*button_titles_cache=*/nullptr, /*form_cache=*/{}); } @@ -966,8 +962,7 @@ WebDocument doc = GetDocument(); auto web_control = GetFormControlElementById(doc, "i1"); std::optional<std::pair<FormData, raw_ref<const FormFieldData>>> - form_and_field = FindFormAndFieldForFormControlElement( - web_control, {ExtractOption::kBounds}); + form_and_field = FindFormAndFieldForFormControlElement(web_control); ASSERT_TRUE(form_and_field); auto& [form, field] = *form_and_field; @@ -980,8 +975,7 @@ WebDocument doc = GetDocument(); auto web_control = GetFormControlElementById(doc, "i1"); std::optional<std::pair<FormData, raw_ref<const FormFieldData>>> - form_and_field = FindFormAndFieldForFormControlElement( - web_control, {ExtractOption::kBounds}); + form_and_field = FindFormAndFieldForFormControlElement(web_control); ASSERT_TRUE(form_and_field); auto& [form, field] = *form_and_field; @@ -1029,8 +1023,7 @@ WebDocument doc = GetDocument(); auto web_control = GetElementById(doc, "i1").To<WebInputElement>(); std::optional<std::pair<FormData, raw_ref<const FormFieldData>>> - form_and_field = FindFormAndFieldForFormControlElement( - web_control, {ExtractOption::kDatalist}); + form_and_field = FindFormAndFieldForFormControlElement(web_control); ASSERT_TRUE(form_and_field); auto& [form, field] = *form_and_field;
diff --git a/components/autofill/content/renderer/form_cache.cc b/components/autofill/content/renderer/form_cache.cc index a161a389..b2ed67172 100644 --- a/components/autofill/content/renderer/form_cache.cc +++ b/components/autofill/content/renderer/form_cache.cc
@@ -24,8 +24,6 @@ namespace autofill { -using form_util::ExtractOption; - namespace { // Determines whether the form is interesting enough to be sent to the browser
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index 3c29361..dafb672 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -102,7 +102,6 @@ namespace { -using form_util::ExtractOption; using form_util::GetFieldRendererId; using form_util::GetFormByRendererId; using form_util::GetFormControlByRendererId; @@ -1210,8 +1209,7 @@ user_input, field_data_manager(), autofill_agent_->GetCallTimerState( CallTimerState::CallSite::kShowSuggestionPopup), - autofill_agent_->button_titles_cache(), - /*extract_options=*/{}, form_cache); + autofill_agent_->button_titles_cache(), form_cache); if (!form_and_field) { return std::nullopt; }
diff --git a/components/autofill/content/renderer/password_form_conversion_utils.cc b/components/autofill/content/renderer/password_form_conversion_utils.cc index 1b6af21..14c16ebb 100644 --- a/components/autofill/content/renderer/password_form_conversion_utils.cc +++ b/components/autofill/content/renderer/password_form_conversion_utils.cc
@@ -33,8 +33,6 @@ namespace autofill { -using form_util::ExtractOption; - namespace { const char kPasswordSiteUrlRegex[] =
diff --git a/components/autofill/content/renderer/synchronous_form_cache.cc b/components/autofill/content/renderer/synchronous_form_cache.cc index 39a921e..1608331 100644 --- a/components/autofill/content/renderer/synchronous_form_cache.cc +++ b/components/autofill/content/renderer/synchronous_form_cache.cc
@@ -39,8 +39,7 @@ const blink::WebFormElement& form_element, const FieldDataManager& field_data_manager, const CallTimerState& timer_state, - form_util::ButtonTitlesCache* button_titles_cache, - DenseSet<form_util::ExtractOption> extract_options) const { + form_util::ButtonTitlesCache* button_titles_cache) const { if (!cache_.empty()) { if (FormRendererId form_id = form_util::GetFormRendererId(form_element); cache_.contains(form_id)) { @@ -62,8 +61,7 @@ #endif // !BUILDFLAG(IS_ANDROID) } return form_util::ExtractFormData(document, form_element, field_data_manager, - timer_state, button_titles_cache, - extract_options); + timer_state, button_titles_cache); } void SynchronousFormCache::Insert(FormRendererId form_id,
diff --git a/components/autofill/content/renderer/synchronous_form_cache.h b/components/autofill/content/renderer/synchronous_form_cache.h index e86fbd9..c3b68a7f 100644 --- a/components/autofill/content/renderer/synchronous_form_cache.h +++ b/components/autofill/content/renderer/synchronous_form_cache.h
@@ -54,8 +54,7 @@ const blink::WebFormElement& form_element, const FieldDataManager& field_data_manager, const CallTimerState& timer_state, - form_util::ButtonTitlesCache* button_titles_cache, - DenseSet<form_util::ExtractOption> extract_options = {}) const; + form_util::ButtonTitlesCache* button_titles_cache) const; private: // Stores for a given FormRendererId the last result of trying to extract the
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index eab6b060..debe4cc 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn
@@ -1260,6 +1260,7 @@ ":browser", "//components/autofill/core/common:test_support", "//components/optimization_guide/core:features", + "//components/strike_database:proto", "//components/strike_database:test_support", ] @@ -1715,6 +1716,7 @@ "//components/security_state/core", "//components/signin/public/base:test_support", "//components/signin/public/identity_manager:test_support", + "//components/strike_database:features", "//components/strings", "//components/sync", "//components/sync:test_support",
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.cc b/components/autofill/core/browser/foundations/browser_autofill_manager.cc index 7dcfcb1..c30e1dd 100644 --- a/components/autofill/core/browser/foundations/browser_autofill_manager.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.cc
@@ -3013,8 +3013,6 @@ return {}; } #endif - metrics_->address_form_event_logger.OnDidPollSuggestions( - trigger_field.global_id()); // If the user triggers suggestions on an autofilled field, field-by-field // filling suggestions should be shown so that the user could easily correct @@ -3062,8 +3060,6 @@ autofill_metrics::SuggestionRankingContext& ranking_context) { metrics_->credit_card_form_event_logger.set_signin_state_for_metrics( metrics_->signin_state_for_metrics); - metrics_->credit_card_form_event_logger.OnDidPollSuggestions( - trigger_field.global_id()); std::u16string card_number_field_value = u""; bool is_card_number_autofilled = false; @@ -3134,8 +3130,6 @@ if (!valuables_manager) { return {}; } - metrics_->loyalty_card_form_event_logger.OnDidPollSuggestions( - field.global_id()); return GetSuggestionsForLoyaltyCards(form, form_structure, field, autofill_field, client()); }
diff --git a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc index fa87cc9..aa878b91 100644 --- a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc +++ b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
@@ -691,15 +691,6 @@ autofill_manager().AddSeenForm(form, field_types); - // Simulate an Autofill query on a credit card field. - { - base::UserActionTester user_action_tester; - autofill_manager().OnAskForValuesToFillTest( - form, form.fields().front().global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledCreditCardSuggestions")); - } - // Simulate showing a credit card suggestion polled from "Name on card" field. { base::UserActionTester user_action_tester; @@ -887,15 +878,6 @@ autofill_manager().AddSeenForm(form, field_types); - // Simulate an Autofill query on a profile field. - { - base::UserActionTester user_action_tester; - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[0].global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledProfileSuggestions")); - } - // Simulate showing a profile suggestion polled from "State" field. { base::UserActionTester user_action_tester; @@ -1009,14 +991,6 @@ 1, user_action_tester.GetActionCount("Autofill_ParsedLoyaltyCardForm")); } - // Simulate an Autofill query on a loyalty card field. - { - base::UserActionTester user_action_tester; - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[1].global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledLoyaltyCardSuggestions")); - } // Simulate showing a loyalty card suggestion polled from "Loyalty Number" // field. { @@ -1027,55 +1001,6 @@ } } -// Tests that the Autofill_PolledCreditCardSuggestions user action is only -// logged once if the field is queried repeatedly. -TEST_F(AutofillMetricsTest, PolledCreditCardSuggestions_DebounceLogs) { - RecreateCreditCards(/*include_local_credit_card=*/true, - /*include_masked_server_credit_card=*/false, - /*masked_card_is_enrolled_for_virtual_card=*/false); - - FormData form = - CreateForm({CreateTestFormField("Name on card", "cc-name", "", - FormControlType::kInputText), - CreateTestFormField("Credit card", "cardnum", "", - FormControlType::kInputText), - CreateTestFormField("Expiration date", "expdate", "", - FormControlType::kInputText)}); - - std::vector<FieldType> field_types = {CREDIT_CARD_NAME_FULL, - CREDIT_CARD_NUMBER, - CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}; - - autofill_manager().AddSeenForm(form, field_types); - - // Simulate an Autofill query on a credit card field. A poll should be logged. - base::UserActionTester user_action_tester; - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[0].global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledCreditCardSuggestions")); - - // Simulate a second query on the same field. There should still only be one - // logged poll. - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[0].global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledCreditCardSuggestions")); - - // Simulate a query to another field. There should be a second poll logged. - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[1].global_id()); - EXPECT_EQ(2, user_action_tester.GetActionCount( - "Autofill_PolledCreditCardSuggestions")); - - // Simulate a query back to the initial field. There should be a third poll - // logged. - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[0].global_id()); - EXPECT_EQ(3, user_action_tester.GetActionCount( - "Autofill_PolledCreditCardSuggestions")); -} - // Tests that the Autofill.QueriedCreditCardFormIsSecure histogram is logged // properly. TEST_F(AutofillMetricsTest, QueriedCreditCardFormIsSecure) { @@ -1135,50 +1060,6 @@ } } -// Tests that the Autofill_PolledProfileSuggestions user action is only logged -// once if the field is queried repeatedly. -TEST_F(AutofillMetricsTest, PolledProfileSuggestions_DebounceLogs) { - RecreateProfile(); - - FormData form = CreateForm( - {CreateTestFormField("State", "state", "", FormControlType::kInputText), - CreateTestFormField("City", "city", "", FormControlType::kInputText), - CreateTestFormField("Street", "street", "", - FormControlType::kInputText)}); - - std::vector<FieldType> field_types = {ADDRESS_HOME_STATE, ADDRESS_HOME_CITY, - ADDRESS_HOME_STREET_ADDRESS}; - - autofill_manager().AddSeenForm(form, field_types); - - // Simulate an Autofill query on a profile field. A poll should be logged. - base::UserActionTester user_action_tester; - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[0].global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledProfileSuggestions")); - - // Simulate a second query on the same field. There should still only be poll - // logged. - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[0].global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledProfileSuggestions")); - - // Simulate a query to another field. There should be a second poll logged. - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[1].global_id()); - EXPECT_EQ(2, user_action_tester.GetActionCount( - "Autofill_PolledProfileSuggestions")); - - // Simulate a query back to the initial field. There should be a third poll - // logged. - autofill_manager().OnAskForValuesToFillTest(form, - form.fields()[0].global_id()); - EXPECT_EQ(3, user_action_tester.GetActionCount( - "Autofill_PolledProfileSuggestions")); -} - // Test that we log submitted form events for credit cards. TEST_F(AutofillMetricsTest, CreditCardGetRealPanDuration_ServerCard) { // Creating masked card
diff --git a/components/autofill/core/browser/metrics/form_events/address_form_event_logger.cc b/components/autofill/core/browser/metrics/form_events/address_form_event_logger.cc index a1b5eb0..da630e6 100644 --- a/components/autofill/core/browser/metrics/form_events/address_form_event_logger.cc +++ b/components/autofill/core/browser/metrics/form_events/address_form_event_logger.cc
@@ -269,11 +269,6 @@ } } -void AddressFormEventLogger::RecordPollSuggestions() { - base::RecordAction( - base::UserMetricsAction("Autofill_PolledProfileSuggestions")); -} - void AddressFormEventLogger::RecordParseForm() { base::RecordAction(base::UserMetricsAction("Autofill_ParsedProfileForm")); }
diff --git a/components/autofill/core/browser/metrics/form_events/address_form_event_logger.h b/components/autofill/core/browser/metrics/form_events/address_form_event_logger.h index e648cda..0ad293f 100644 --- a/components/autofill/core/browser/metrics/form_events/address_form_event_logger.h +++ b/components/autofill/core/browser/metrics/form_events/address_form_event_logger.h
@@ -89,7 +89,6 @@ void OnDestroyed() override; protected: - void RecordPollSuggestions() override; void RecordParseForm() override; void RecordShowSuggestions() override; void OnLog(const std::string& name,
diff --git a/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.cc b/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.cc index 89c096e..3d0d2c3d 100644 --- a/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.cc +++ b/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.cc
@@ -590,11 +590,6 @@ return filled_credit_card_; } -void CreditCardFormEventLogger::RecordPollSuggestions() { - base::RecordAction( - base::UserMetricsAction("Autofill_PolledCreditCardSuggestions")); -} - void CreditCardFormEventLogger::RecordParseForm() { base::RecordAction(base::UserMetricsAction("Autofill_ParsedCreditCardForm")); }
diff --git a/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.h b/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.h index 853395f..e28babe 100644 --- a/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.h +++ b/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger.h
@@ -153,7 +153,6 @@ protected: // FormEventLoggerBase pure-virtual overrides. - void RecordPollSuggestions() override; void RecordParseForm() override; void RecordShowSuggestions() override;
diff --git a/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger_unittest.cc b/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger_unittest.cc index 2192603..1276aae 100644 --- a/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger_unittest.cc +++ b/components/autofill/core/browser/metrics/form_events/credit_card_form_event_logger_unittest.cc
@@ -1915,25 +1915,16 @@ autofill_manager().AddSeenForm(form, field_types); - // Simulate an Autofill query on a credit card field. - { - base::UserActionTester user_action_tester; - autofill_manager().OnAskForValuesToFillTest( - form, form.fields().front().global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledCreditCardSuggestions")); - } - // Simulate submitting the credit card form. - { - base::HistogramTester histograms; - SubmitForm(form); - histograms.ExpectBucketCount("Autofill.FormEvents.CreditCard", - FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); - histograms.ExpectBucketCount( - "Autofill.FormEvents.CreditCard.WithOnlyLocalData", - FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); - } + base::HistogramTester histograms; + autofill_manager().OnAskForValuesToFillTest( + form, form.fields().front().global_id()); + SubmitForm(form); + histograms.ExpectBucketCount("Autofill.FormEvents.CreditCard", + FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); + histograms.ExpectBucketCount( + "Autofill.FormEvents.CreditCard.WithOnlyLocalData", + FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); } // Tests that credit card form submissions are *not* logged specially when the @@ -1947,24 +1938,15 @@ auto [form, field_types] = CreateNameNumberYearForm(); autofill_manager().AddSeenForm(form, field_types); - // Simulate an Autofill query on a credit card field. - { - base::UserActionTester user_action_tester; - autofill_manager().OnAskForValuesToFillTest( - form, form.fields().back().global_id()); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Autofill_PolledCreditCardSuggestions")); - } - // Simulate submitting the credit card form. - { - base::HistogramTester histograms; - SubmitForm(form); - histograms.ExpectBucketCount("Autofill.FormEvents.CreditCard", - FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); - histograms.ExpectBucketCount("Autofill.FormEvents.CreditCard", - FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); - } + base::HistogramTester histograms; + autofill_manager().OnAskForValuesToFillTest(form, + form.fields().back().global_id()); + SubmitForm(form); + histograms.ExpectBucketCount("Autofill.FormEvents.CreditCard", + FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); + histograms.ExpectBucketCount("Autofill.FormEvents.CreditCard", + FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); } } // namespace autofill::autofill_metrics
diff --git a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc index d65f8e4..7af37a2 100644 --- a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc +++ b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc
@@ -96,17 +96,6 @@ } } -void FormEventLoggerBase::OnDidPollSuggestions(FieldGlobalId field_id) { - // Record only one poll user action for consecutive polls of the same field. - // This is to avoid recording too many poll actions (for example when a user - // types in a field, triggering multiple queries) to make the analysis more - // simple. - if (field_id != last_polled_field_id_) { - RecordPollSuggestions(); - last_polled_field_id_ = field_id; - } -} - void FormEventLoggerBase::OnDidIdentifyForm( const FormStructure& form, FormIdentificationTime identification_time) {
diff --git a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h index ca5d8c4..87e3f8d 100644 --- a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h +++ b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h
@@ -45,8 +45,6 @@ void OnDidInteractWithAutofillableForm(const FormStructure& form); - void OnDidPollSuggestions(FieldGlobalId field_id); - void OnDidIdentifyForm(const FormStructure& form, FormIdentificationTime identification_time); @@ -113,7 +111,6 @@ AutofillClient& client(); AutofillDriver& driver(); - virtual void RecordPollSuggestions() = 0; virtual void RecordParseForm() = 0; virtual void RecordShowSuggestions() = 0; @@ -234,9 +231,6 @@ AblationGroup conditional_ablation_group_ = AblationGroup::kDefault; std::optional<base::TimeDelta> time_from_interaction_to_submission_; - // The ID of the last field that was polled for suggestions. - FieldGlobalId last_polled_field_id_; - // Used to count consecutive modifications on the same field as one change. FieldGlobalId last_field_global_id_modified_by_user_; // Keeps counts of Autofill fills and form elements that were modified by the
diff --git a/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.cc b/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.cc index 56f3c0e..326d6e6d 100644 --- a/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.cc +++ b/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.cc
@@ -104,11 +104,6 @@ card_categories_filled_.insert(loyalty_card.GetAffiliationCategory(url)); } -void LoyaltyCardFormEventLogger::RecordPollSuggestions() { - base::RecordAction( - base::UserMetricsAction("Autofill_PolledLoyaltyCardSuggestions")); -} - void LoyaltyCardFormEventLogger::RecordParseForm() { base::RecordAction(base::UserMetricsAction("Autofill_ParsedLoyaltyCardForm")); }
diff --git a/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.h b/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.h index 29cffcef..835ad50 100644 --- a/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.h +++ b/components/autofill/core/browser/metrics/form_events/loyalty_card_form_event_logger.h
@@ -46,7 +46,6 @@ const GURL& url); protected: - void RecordPollSuggestions() override; void RecordParseForm() override; void RecordShowSuggestions() override;
diff --git a/components/autofill/core/browser/payments/save_and_fill_manager_impl_unittest.cc b/components/autofill/core/browser/payments/save_and_fill_manager_impl_unittest.cc index 47b3543..703afd3a 100644 --- a/components/autofill/core/browser/payments/save_and_fill_manager_impl_unittest.cc +++ b/components/autofill/core/browser/payments/save_and_fill_manager_impl_unittest.cc
@@ -21,6 +21,7 @@ #include "components/autofill/core/browser/strike_databases/payments/test_strike_database.h" #include "components/autofill/core/browser/test_utils/autofill_test_utils.h" #include "components/autofill/core/common/autofill_prefs.h" +#include "components/strike_database/strike_database_features.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -236,7 +237,7 @@ TEST_F(SaveAndFillManagerImplTest, OnUserDidDecideOnLocalSave_Accepted) { // Disable StrikeDB check so it will not block feature prompt. base::test::ScopedFeatureList feature_list( - features::kDisableAutofillStrikeSystem); + strike_database::features::kDisableStrikeSystem); SaveAndFillStrikeDatabase save_and_fill_strike_database(strike_database_); // Add an existing strike. save_and_fill_strike_database.AddStrike(); @@ -621,7 +622,7 @@ TEST_F(SaveAndFillManagerImplTest, OnUserDidDecideOnUploadSave_Accepted) { // Disable StrikeDB check so it will not block feature prompt. base::test::ScopedFeatureList feature_list( - features::kDisableAutofillStrikeSystem); + strike_database::features::kDisableStrikeSystem); SaveAndFillStrikeDatabase save_and_fill_strike_database(strike_database_); // Add an existing strike. save_and_fill_strike_database.AddStrike();
diff --git a/components/autofill/core/browser/proto/BUILD.gn b/components/autofill/core/browser/proto/BUILD.gn index abb310e..e3741ea 100644 --- a/components/autofill/core/browser/proto/BUILD.gn +++ b/components/autofill/core/browser/proto/BUILD.gn
@@ -13,7 +13,6 @@ "password_requirements_shard.proto", "server.proto", "states.proto", - "strike_data.proto", ] }
diff --git a/components/autofill/core/browser/strike_databases/addresses/address_suggestion_strike_database.cc b/components/autofill/core/browser/strike_databases/addresses/address_suggestion_strike_database.cc index 007735b..0efacd0 100644 --- a/components/autofill/core/browser/strike_databases/addresses/address_suggestion_strike_database.cc +++ b/components/autofill/core/browser/strike_databases/addresses/address_suggestion_strike_database.cc
@@ -7,7 +7,6 @@ #include <string> #include "base/strings/string_number_conversions.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" #include "components/autofill/core/browser/strike_databases/addresses/autofill_profile_save_strike_database.h" #include "components/autofill/core/common/signatures.h"
diff --git a/components/autofill/core/browser/strike_databases/payments/test_strike_database.cc b/components/autofill/core/browser/strike_databases/payments/test_strike_database.cc index 11d35087..526d4d4 100644 --- a/components/autofill/core/browser/strike_databases/payments/test_strike_database.cc +++ b/components/autofill/core/browser/strike_databases/payments/test_strike_database.cc
@@ -4,7 +4,7 @@ #include "components/autofill/core/browser/strike_databases/payments/test_strike_database.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" +#include "components/strike_database/strike_data.pb.h" namespace autofill {
diff --git a/components/autofill/core/browser/strike_databases/payments/test_strike_database.h b/components/autofill/core/browser/strike_databases/payments/test_strike_database.h index c90006b..08b5f30d 100644 --- a/components/autofill/core/browser/strike_databases/payments/test_strike_database.h +++ b/components/autofill/core/browser/strike_databases/payments/test_strike_database.h
@@ -10,7 +10,7 @@ #include <unordered_map> #include <utility> -#include "components/autofill/core/browser/proto/strike_data.pb.h" +#include "components/strike_database/strike_data.pb.h" #include "components/strike_database/strike_database.h" namespace autofill {
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc index 54c00439..71a0dbb 100644 --- a/components/autofill/core/common/autofill_payments_features.cc +++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -330,12 +330,6 @@ base::FEATURE_ENABLED_BY_DEFAULT); #endif // BUILDFLAG(IS_ANDROID) -// If enabled, the Autofill strike system will not block features. Intended for -// debugging/testing use only and should never be launched to users. -BASE_FEATURE(kDisableAutofillStrikeSystem, - "DisableAutofillStrikeSystem", - base::FEATURE_DISABLED_BY_DEFAULT); - bool ShouldShowImprovedUserConsentForCreditCardSave() { #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) // The new user consent UI is fully launched on MacOS, Windows and Linux.
diff --git a/components/autofill/core/common/autofill_payments_features.h b/components/autofill/core/common/autofill_payments_features.h index 664d1c5..6e87b482 100644 --- a/components/autofill/core/common/autofill_payments_features.h +++ b/components/autofill/core/common/autofill_payments_features.h
@@ -124,9 +124,6 @@ COMPONENT_EXPORT(AUTOFILL) extern const base::FeatureParam<int> kAutofillVcnEnrollStrikeExpiryTimeDays; -COMPONENT_EXPORT(AUTOFILL) -BASE_DECLARE_FEATURE(kDisableAutofillStrikeSystem); - // Return whether a [No thanks] button and new messaging is shown in the save // card bubbles. This will be called only on desktop platforms. COMPONENT_EXPORT(AUTOFILL)
diff --git a/components/autofill_prediction_improvements_strings_grdp/OWNERS b/components/autofill_prediction_improvements_strings_grdp/OWNERS deleted file mode 100644 index 50a21bb..0000000 --- a/components/autofill_prediction_improvements_strings_grdp/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -file://components/autofill/OWNERS
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 72075da..497c416 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "64.3", - "log_list_timestamp": "2025-09-01T12:54:38Z", + "version": "64.4", + "log_list_timestamp": "2025-09-02T12:52:33Z", "operators": [ { "name": "Google",
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/AndroidRequestFinishedInfoWrapper.java b/components/cronet/android/java/src/org/chromium/net/impl/AndroidRequestFinishedInfoWrapper.java index 28246fd..24373ec 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/AndroidRequestFinishedInfoWrapper.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/AndroidRequestFinishedInfoWrapper.java
@@ -59,8 +59,7 @@ new AndroidRequestFinishedInfoWrapper( url, annotations, - new CronetMetrics( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, false, 0, 0), + CronetMetrics.empty(), finishedReason, responseInfo, exception);
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java index a3b47ec..46e1aee 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java
@@ -861,12 +861,9 @@ mMetrics = metrics; if (mMetrics == null) { // mMetrics can be null if the native counterpart never created an underlying native - // component for this request. In this scenario, initialize the mMetrics with sentinel - // values. This is not ideal, but this is how Cronet historically behaved and so we - // cannot change this behavior without running the risk of breaking apps. - mMetrics = - new CronetMetrics( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, false, 0, 0); + // component for this request. Make sure we provide users with a non-null metrics object + // as some users would be broken otherwise. + mMetrics = CronetMetrics.empty(); } mQuicConnectionMigrationAttempted = quicConnectionMigrationAttempted; mQuicConnectionMigrationSuccessful = quicConnectionMigrationSuccessful;
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java index ede49ae..610b7e38 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java
@@ -54,6 +54,16 @@ return (end >= start && start != -1) || end == -1; } + /** + * Returns a metrics object populated with empty values. + * + * <p>Ideally we should just provide Cronet users with a null Metrics object instead, but sadly, + * for historical reasons not all users handle a null object properly. + */ + public static CronetMetrics empty() { + return new CronetMetrics(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, false, 0, 0); + } + /** New-style constructor */ @CalledByNative public CronetMetrics(
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java index 532697c..cf9cbee 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java
@@ -523,9 +523,14 @@ } } + // The metrics are available once a terminal callback has started executing. + public CronetMetrics getFinishedRequestTimings() { + return mMetrics; + } + /** - * Helper method to set final status of CronetUrlRequest and clean up the - * native request adapter. + * Helper method to set final status of CronetUrlRequest and clean up the native request + * adapter. */ @GuardedBy("mUrlRequestAdapterLock") private void destroyRequestAdapterLocked( @@ -802,6 +807,15 @@ @SuppressWarnings("unused") @CalledByNative private void onCanceled() { + if (mMetrics == null) { + // It's possible for a race condition to happen where the user cancels the request + // before we've created the native adapter. This means that the native metrics + // does not even exist. So instead of not reporting anything, we'll report + // metrics with sentinel values. + // + // See crbug.com/328065446 for more details. + mMetrics = CronetMetrics.empty(); + } Runnable task = new Runnable() { @Override @@ -900,6 +914,14 @@ return; } } + if (mMetrics == null) { + // there's no way to get the metrics once the native adapter has been destroyed. + // So if it was never reported from the native side which could happen for + // several reasons (e.g. failure before setting up the underlying request), then + // create the default empty sentinel valued metric object. + // See crbug.com/328065446 for more details. + mMetrics = CronetMetrics.empty(); + } Runnable task = new Runnable() { @Override @@ -1109,12 +1131,9 @@ final RefCountDelegate inflightCallbackCount = new RefCountDelegate(() -> mRequestContext.onRequestFinished()); try { - // If the native adapter was never started, onMetricsCollected() was not called and so - // we have no metrics to report. - // TODO: https://issuetracker.google.com/328065446 - we should really prevent this from - // happening because we will end up not logging the metrics, and the user may end up - // waiting forever for a request finished callback that will never come. - if (mMetrics == null) return; + if (mMetrics == null) { + throw new IllegalStateException("The metrics should have been initialized."); + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { try {
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java index 3c42f56c..d04a722 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java
@@ -12,6 +12,8 @@ import android.os.ConditionVariable; import android.os.StrictMode; +import org.chromium.net.impl.CronetUrlRequest; + import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.concurrent.ExecutorService; @@ -266,6 +268,9 @@ @Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { checkExecutorThread(); + if (request instanceof CronetUrlRequest cronetUrlRequest) { + assertThat(cronetUrlRequest.getFinishedRequestTimings()).isNotNull(); + } assertThat(request.isDone()).isTrue(); assertThat(mResponseStep) .isAnyOf(ResponseStep.ON_RESPONSE_STARTED, ResponseStep.ON_READ_COMPLETED); @@ -287,6 +292,9 @@ if (error.getCause() instanceof InlineExecutionProhibitedException) { mAllowDirectExecutor = true; } + if (request instanceof CronetUrlRequest cronetUrlRequest) { + assertThat(cronetUrlRequest.getFinishedRequestTimings()).isNotNull(); + } checkExecutorThread(); assertThat(request.isDone()).isTrue(); // Shouldn't happen after success. @@ -315,6 +323,9 @@ @Override public void onCanceled(UrlRequest request, UrlResponseInfo info) { checkExecutorThread(); + if (request instanceof CronetUrlRequest cronetUrlRequest) { + assertThat(cronetUrlRequest.getFinishedRequestTimings()).isNotNull(); + } assertThat(request.isDone()).isTrue(); // Should happen at most once for a single request. assertThat(mOnCanceledCalled).isFalse();
diff --git a/components/data_sharing/internal/group_data_model_unittest.cc b/components/data_sharing/internal/group_data_model_unittest.cc index 3a4dabf..ad44adf 100644 --- a/components/data_sharing/internal/group_data_model_unittest.cc +++ b/components/data_sharing/internal/group_data_model_unittest.cc
@@ -253,12 +253,12 @@ size_t call_count = 0; EXPECT_CALL(observer_, OnGroupAdded(_, NotNullTime())) .Times(::testing::AtLeast(0)) - .WillRepeatedly(::testing::DoAll(::testing::Invoke([&]() { + .WillRepeatedly(::testing::DoAll([&]() { ++call_count; if (call_count == number_of_groups) { run_loop.Quit(); } - }))); + })); run_loop.Run(); }
diff --git a/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_service_impl_unittest.cc b/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_service_impl_unittest.cc index 845f610..e652d21 100644 --- a/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_service_impl_unittest.cc +++ b/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_service_impl_unittest.cc
@@ -20,7 +20,6 @@ namespace { using testing::_; -using testing::Invoke; using testing::Return; using testing::ReturnRef; @@ -54,9 +53,9 @@ base::RunLoop run_loop; base::RepeatingClosure quit_closure = run_loop.QuitClosure(); - EXPECT_CALL(mock_processor_, ModelReadyToSync).WillOnce(Invoke([&]() { + EXPECT_CALL(mock_processor_, ModelReadyToSync).WillOnce([&]() { quit_closure.Run(); - })); + }); EXPECT_CALL(mock_observer_, OnInitialized()); service_ = std::make_unique<PersonalCollaborationDataServiceImpl>(
diff --git a/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_sync_bridge_unittest.cc b/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_sync_bridge_unittest.cc index cb73986..b047ea19 100644 --- a/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_sync_bridge_unittest.cc +++ b/components/data_sharing/internal/personal_collaboration_data/personal_collaboration_data_sync_bridge_unittest.cc
@@ -33,7 +33,6 @@ using base::test::EqualsProto; using syncer::CollaborationId; using testing::_; -using testing::Invoke; using testing::Return; using testing::ReturnRef; @@ -120,9 +119,9 @@ base::RunLoop run_loop; base::RepeatingClosure quit_closure = run_loop.QuitClosure(); - EXPECT_CALL(processor_, ModelReadyToSync).WillOnce(Invoke([&]() { + EXPECT_CALL(processor_, ModelReadyToSync).WillOnce([&]() { quit_closure.Run(); - })); + }); bridge_ = std::make_unique<PersonalCollaborationDataSyncBridge>( processor_.CreateForwardingProcessor(), @@ -631,9 +630,9 @@ // Now, initialize the bridge. base::RunLoop run_loop; base::RepeatingClosure quit_closure = run_loop.QuitClosure(); - EXPECT_CALL(processor_, ModelReadyToSync).WillOnce(Invoke([&]() { + EXPECT_CALL(processor_, ModelReadyToSync).WillOnce([&]() { quit_closure.Run(); - })); + }); bridge().MergeFullSyncData(bridge().CreateMetadataChangeList(), syncer::EntityChangeList()); run_loop.Run(); @@ -660,19 +659,18 @@ ShouldReportErrorOnLoadFailure) { auto mock_store = std::make_unique<syncer::MockDataTypeStore>(); EXPECT_CALL(*mock_store, ReadAllDataAndMetadata) - .WillOnce(Invoke([](syncer::DataTypeStore::ReadAllDataAndMetadataCallback - callback) { + .WillOnce([](syncer::DataTypeStore::ReadAllDataAndMetadataCallback + callback) { std::move(callback).Run( syncer::ModelError( FROM_HERE, syncer::ModelError::Type::kDataTypeStoreBackendDbReadFailed), /*entries=*/nullptr, /*metadata_batch=*/nullptr); - })); + }); base::RunLoop run_loop; EXPECT_CALL(mock_processor(), ReportError(_)) - .WillOnce( - Invoke([&](const syncer::ModelError& error) { run_loop.Quit(); })); + .WillOnce([&](const syncer::ModelError& error) { run_loop.Quit(); }); CreateBridgeWithMockStore(std::move(mock_store)); run_loop.Run(); EXPECT_FALSE(bridge().IsInitialized()); @@ -684,41 +682,41 @@ // Mock ReadAllDataAndMetadata to succeed. EXPECT_CALL(*mock_store, ReadAllDataAndMetadata) - .WillOnce(Invoke( + .WillOnce( [](syncer::DataTypeStore::ReadAllDataAndMetadataCallback callback) { std::move(callback).Run( /*error=*/std::nullopt, std::make_unique<syncer::DataTypeStore::RecordList>(), std::make_unique<syncer::MetadataBatch>()); - })); + }); // Mock CreateWriteBatch to return a valid batch. - ON_CALL(*mock_store, CreateWriteBatch).WillByDefault(Invoke([]() { + ON_CALL(*mock_store, CreateWriteBatch).WillByDefault([]() { return std::make_unique<FakeWriteBatch>(); - })); + }); // Mock CommitWriteBatch to fail. EXPECT_CALL(*mock_store, CommitWriteBatch) .WillOnce( - Invoke([](std::unique_ptr<syncer::DataTypeStore::WriteBatch> batch, - syncer::DataTypeStore::CallbackWithResult callback) { + [](std::unique_ptr<syncer::DataTypeStore::WriteBatch> batch, + syncer::DataTypeStore::CallbackWithResult callback) { std::move(callback).Run(syncer::ModelError( FROM_HERE, syncer::ModelError::Type::kDataTypeStoreBackendDbWriteFailed)); - })); + }); base::RunLoop run_loop; - EXPECT_CALL(mock_processor(), ModelReadyToSync).WillOnce(Invoke([&]() { + EXPECT_CALL(mock_processor(), ModelReadyToSync).WillOnce([&]() { run_loop.Quit(); - })); + }); CreateBridgeWithMockStore(std::move(mock_store)); run_loop.Run(); ASSERT_TRUE(bridge().IsInitialized()); base::RunLoop commit_run_loop; EXPECT_CALL(mock_processor(), ReportError(_)) - .WillOnce(Invoke( - [&](const syncer::ModelError& error) { commit_run_loop.Quit(); })); + .WillOnce( + [&](const syncer::ModelError& error) { commit_run_loop.Quit(); }); syncer::EntityChangeList change_list; change_list.push_back(CreateAddEntityChange(CreateTabGroupAccountSpecifics( CollaborationId(kTestCollaborationId), kTestTabGuid, kTestGroupGuid,
diff --git a/components/embedder_support/android/delegate/web_contents_delegate_android.cc b/components/embedder_support/android/delegate/web_contents_delegate_android.cc index a560d65e..192297dc 100644 --- a/components/embedder_support/android/delegate/web_contents_delegate_android.cc +++ b/components/embedder_support/android/delegate/web_contents_delegate_android.cc
@@ -10,6 +10,7 @@ #include "base/android/jni_array.h" #include "base/android/jni_callback.h" #include "base/android/jni_string.h" +#include "base/feature_list.h" #include "base/functional/bind.h" #include "base/metrics/histogram_functions.h" #include "base/notimplemented.h" @@ -698,4 +699,29 @@ Java_WebContentsDelegateAndroid_contentsZoomChange(env, obj, zoom_in); } +content::NavigationController::UserAgentOverrideOption +WebContentsDelegateAndroid::ShouldOverrideUserAgentForPrerender2( + const GURL& url) { + // Killswitch + if (!base::FeatureList::IsEnabled( + features::kPreloadingRespectUserAgentOverride)) { + return WebContentsDelegate::ShouldOverrideUserAgentForPrerender2(url); + } + + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) { + // Fallback to base class version when JNI is unavailable. + return WebContentsDelegate::ShouldOverrideUserAgentForPrerender2(url); + } + + ScopedJavaLocalRef<jobject> j_url = + url::GURLAndroid::FromNativeGURL(env, url); + int j_override_option = + Java_WebContentsDelegateAndroid_shouldOverrideUserAgentForPrerender2( + env, obj, j_url); + return static_cast<content::NavigationController::UserAgentOverrideOption>( + j_override_option); +} + } // namespace web_contents_delegate_android
diff --git a/components/embedder_support/android/delegate/web_contents_delegate_android.h b/components/embedder_support/android/delegate/web_contents_delegate_android.h index a13f342..fb21bd2c 100644 --- a/components/embedder_support/android/delegate/web_contents_delegate_android.h +++ b/components/embedder_support/android/delegate/web_contents_delegate_android.h
@@ -145,6 +145,8 @@ content::BackForwardTransitionAnimationManager::FallbackUXConfig GetBackForwardTransitionFallbackUXConfig() override; void ContentsZoomChange(bool zoom_in) override; + content::NavigationController::UserAgentOverrideOption + ShouldOverrideUserAgentForPrerender2(const GURL& url) override; protected: base::android::ScopedJavaLocalRef<jobject> GetJavaDelegate(JNIEnv* env) const;
diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java index 8a83ee9..79b23043 100644 --- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java +++ b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java
@@ -18,6 +18,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.navigation_controller.UserAgentOverrideOption; import org.chromium.content_public.common.ResourceRequestBody; import org.chromium.url.GURL; @@ -271,6 +272,17 @@ public void contentsZoomChange(boolean zoomIn) {} /** + * Returns whether to override user agent for prerendering navigation. + * + * @param url The target URL of the prerendering navigation. + */ + @CalledByNative + public @UserAgentOverrideOption int shouldOverrideUserAgentForPrerender2(GURL url) { + // Inherit UA override of the last committed navigation regardless of URL as fallback. + return UserAgentOverrideOption.INHERIT; + } + + /** * Capture current visible native view as a bitmap. * * @param callback Executed asynchronously with the captured screenshot if this returns true.
diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc index 42c2abf..e78e927 100644 --- a/components/feed/feed_feature_list.cc +++ b/components/feed/feed_feature_list.cc
@@ -99,7 +99,7 @@ BASE_FEATURE(kWebFeedKillSwitch, "WebFeedKillSwitch", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kFeedRecyclerBinderUnmountOnDetach, "FeedRecyclerBinderUnmountOnDetach", @@ -111,7 +111,7 @@ BASE_FEATURE(kFeedHeaderRemoval, "FeedHeaderRemoval", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kFeedAudioOverviews, "FeedAudioOverviews",
diff --git a/components/history_clusters/core/query_clusters_state_unittest.cc b/components/history_clusters/core/query_clusters_state_unittest.cc index 7655f583..0ccd91a 100644 --- a/components/history_clusters/core/query_clusters_state_unittest.cc +++ b/components/history_clusters/core/query_clusters_state_unittest.cc
@@ -23,7 +23,6 @@ using ::testing::_; using ::testing::DoAll; using ::testing::ElementsAre; -using ::testing::Invoke; using ::testing::SaveArg; namespace history_clusters {
diff --git a/components/history_embeddings/ml_answerer_unittest.cc b/components/history_embeddings/ml_answerer_unittest.cc index 3ba6be2..ce0d9d80 100644 --- a/components/history_embeddings/ml_answerer_unittest.cc +++ b/components/history_embeddings/ml_answerer_unittest.cc
@@ -101,9 +101,9 @@ }); ON_CALL(session_1_, GetSizeInTokens(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelSizeInTokenCallback - callback) { std::move(callback).Run(100); }))); + callback) { std::move(callback).Run(100); })); Answerer::Context context("1"); context.url_passages_map.insert({"url_1", {"passage_11", "passage_12"}}); @@ -121,17 +121,17 @@ }); ON_CALL(session_1_, GetSizeInTokens(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelSizeInTokenCallback - callback) { std::move(callback).Run(100); }))); + callback) { std::move(callback).Run(100); })); ON_CALL(session_1_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(0.6); }))); + callback) { std::move(callback).Run(0.6); })); ON_CALL(session_1_, ExecuteModel(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide:: OptimizationGuideModelExecutionResultStreamingCallback callback) { @@ -146,7 +146,7 @@ OptimizationGuideModelExecutionError:: ModelExecutionError::kGenericFailure)), /*provided_by_on_device=*/true, nullptr))); - }))); + })); Answerer::Context context("1"); context.url_passages_map.insert({"url_1", {"passage_11", "passage_12"}}); @@ -164,17 +164,17 @@ }); ON_CALL(session_1_, GetSizeInTokens(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelSizeInTokenCallback - callback) { std::move(callback).Run(100); }))); + callback) { std::move(callback).Run(100); })); ON_CALL(session_1_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(0.6); }))); + callback) { std::move(callback).Run(0.6); })); ON_CALL(session_1_, ExecuteModel(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide:: OptimizationGuideModelExecutionResultStreamingCallback callback) { @@ -184,7 +184,7 @@ OptimizationGuideModelStreamingExecutionResult( base::ok(MakeResponse("Answer_1")), /*provided_by_on_device=*/true, nullptr))); - }))); + })); Answerer::Context context("1"); context.url_passages_map.insert({"url_1", {"passage_11", "passage_12"}}); @@ -211,29 +211,29 @@ }); ON_CALL(session_1_, GetSizeInTokens(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelSizeInTokenCallback - callback) { std::move(callback).Run(100); }))); + callback) { std::move(callback).Run(100); })); ON_CALL(session_2_, GetSizeInTokens(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelSizeInTokenCallback - callback) { std::move(callback).Run(100); }))); + callback) { std::move(callback).Run(100); })); ON_CALL(session_1_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(0.6); }))); + callback) { std::move(callback).Run(0.6); })); ON_CALL(session_2_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback callback) { std::move(callback).Run(0.9); - }))); // Speculative decoding should continue with this session. + })); // Speculative decoding should continue with this session. ON_CALL(session_2_, ExecuteModel(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide:: OptimizationGuideModelExecutionResultStreamingCallback callback) { @@ -243,7 +243,7 @@ OptimizationGuideModelStreamingExecutionResult( base::ok(MakeResponse("Answer_2")), /*provided_by_on_device=*/true, nullptr))); - }))); + })); Answerer::Context context("1"); context.url_passages_map.insert({"url_1", {"passage_11", "passage_12"}}); @@ -271,15 +271,15 @@ }); ON_CALL(session_1_, GetSizeInTokens(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelSizeInTokenCallback - callback) { std::move(callback).Run(100); }))); + callback) { std::move(callback).Run(100); })); // Below the default 0.5 threshold. ON_CALL(session_1_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(0.3); }))); + callback) { std::move(callback).Run(0.3); })); Answerer::Context context("1"); context.url_passages_map.insert({"url_1", {"passage_11", "passage_12"}}); @@ -296,15 +296,15 @@ }); ON_CALL(session_1_, GetSizeInTokens(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelSizeInTokenCallback - callback) { std::move(callback).Run(100); }))); + callback) { std::move(callback).Run(100); })); // Null score ON_CALL(session_1_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(std::nullopt); }))); + callback) { std::move(callback).Run(std::nullopt); })); Answerer::Context context("1"); context.url_passages_map.insert({"url_1", {"passage_11", "passage_12"}});
diff --git a/components/history_embeddings/ml_intent_classifier_unittest.cc b/components/history_embeddings/ml_intent_classifier_unittest.cc index 238df2f..eb29f54 100644 --- a/components/history_embeddings/ml_intent_classifier_unittest.cc +++ b/components/history_embeddings/ml_intent_classifier_unittest.cc
@@ -152,9 +152,9 @@ // Above threshold. ON_CALL(session_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(0.6); }))); + callback) { std::move(callback).Run(0.6); })); MlIntentClassifier intent_classifier(&executor_); { @@ -174,9 +174,9 @@ // below threshold. ON_CALL(session_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(0.4); }))); + callback) { std::move(callback).Run(0.4); })); MlIntentClassifier intent_classifier(&executor_); { @@ -196,9 +196,9 @@ // Null score ON_CALL(session_, Score(_, _)) - .WillByDefault(testing::WithArg<1>(testing::Invoke( + .WillByDefault(testing::WithArg<1>( [&](optimization_guide::OptimizationGuideModelScoreCallback - callback) { std::move(callback).Run(std::nullopt); }))); + callback) { std::move(callback).Run(std::nullopt); })); MlIntentClassifier intent_classifier(&executor_); {
diff --git a/components/password_manager/core/browser/password_form_metrics_recorder.cc b/components/password_manager/core/browser/password_form_metrics_recorder.cc index 490e4f0..a8c836d 100644 --- a/components/password_manager/core/browser/password_form_metrics_recorder.cc +++ b/components/password_manager/core/browser/password_form_metrics_recorder.cc
@@ -1142,8 +1142,6 @@ break; // Other reasons to show a bubble: - // TODO(crbug.com/40123456): Decide how to collect metrics for this new UI. - case metrics_util::AUTOMATIC_SAVE_UNSYNCED_CREDENTIALS_LOCALLY: case metrics_util::MANUAL_MANAGE_PASSWORDS: case metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION: case metrics_util::MANUAL_GENERATED_PASSWORD_CONFIRMATION:
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h index de44c47..95c37b56 100644 --- a/components/password_manager/core/browser/password_manager_metrics_util.h +++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -40,7 +40,7 @@ MANUAL_WITH_PASSWORD_PENDING_UPDATE = 7, AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE = 8, MANUAL_GENERATED_PASSWORD_CONFIRMATION = 9, - AUTOMATIC_SAVE_UNSYNCED_CREDENTIALS_LOCALLY = 10, + // Deprecated: AUTOMATIC_SAVE_UNSYNCED_CREDENTIALS_LOCALLY = 10, AUTOMATIC_COMPROMISED_CREDENTIALS_REMINDER = 11, AUTOMATIC_MOVE_TO_ACCOUNT_STORE = 12, MANUAL_BIOMETRIC_AUTHENTICATION_FOR_FILLING = 13,
diff --git a/components/password_manager/core/browser/password_store/login_database_async_helper.cc b/components/password_manager/core/browser/password_store/login_database_async_helper.cc index bf56515c0..d9b0bcb 100644 --- a/components/password_manager/core/browser/password_store/login_database_async_helper.cc +++ b/components/password_manager/core/browser/password_store/login_database_async_helper.cc
@@ -33,14 +33,12 @@ LoginDatabaseAsyncHelper::LoginDatabaseAsyncHelper( std::unique_ptr<LoginDatabase> login_db, - UnsyncedCredentialsDeletionNotifier notifier, scoped_refptr<base::SequencedTaskRunner> main_task_runner, syncer::WipeModelUponSyncDisabledBehavior wipe_model_upon_sync_disabled_behavior) : login_db_(std::move(login_db)), wipe_model_upon_sync_disabled_behavior_( wipe_model_upon_sync_disabled_behavior), - deletion_notifier_(std::move(notifier)), main_task_runner_(std::move(main_task_runner)) { DETACH_FROM_SEQUENCE(sequence_checker_); DCHECK(login_db_); @@ -388,16 +386,6 @@ deletions_have_synced_callbacks_.clear(); } -void LoginDatabaseAsyncHelper::NotifyUnsyncedCredentialsWillBeDeleted( - std::vector<PasswordForm> unsynced_credentials) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(IsAccountStore()); - // |deletion_notifier_| only gets set for desktop. - if (deletion_notifier_) { - deletion_notifier_.Run(std::move(unsynced_credentials)); - } -} - bool LoginDatabaseAsyncHelper::BeginTransaction() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (login_db_) {
diff --git a/components/password_manager/core/browser/password_store/login_database_async_helper.h b/components/password_manager/core/browser/password_store/login_database_async_helper.h index b3e774d..ff7d1f5 100644 --- a/components/password_manager/core/browser/password_store/login_database_async_helper.h +++ b/components/password_manager/core/browser/password_store/login_database_async_helper.h
@@ -40,7 +40,6 @@ public: LoginDatabaseAsyncHelper( std::unique_ptr<LoginDatabase> login_db, - UnsyncedCredentialsDeletionNotifier notifier, scoped_refptr<base::SequencedTaskRunner> main_task_runner, syncer::WipeModelUponSyncDisabledBehavior wipe_model_upon_sync_disabled_behavior); @@ -110,8 +109,6 @@ void AddDeletionsHaveSyncedCallback( base::OnceCallback<void(bool)> sync_completion); void NotifyDeletionsHaveSynced(bool success) override; - void NotifyUnsyncedCredentialsWillBeDeleted( - std::vector<PasswordForm> unsynced_credentials) override; bool BeginTransaction() override; void RollbackTransaction() override; bool CommitTransaction() override; @@ -160,8 +157,6 @@ remote_forms_changes_received_callback_ GUARDED_BY_CONTEXT(sequence_checker_); - UnsyncedCredentialsDeletionNotifier deletion_notifier_; - // A list of callbacks that should be run once all pending deletions have been // sent to the Sync server. Note that the vector itself lives on the // background thread, but the callbacks must be run on the main thread!
diff --git a/components/password_manager/core/browser/password_store/password_store.h b/components/password_manager/core/browser/password_store/password_store.h index 7d77827..fe99684 100644 --- a/components/password_manager/core/browser/password_store/password_store.h +++ b/components/password_manager/core/browser/password_store/password_store.h
@@ -45,10 +45,6 @@ class PasswordStoreConsumer; -// Used to notify that unsynced credentials are about to be deleted. -using UnsyncedCredentialsDeletionNotifier = - base::RepeatingCallback<void(std::vector<PasswordForm>)>; - // Partial, cross-platform implementation for storing form passwords. // The login request/manipulation API is not threadsafe and must be used // from the UI thread.
diff --git a/components/password_manager/core/browser/password_store/password_store_built_in_backend.cc b/components/password_manager/core/browser/password_store/password_store_built_in_backend.cc index ca7de7ed..24c056b6 100644 --- a/components/password_manager/core/browser/password_store/password_store_built_in_backend.cc +++ b/components/password_manager/core/browser/password_store/password_store_built_in_backend.cc
@@ -96,8 +96,7 @@ syncer::WipeModelUponSyncDisabledBehavior wipe_model_upon_sync_disabled_behavior, PrefService* prefs, - os_crypt_async::OSCryptAsync* os_crypt_async, - UnsyncedCredentialsDeletionNotifier notifier) + os_crypt_async::OSCryptAsync* os_crypt_async) : pref_service_(prefs), os_crypt_async_(os_crypt_async) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -105,8 +104,7 @@ {base::MayBlock(), base::TaskPriority::USER_VISIBLE}); DCHECK(background_task_runner_); helper_ = std::make_unique<LoginDatabaseAsyncHelper>( - std::move(login_db), std::move(notifier), - base::SequencedTaskRunner::GetCurrentDefault(), + std::move(login_db), base::SequencedTaskRunner::GetCurrentDefault(), wipe_model_upon_sync_disabled_behavior); }
diff --git a/components/password_manager/core/browser/password_store/password_store_built_in_backend.h b/components/password_manager/core/browser/password_store/password_store_built_in_backend.h index f7fcb3a..eb0e268 100644 --- a/components/password_manager/core/browser/password_store/password_store_built_in_backend.h +++ b/components/password_manager/core/browser/password_store/password_store_built_in_backend.h
@@ -50,8 +50,7 @@ syncer::WipeModelUponSyncDisabledBehavior wipe_model_upon_sync_disabled_behavior, PrefService* prefs, - os_crypt_async::OSCryptAsync* os_crypt_async = nullptr, - UnsyncedCredentialsDeletionNotifier notifier = {}); + os_crypt_async::OSCryptAsync* os_crypt_async = nullptr); ~PasswordStoreBuiltInBackend() override;
diff --git a/components/password_manager/core/browser/sync/password_store_sync.h b/components/password_manager/core/browser/sync/password_store_sync.h index 7e57b29..af29464 100644 --- a/components/password_manager/core/browser/sync/password_store_sync.h +++ b/components/password_manager/core/browser/sync/password_store_sync.h
@@ -158,12 +158,6 @@ // them (because Sync was turned off permanently). virtual void NotifyDeletionsHaveSynced(bool success) = 0; - // Notifies the UI that some unsynced credentials will be deleted on sign-out - // in order to offer the user the option of saving them in the profile store. - // Should only be called for the account store. - virtual void NotifyUnsyncedCredentialsWillBeDeleted( - std::vector<PasswordForm> unsynced_credentials) = 0; - // The methods below adds transaction support to the password store that's // required by sync to guarantee atomic writes of data and sync metadata. // TODO(crbug.com/40601175): The introduction of the three functions below
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge.cc b/components/password_manager/core/browser/sync/password_sync_bridge.cc index bbcf0c6a..3dbe9a6 100644 --- a/components/password_manager/core/browser/sync/password_sync_bridge.cc +++ b/components/password_manager/core/browser/sync/password_sync_bridge.cc
@@ -1040,32 +1040,21 @@ // The data should be deleted too. So do the following: // 1. Collect the credentials that will be deleted. - // 2. Collect which credentials out of those to be deleted are unsynced. - // 3. Delete the metadata and the data. - // 4. Notify the store about deleted credentials, to notify store observers. - // 5. Notify the store about deleted unsynced credentials, to take care of - // notifying the UI and offering the user to save those credentials in the - // profile store. + // 2. Delete the metadata and the data. + // 3. Notify the store about deleted credentials, to notify store observers. base::AutoReset<bool> processing_changes(&is_processing_remote_sync_changes_, true); PasswordStoreChangeList password_store_changes; - std::vector<PasswordForm> unsynced_credentials_being_deleted; PrimaryKeyToPasswordSpecificsDataMap credentials; FormRetrievalResult result = password_store_sync_->ReadAllCredentials(&credentials); if (result == FormRetrievalResult::kSuccess) { - std::set<FormPrimaryKey> unsynced_passwords_storage_keys = - GetUnsyncedPasswordsStorageKeys(); for (const auto& [primary_key, specifics] : credentials) { PasswordForm form = PasswordFromSpecifics(*specifics); form.primary_key = primary_key; form.in_store = password_manager::PasswordForm::Store::kAccountStore; password_store_changes.emplace_back(PasswordStoreChange::REMOVE, form); - if (unsynced_passwords_storage_keys.count(primary_key) != 0 && - !form.blocked_by_user) { - unsynced_credentials_being_deleted.push_back(std::move(form)); - } } } password_store_sync_->GetMetadataStore()->DeleteAllSyncMetadata( @@ -1073,17 +1062,6 @@ password_store_sync_->DeleteAndRecreateDatabaseFile(); password_store_sync_->NotifyCredentialsChanged(password_store_changes); - if (password_store_sync_->IsAccountStore()) { - base::UmaHistogramCounts100( - "PasswordManager.AccountStorage.UnsyncedPasswordsFoundDuringSignOut", - unsynced_credentials_being_deleted.size()); - - if (!unsynced_credentials_being_deleted.empty()) { - password_store_sync_->NotifyUnsyncedCredentialsWillBeDeleted( - std::move(unsynced_credentials_being_deleted)); - } - } - sync_enabled_or_disabled_cb_.Run(); } @@ -1146,30 +1124,6 @@ return false; } -std::set<FormPrimaryKey> PasswordSyncBridge::GetUnsyncedPasswordsStorageKeys() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - CHECK(password_store_sync_); - - std::set<FormPrimaryKey> storage_keys; - PasswordStoreSync::MetadataStore* metadata_store = - password_store_sync_->GetMetadataStore(); - // The metadata store could be null if the login database initialization - // fails. - if (!metadata_store) { - return storage_keys; - } - std::unique_ptr<syncer::MetadataBatch> batch = - metadata_store->GetAllSyncMetadata(syncer::PASSWORDS); - for (const auto& [storage_key, metadata] : batch->GetAllMetadata()) { - // Ignore unsynced deletions. - if (!metadata->is_deleted() && - change_processor()->IsEntityUnsynced(storage_key)) { - storage_keys.insert(ParsePrimaryKey(storage_key)); - } - } - return storage_keys; -} - // static std::string PasswordSyncBridge::ComputeClientTagForTesting( const sync_pb::PasswordSpecificsData& password_data) {
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge.h b/components/password_manager/core/browser/sync/password_sync_bridge.h index b79701d..d958ff69 100644 --- a/components/password_manager/core/browser/sync/password_sync_bridge.h +++ b/components/password_manager/core/browser/sync/password_sync_bridge.h
@@ -94,9 +94,6 @@ // store. This should be called during MergeFullSyncData(). std::optional<syncer::ModelError> CleanupPasswordStore(); - // Retrieves the storage keys of all unsynced passwords in the store. - std::set<FormPrimaryKey> GetUnsyncedPasswordsStorageKeys(); - // If available, returns cached possibly trimmed PasswordSpecificsData for // given |storage_key|. By default, empty PasswordSpecificsData is returned. const sync_pb::PasswordSpecificsData& GetPossiblyTrimmedPasswordSpecificsData(
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc index 4e4aa14..ae23df34 100644 --- a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc +++ b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
@@ -200,16 +200,6 @@ /*issue_types=*/{}); } -PasswordForm MakeBlocklistedForm(const std::string& signon_realm, - int primary_key = 1) { - PasswordForm form; - form.primary_key = FormPrimaryKey(primary_key); - form.url = GURL("http://www.origin.com"); - form.signon_realm = signon_realm; - form.blocked_by_user = true; - return form; -} - void AddDeletedMetadata(syncer::MetadataBatch* metadata_batch, int64_t modification_time, bool include_version) { @@ -376,10 +366,6 @@ (const PasswordStoreChangeList&), (override)); MOCK_METHOD(void, NotifyDeletionsHaveSynced, (bool), (override)); - MOCK_METHOD(void, - NotifyUnsyncedCredentialsWillBeDeleted, - (std::vector<PasswordForm>), - (override)); MOCK_METHOD(bool, BeginTransaction, (), (override)); MOCK_METHOD(bool, CommitTransaction, (), (override)); MOCK_METHOD(void, RollbackTransaction, (), (override)); @@ -1569,112 +1555,6 @@ } TEST_F(PasswordSyncBridgeAccountStoreTest, - ShouldNotifyUnsyncedCredentialsIfAccountStore) { - base::HistogramTester histogram_tester; - - const std::string kPrimaryKeyUnsyncedCredentialStr = "1000"; - const std::string kPrimaryKeySyncedCredentialStr = "1001"; - const std::string kPrimaryKeyUnsyncedDeletionStr = "1002"; - const std::string kPrimaryKeyUnsyncedBlocklistStr = "1003"; - ON_CALL(mock_processor(), IsEntityUnsynced(kPrimaryKeyUnsyncedCredentialStr)) - .WillByDefault(Return(true)); - ON_CALL(mock_processor(), IsEntityUnsynced(kPrimaryKeySyncedCredentialStr)) - .WillByDefault(Return(false)); - ON_CALL(mock_processor(), IsEntityUnsynced(kPrimaryKeyUnsyncedDeletionStr)) - .WillByDefault(Return(true)); - ON_CALL(mock_processor(), IsEntityUnsynced(kPrimaryKeyUnsyncedBlocklistStr)) - .WillByDefault(Return(true)); - - sync_pb::EntityMetadata is_deletion_metadata; - is_deletion_metadata.set_is_deleted(true); - sync_pb::EntityMetadata is_not_deletion_metadata; - is_not_deletion_metadata.set_is_deleted(false); - ON_CALL(*mock_sync_metadata_store_sync(), GetAllSyncMetadata) - .WillByDefault([&]() { - auto batch = std::make_unique<syncer::MetadataBatch>(); - batch->AddMetadata(kPrimaryKeyUnsyncedCredentialStr, - std::make_unique<sync_pb::EntityMetadata>( - is_not_deletion_metadata)); - batch->AddMetadata(kPrimaryKeySyncedCredentialStr, - std::make_unique<sync_pb::EntityMetadata>( - is_not_deletion_metadata)); - batch->AddMetadata( - kPrimaryKeyUnsyncedDeletionStr, - std::make_unique<sync_pb::EntityMetadata>(is_deletion_metadata)); - batch->AddMetadata(kPrimaryKeyUnsyncedBlocklistStr, - std::make_unique<sync_pb::EntityMetadata>( - is_not_deletion_metadata)); - return batch; - }); - - // No form is added to the database for the unsynced deletion primary key, - // because the deletion is supposed to have already removed such form. - const int kPrimaryKeyUnsyncedCredential = 1000; - const int kPrimaryKeySyncedCredential = 1001; - const int kPrimaryKeyUnsyncedBlocklist = 1003; - PasswordForm unsynced_credential = - MakePasswordForm(kSignonRealm1, kPrimaryKeyUnsyncedCredential); - unsynced_credential.in_store = PasswordForm::Store::kAccountStore; - PasswordForm synced_credential = - MakePasswordForm(kSignonRealm2, kPrimaryKeySyncedCredential); - synced_credential.in_store = PasswordForm::Store::kAccountStore; - PasswordForm unsynced_blocklist = - MakeBlocklistedForm(kSignonRealm3, kPrimaryKeyUnsyncedBlocklist); - unsynced_blocklist.in_store = PasswordForm::Store::kAccountStore; - fake_db()->AddLoginWithPrimaryKey(unsynced_credential); - fake_db()->AddLoginWithPrimaryKey(synced_credential); - fake_db()->AddLoginWithPrimaryKey(unsynced_blocklist); - - // The notification should only contain new credentials that are unsynced, - // ignoring both synced ones, deletion entries and blocklists. - EXPECT_CALL(*mock_password_store_sync(), - NotifyUnsyncedCredentialsWillBeDeleted( - UnorderedElementsAre(unsynced_credential))); - - // The content of the metadata change list does not matter in this case. - bridge()->ApplyDisableSyncChanges(bridge()->CreateMetadataChangeList()); - - histogram_tester.ExpectUniqueSample( - "PasswordManager.AccountStorage.UnsyncedPasswordsFoundDuringSignOut", 1, - 1); -} - -TEST_F(PasswordSyncBridgeTest, - ShouldNotNotifyUnsyncedCredentialsIfProfileStore) { - base::HistogramTester histogram_tester; - - const int kPrimaryKeyUnsyncedCredential = 1000; - const std::string kPrimaryKeyUnsyncedCredentialStr = "1000"; - ON_CALL(mock_processor(), IsEntityUnsynced(kPrimaryKeyUnsyncedCredentialStr)) - .WillByDefault(Return(true)); - - sync_pb::EntityMetadata is_not_deletion_metadata; - is_not_deletion_metadata.set_is_deleted(false); - ON_CALL(*mock_sync_metadata_store_sync(), GetAllSyncMetadata) - .WillByDefault([&]() { - auto batch = std::make_unique<syncer::MetadataBatch>(); - batch->AddMetadata(kPrimaryKeyUnsyncedCredentialStr, - std::make_unique<sync_pb::EntityMetadata>( - is_not_deletion_metadata)); - return batch; - }); - - PasswordForm unsynced_deletion = MakePasswordForm(kSignonRealm3); - fake_db()->AddLoginWithPrimaryKey( - MakePasswordForm(kSignonRealm1, kPrimaryKeyUnsyncedCredential)); - - EXPECT_CALL(*mock_password_store_sync(), - NotifyUnsyncedCredentialsWillBeDeleted) - .Times(0); - - // The content of the metadata change list does not matter in this case. - bridge()->ApplyDisableSyncChanges(bridge()->CreateMetadataChangeList()); - - histogram_tester.ExpectTotalCount( - "PasswordManager.AccountStorage.UnsyncedPasswordsFoundDuringSignOut", 0); -} - -TEST_F(PasswordSyncBridgeAccountStoreTest, ShouldReportDownloadedPasswordsIfAccountStore) { ON_CALL(mock_processor(), IsTrackingMetadata()).WillByDefault(Return(true));
diff --git a/components/password_manager/core/common/password_manager_ui.h b/components/password_manager/core/common/password_manager_ui.h index c890a53..c2d5c1e 100644 --- a/components/password_manager/core/common/password_manager_ui.h +++ b/components/password_manager/core/common/password_manager_ui.h
@@ -37,10 +37,6 @@ // Chrome needs to ask the user to confirm password updating. PENDING_PASSWORD_UPDATE_STATE, - // A user opted in to account storage is about to lose some unsynced - // passwords. - WILL_DELETE_UNSYNCED_ACCOUNT_PASSWORDS_STATE, - // The user used a profile credential to log in successfully and should see a // prompt that allows them to move the credential to their account store. MOVE_CREDENTIAL_AFTER_LOG_IN_STATE,
diff --git a/components/permissions/permission_uma_util.cc b/components/permissions/permission_uma_util.cc index 4d4eced..cf74ea2 100644 --- a/components/permissions/permission_uma_util.cc +++ b/components/permissions/permission_uma_util.cc
@@ -2234,4 +2234,9 @@ base::UmaHistogramBoolean("Permissions.AIv4.EmbedderMetadataValid", valid); } +// static +void PermissionUmaUtil::RecordPredictionServiceTimeout(bool timeout) { + base::UmaHistogramBoolean("Permissions.PredictionService.Timeout", timeout); +} + } // namespace permissions
diff --git a/components/permissions/permission_uma_util.h b/components/permissions/permission_uma_util.h index e2a3d2ff..afd159b7 100644 --- a/components/permissions/permission_uma_util.h +++ b/components/permissions/permission_uma_util.h
@@ -920,6 +920,10 @@ // workflow was initiated. static void RecordPassageEmbedderMetadataValid(bool valid); + // Records whether the UI selection logic of the + // PermissionBasedPredictionUiSelector ran into a timeout. + static void RecordPredictionServiceTimeout(bool timeout); + // Records if the browser was active at the time the prompt started displaying static void RecordPromptShownInActiveBrowser( RequestTypeForUma request_type,
diff --git a/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.cc b/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.cc index 1d775e0..23727f76 100644 --- a/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.cc +++ b/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.cc
@@ -178,7 +178,7 @@ } } -void PlusAddressSubmissionLogger::OnBeforeFormSubmitted( +void PlusAddressSubmissionLogger::OnAfterFormSubmitted( autofill::AutofillManager& manager, const autofill::FormData& form) { const CoreAccountInfo core_account_info =
diff --git a/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.h b/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.h index d474c73..f2110094 100644 --- a/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.h +++ b/components/plus_addresses/core/browser/metrics/plus_address_submission_logger.h
@@ -56,8 +56,8 @@ autofill::AutofillManager& manager, autofill::AutofillManager::LifecycleState old_state, autofill::AutofillManager::LifecycleState new_state) override; - void OnBeforeFormSubmitted(autofill::AutofillManager& manager, - const autofill::FormData& form) override; + void OnAfterFormSubmitted(autofill::AutofillManager& manager, + const autofill::FormData& form) override; // Stops observing `manager` and removes all records for it. void RemoveManagerObservation(autofill::AutofillManager& manager);
diff --git a/components/regional_capabilities/BUILD.gn b/components/regional_capabilities/BUILD.gn index e56bee2..ce1449e 100644 --- a/components/regional_capabilities/BUILD.gn +++ b/components/regional_capabilities/BUILD.gn
@@ -84,6 +84,7 @@ source_set("data") { visibility = [ ":*", + "//chrome/browser/regional_capabilities:metrics_provider_impl", "//components/search_engines", "//components/search_engines:unit_tests", "//ios/chrome/browser/regional_capabilities/model",
diff --git a/components/saved_tab_groups/internal/shared_tab_group_data_sync_bridge.cc b/components/saved_tab_groups/internal/shared_tab_group_data_sync_bridge.cc index 8d333ae..178c7e1 100644 --- a/components/saved_tab_groups/internal/shared_tab_group_data_sync_bridge.cc +++ b/components/saved_tab_groups/internal/shared_tab_group_data_sync_bridge.cc
@@ -376,6 +376,8 @@ if (proto.local_group_data().has_is_group_hidden()) { group.SetIsHidden(proto.local_group_data().is_group_hidden()); } + stats::RecordSharedTabGroupDataLoadFromDiskResult( + stats::SharedTabGroupDataLoadFromDiskResult::kSuccess); groups.emplace_back(std::move(group)); // There should not be duplicate group GUIDs because they are used as @@ -407,6 +409,8 @@ stats::SharedTabGroupDataLoadFromDiskResult::kMissingCollaborationId); continue; } + stats::RecordSharedTabGroupDataLoadFromDiskResult( + stats::SharedTabGroupDataLoadFromDiskResult::kSuccess); base::Time creation_time = ExtractCreationTimeFromMetadata(sync_metadata, storage_key);
diff --git a/components/segmentation_platform/embedder/home_modules/home_modules_card_registry.cc b/components/segmentation_platform/embedder/home_modules/home_modules_card_registry.cc index a799f8e..9ea7811 100644 --- a/components/segmentation_platform/embedder/home_modules/home_modules_card_registry.cc +++ b/components/segmentation_platform/embedder/home_modules/home_modules_card_registry.cc
@@ -251,8 +251,6 @@ EnhancedSafeBrowsingEphemeralModule::IsModuleLabel(label) || SavePasswordsEphemeralModule::IsModuleLabel(label) || LensEphemeralModule::IsModuleLabel(label) || - LensEphemeralModule::IsModuleLabel(label) || - AppBundlePromoEphemeralModule::IsModuleLabel(label) || DefaultBrowserPromoEphemeralModule::IsModuleLabel(label); #else return false;
diff --git a/components/signin/internal/identity_manager/oauth_consumer_registry.cc b/components/signin/internal/identity_manager/oauth_consumer_registry.cc index 0ff528fe..4a89fa9 100644 --- a/components/signin/internal/identity_manager/oauth_consumer_registry.cc +++ b/components/signin/internal/identity_manager/oauth_consumer_registry.cc
@@ -70,6 +70,12 @@ constexpr char kPaymentsAccessTokenFetcherName[] = "payments_access_token_fetcher"; constexpr char kSaveToDriveName[] = "save_to_drive"; +constexpr char kFastPairName[] = "fast_pair"; +constexpr char kEduCoexistenceLoginHandlerName[] = + "edu_coexistence_login_handler"; +constexpr char kEduAccountLoginHandlerName[] = "edu_account_login_handler"; +constexpr char kChromeosFamilyLinkUserMetricsProviderName[] = + "chromeos_family_link_user_metrics_provider"; } // namespace @@ -78,7 +84,6 @@ OAuthConsumer::OAuthConsumer(const std::string& name, const ScopeSet& scopes) : name_(name), scopes_(scopes) { CHECK(!name.empty()); - CHECK(!scopes.empty()); } OAuthConsumer::~OAuthConsumer() = default; @@ -295,6 +300,26 @@ return OAuthConsumer( /*name=*/kSaveToDriveName, /*scopes=*/{GaiaConstants::kDriveOAuth2Scope}); + case OAuthConsumerId::kFastPair: + return OAuthConsumer( + /*name=*/kFastPairName, + /*scopes=*/{GaiaConstants::kNearbyDevicesOAuth2Scope}); + case OAuthConsumerId::kEduCoexistenceLoginHandler: + return OAuthConsumer( + /*name=*/kEduCoexistenceLoginHandlerName, + /*scopes=*/{GaiaConstants::kKidsSupervisionSetupChildOAuth2Scope, + GaiaConstants::kAccountsReauthOAuth2Scope, + GaiaConstants::kAuditRecordingOAuth2Scope, + GaiaConstants::kClearCutOAuth2Scope, + GaiaConstants::kKidManagementPrivilegedOAuth2Scope}); + case OAuthConsumerId::kEduAccountLoginHandler: + return OAuthConsumer( + /*name=*/kEduAccountLoginHandlerName, + /*scopes=*/{GaiaConstants::kAccountsReauthOAuth2Scope}); + case OAuthConsumerId::kChromeosFamilyLinkUserMetricsProvider: + return OAuthConsumer( + /*name=*/kChromeosFamilyLinkUserMetricsProviderName, + /*scopes=*/{}); } NOTREACHED(); }
diff --git a/components/signin/public/identity_manager/oauth_consumer_ids.h b/components/signin/public/identity_manager/oauth_consumer_ids.h index 7722c4b..1a920e5 100644 --- a/components/signin/public/identity_manager/oauth_consumer_ids.h +++ b/components/signin/public/identity_manager/oauth_consumer_ids.h
@@ -59,7 +59,11 @@ kAutofillPayments = 44, kPaymentsAccessTokenFetcher = 45, kSaveToDrive = 46, - kMaxValue = kSaveToDrive, + kFastPair = 47, + kEduCoexistenceLoginHandler = 48, + kEduAccountLoginHandler = 49, + kChromeosFamilyLinkUserMetricsProvider = 50, + kMaxValue = kChromeosFamilyLinkUserMetricsProvider, }; // LINT.ThenChange(//tools/metrics/histograms/metadata/signin/enums.xml:OAuthConsumerId)
diff --git a/components/strike_database/BUILD.gn b/components/strike_database/BUILD.gn index d69f1cc..6e7c1c5 100644 --- a/components/strike_database/BUILD.gn +++ b/components/strike_database/BUILD.gn
@@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni") + static_library("strike_database") { sources = [ "history_clearable_strike_database.h", @@ -24,14 +26,28 @@ ] deps = [ - # TODO(crbug.com/442352155): Move proto out of Autofill. - "//components/autofill/core/browser/proto", - - # TODO(crbug.com/442352155): Remove dependency on test feature. - "//components/autofill/core/common:features", + ":features", + ":proto", ] } +component("features") { + output_name = "strike_database_features" + defines = [ "IS_STRIKE_DATABASE_IMPL" ] + sources = [ + "strike_database_features.cc", + "strike_database_features.h", + ] + + public_deps = [ "//base" ] + + configs += [ "//build/config/compiler:wexit_time_destructors" ] +} + +fuzzable_proto_library("proto") { + sources = [ "strike_data.proto" ] +} + static_library("test_support") { testonly = true sources = [ @@ -41,7 +57,7 @@ public_deps = [ ":strike_database" ] - deps = [ "//components/autofill/core/browser/proto" ] + deps = [ ":proto" ] } source_set("unit_tests") { @@ -54,14 +70,10 @@ ] deps = [ + ":features", + ":proto", ":strike_database", "//base/test:test_support", - - # TODO(crbug.com/442352155): Move proto out of Autofill. - "//components/autofill/core/browser/proto", - - # TODO(crbug.com/442352155): Remove dependency on test feature. - "//components/autofill/core/common:features", "//testing/gtest", ] }
diff --git a/components/strike_database/DEPS b/components/strike_database/DEPS index 7a45148..ba5ff834 100644 --- a/components/strike_database/DEPS +++ b/components/strike_database/DEPS
@@ -4,7 +4,4 @@ "+components/keyed_service/core", "+components/leveldb_proto", # go/keep-sorted end - # TODO(crbug.com/442352155): Remove. - "+components/autofill/core/browser/proto/strike_data.pb.h", - "+components/autofill/core/common/autofill_payments_features.h" ]
diff --git a/components/strike_database/simple_autofill_strike_database_unittest.cc b/components/strike_database/simple_autofill_strike_database_unittest.cc index f5ae2789..e837732 100644 --- a/components/strike_database/simple_autofill_strike_database_unittest.cc +++ b/components/strike_database/simple_autofill_strike_database_unittest.cc
@@ -10,8 +10,8 @@ #include "base/files/scoped_temp_dir.h" #include "base/strings/to_string.h" #include "base/test/task_environment.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" #include "components/leveldb_proto/public/proto_database_provider.h" +#include "components/strike_database/strike_data.pb.h" #include "components/strike_database/strike_database_integrator_test_strike_database.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/autofill/core/browser/proto/strike_data.proto b/components/strike_database/strike_data.proto similarity index 100% rename from components/autofill/core/browser/proto/strike_data.proto rename to components/strike_database/strike_data.proto
diff --git a/components/strike_database/strike_database.cc b/components/strike_database/strike_database.cc index 31effb99..2c39dd72b 100644 --- a/components/strike_database/strike_database.cc +++ b/components/strike_database/strike_database.cc
@@ -14,8 +14,8 @@ #include "base/metrics/histogram_functions.h" #include "base/task/thread_pool.h" #include "base/time/time.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" #include "components/leveldb_proto/public/proto_database_provider.h" +#include "components/strike_database/strike_data.pb.h" namespace autofill {
diff --git a/components/strike_database/strike_database_features.cc b/components/strike_database/strike_database_features.cc new file mode 100644 index 0000000..70bac51 --- /dev/null +++ b/components/strike_database/strike_database_features.cc
@@ -0,0 +1,17 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/strike_database/strike_database_features.h" + +#include "base/feature_list.h" + +namespace strike_database::features { + +// If enabled, the strike system will not block features. Intended for +// debugging/testing use only and should never be launched to users. +BASE_FEATURE(kDisableStrikeSystem, + "DisableAutofillStrikeSystem", + base::FEATURE_DISABLED_BY_DEFAULT); + +} // namespace strike_database::features
diff --git a/components/strike_database/strike_database_features.h b/components/strike_database/strike_database_features.h new file mode 100644 index 0000000..08f1cfb1 --- /dev/null +++ b/components/strike_database/strike_database_features.h
@@ -0,0 +1,17 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_STRIKE_DATABASE_STRIKE_DATABASE_FEATURES_H_ +#define COMPONENTS_STRIKE_DATABASE_STRIKE_DATABASE_FEATURES_H_ + +#include "base/component_export.h" +#include "base/feature_list.h" + +namespace strike_database::features { + +COMPONENT_EXPORT(STRIKE_DATABASE) BASE_DECLARE_FEATURE(kDisableStrikeSystem); + +} // namespace strike_database::features + +#endif // COMPONENTS_STRIKE_DATABASE_STRIKE_DATABASE_FEATURES_H_
diff --git a/components/strike_database/strike_database_integrator_base.cc b/components/strike_database/strike_database_integrator_base.cc index 99e5f6a..36a2b85e37 100644 --- a/components/strike_database/strike_database_integrator_base.cc +++ b/components/strike_database/strike_database_integrator_base.cc
@@ -17,10 +17,10 @@ #include "base/metrics/histogram_functions.h" #include "base/strings/strcat.h" #include "base/time/time.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" -#include "components/autofill/core/common/autofill_payments_features.h" #include "components/leveldb_proto/public/proto_database_provider.h" +#include "components/strike_database/strike_data.pb.h" #include "components/strike_database/strike_database_base.h" +#include "components/strike_database/strike_database_features.h" namespace autofill { @@ -35,7 +35,8 @@ std::string_view id) const { CheckIdUniqueness(id); - if (base::FeatureList::IsEnabled(features::kDisableAutofillStrikeSystem)) { + if (base::FeatureList::IsEnabled( + strike_database::features::kDisableStrikeSystem)) { // Debug/test user has disabled the strike database. return StrikeDatabaseDecision::kDoNotBlock; }
diff --git a/components/strike_database/strike_database_integrator_test_strike_database.cc b/components/strike_database/strike_database_integrator_test_strike_database.cc index 14c40d5..498812fe 100644 --- a/components/strike_database/strike_database_integrator_test_strike_database.cc +++ b/components/strike_database/strike_database_integrator_test_strike_database.cc
@@ -4,7 +4,7 @@ #include "components/strike_database/strike_database_integrator_test_strike_database.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" +#include "components/strike_database/strike_data.pb.h" namespace autofill {
diff --git a/components/strike_database/strike_database_integrator_test_strike_database_unittest.cc b/components/strike_database/strike_database_integrator_test_strike_database_unittest.cc index 441b9af..7407cc4 100644 --- a/components/strike_database/strike_database_integrator_test_strike_database_unittest.cc +++ b/components/strike_database/strike_database_integrator_test_strike_database_unittest.cc
@@ -14,10 +14,10 @@ #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/time/time.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" -#include "components/autofill/core/common/autofill_payments_features.h" #include "components/leveldb_proto/public/proto_database.h" #include "components/leveldb_proto/public/proto_database_provider.h" +#include "components/strike_database/strike_data.pb.h" +#include "components/strike_database/strike_database_features.h" #include "components/strike_database/strike_database_integrator_base.h" #include "testing/gtest/include/gtest/gtest.h" @@ -71,7 +71,7 @@ class DisableStrikeDatabaseIntegratorTestStrikeDatabaseTest : public StrikeDatabaseIntegratorTestStrikeDatabaseTest { base::test::ScopedFeatureList feature_list_{ - features::kDisableAutofillStrikeSystem}; + strike_database::features::kDisableStrikeSystem}; }; TEST_F(DisableStrikeDatabaseIntegratorTestStrikeDatabaseTest,
diff --git a/components/strike_database/strike_database_unittest.cc b/components/strike_database/strike_database_unittest.cc index b9db335..0e4fb35 100644 --- a/components/strike_database/strike_database_unittest.cc +++ b/components/strike_database/strike_database_unittest.cc
@@ -13,9 +13,9 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/task_environment.h" #include "base/time/time.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" #include "components/leveldb_proto/public/proto_database.h" #include "components/leveldb_proto/public/proto_database_provider.h" +#include "components/strike_database/strike_data.pb.h" #include "testing/gtest/include/gtest/gtest.h" namespace autofill {
diff --git a/components/strike_database/test_inmemory_strike_database.cc b/components/strike_database/test_inmemory_strike_database.cc index 61f38f1..acbb105 100644 --- a/components/strike_database/test_inmemory_strike_database.cc +++ b/components/strike_database/test_inmemory_strike_database.cc
@@ -11,7 +11,7 @@ #include "base/metrics/histogram_functions.h" #include "base/time/time.h" -#include "components/autofill/core/browser/proto/strike_data.pb.h" +#include "components/strike_database/strike_data.pb.h" namespace autofill {
diff --git a/components/variations/seed_reader_writer.cc b/components/variations/seed_reader_writer.cc index 1742861..b327ef6 100644 --- a/components/variations/seed_reader_writer.cc +++ b/components/variations/seed_reader_writer.cc
@@ -64,9 +64,7 @@ return false; } return channel == version_info::Channel::CANARY || - channel == version_info::Channel::DEV || - channel == version_info::Channel::BETA || - channel == version_info::Channel::STABLE; + channel == version_info::Channel::DEV; } // Sets up the seed file experiment which only some clients are eligible for @@ -277,6 +275,8 @@ if (ShouldUseSeedFile()) { ReadSeedFile(); } + } else if (ShouldMigrateToLocalState(channel)) { + MigrateToLocalState(); } } @@ -706,12 +706,36 @@ } bool SeedReaderWriter::ShouldUseSeedFile() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Use the plain FieldTrialList API here because the trial is registered // client-side in VariationsSeedStore SetUpSeedFileTrial(). return seed_writer_ && base::FieldTrialList::FindFullName(kSeedFileTrial) == kSeedFilesGroup; } +bool SeedReaderWriter::ShouldMigrateToLocalState( + version_info::Channel channel) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (channel == version_info::Channel::UNKNOWN || + channel == version_info::Channel::CANARY || + channel == version_info::Channel::DEV) { + return false; + } + return seed_writer_ && base::PathExists(seed_writer_->path()); +} + +void SeedReaderWriter::MigrateToLocalState() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + std::string seed_file_data; + const bool success = + base::ReadFileToString(seed_writer_->path(), &seed_file_data); + if (success && !seed_file_data.empty()) { + std::string base64_seed_data = base::Base64Encode(seed_file_data); + local_state_->SetString(fields_prefs_->seed, base64_seed_data); + } + DeleteSeedFile(); +} + void SeedReaderWriter::ProcessStoredSeedDataAndRunCallback( ReadSeedDataCallback done_callback, StoredSeed stored_seed) {
diff --git a/components/variations/seed_reader_writer.h b/components/variations/seed_reader_writer.h index 5c8784c..f06f8ae 100644 --- a/components/variations/seed_reader_writer.h +++ b/components/variations/seed_reader_writer.h
@@ -253,6 +253,14 @@ // Returns true if a seed file should be used. bool ShouldUseSeedFile() const; + // Returns true if the client should migrate to local state from the seed + // file. + bool ShouldMigrateToLocalState(version_info::Channel channel) const; + + // Reads the seed data from the seed file and stores it in local state. Also + // removes the seed file. + void MigrateToLocalState(); + // Calls `done_callback` with the result of the load, the seed data, and // signature. The seed data and signature should only be used if the result is // `LoadSeedResult::kSuccess`.
diff --git a/components/variations/seed_reader_writer_unittest.cc b/components/variations/seed_reader_writer_unittest.cc index 549558a..6e162e28 100644 --- a/components/variations/seed_reader_writer_unittest.cc +++ b/components/variations/seed_reader_writer_unittest.cc
@@ -124,14 +124,12 @@ class ExpectedFieldTrialGroupAllChannelsTest : public ExpectedFieldTrialGroupChannelsTest {}; -class ExpectedFieldTrialGroupPreStableTest +class ExpectedFieldTrialGroupCanaryDevTest : public ExpectedFieldTrialGroupChannelsTest {}; -class ExpectedFieldTrialGroupStableTest - : public SeedReaderWriterTestBase, - public TestWithParam<SeedFieldsPrefs> {}; -class ExpectedFieldTrialGroupUnknownTest - : public SeedReaderWriterTestBase, - public TestWithParam<SeedFieldsPrefs> {}; +class ExpectedFieldTrialGroupBetaStableUnknownTest + : public ExpectedFieldTrialGroupChannelsTest {}; +class ExpectedFieldTrialGroupBetaStableTest + : public ExpectedFieldTrialGroupChannelsTest {}; INSTANTIATE_TEST_SUITE_P( All, @@ -165,16 +163,15 @@ INSTANTIATE_TEST_SUITE_P( All, - ExpectedFieldTrialGroupPreStableTest, + ExpectedFieldTrialGroupCanaryDevTest, ::testing::ConvertGenerator<ExpectedFieldTrialGroupTestParams::TupleT>( ::testing::Combine(::testing::Values(kRegularSeedFieldsPrefs, kSafeSeedFieldsPrefs), ::testing::Values(version_info::Channel::CANARY, - version_info::Channel::DEV, - version_info::Channel::BETA)))); + version_info::Channel::DEV)))); -// If channel is pre-stable, client is assigned a group. -TEST_P(ExpectedFieldTrialGroupPreStableTest, PreStable) { +// If channel is canary or dev, client is assigned a group. +TEST_P(ExpectedFieldTrialGroupCanaryDevTest, AssignedGroup) { SeedReaderWriter seed_reader_writer( &local_state_, /*seed_file_dir=*/temp_dir_.GetPath(), kSeedFilename, GetParam().seed_fields_prefs, GetParam().channel, @@ -183,32 +180,82 @@ ::testing::AnyOf(kControlGroup, kSeedFilesGroup)); } -INSTANTIATE_TEST_SUITE_P(All, - ExpectedFieldTrialGroupStableTest, - ::testing::Values(kRegularSeedFieldsPrefs, - kSafeSeedFieldsPrefs)); +INSTANTIATE_TEST_SUITE_P( + All, + ExpectedFieldTrialGroupBetaStableUnknownTest, + ::testing::ConvertGenerator<ExpectedFieldTrialGroupTestParams::TupleT>( + ::testing::Combine(::testing::Values(kRegularSeedFieldsPrefs, + kSafeSeedFieldsPrefs), + ::testing::Values(version_info::Channel::BETA, + version_info::Channel::STABLE, + version_info::Channel::UNKNOWN)))); -// If channel is stable, trial has been registered. -TEST_P(ExpectedFieldTrialGroupStableTest, Stable) { +// If channel is beta, stable, or unknown, client is not assigned a group. +TEST_P(ExpectedFieldTrialGroupBetaStableUnknownTest, NotAssignedGroup) { SeedReaderWriter seed_reader_writer( &local_state_, /*seed_file_dir=*/temp_dir_.GetPath(), kSeedFilename, - GetParam(), version_info::Channel::STABLE, entropy_providers_.get(), - file_writer_thread_.task_runner()); - EXPECT_TRUE(base::FieldTrialList::TrialExists(kSeedFileTrial)); + GetParam().seed_fields_prefs, GetParam().channel, + entropy_providers_.get(), file_writer_thread_.task_runner()); + EXPECT_THAT(base::FieldTrialList::FindFullName(kSeedFileTrial), IsEmpty()); } -INSTANTIATE_TEST_SUITE_P(All, - ExpectedFieldTrialGroupUnknownTest, - ::testing::Values(kRegularSeedFieldsPrefs, - kSafeSeedFieldsPrefs)); +INSTANTIATE_TEST_SUITE_P( + All, + ExpectedFieldTrialGroupBetaStableTest, + ::testing::ConvertGenerator<ExpectedFieldTrialGroupTestParams::TupleT>( + ::testing::Combine(::testing::Values(kRegularSeedFieldsPrefs, + kSafeSeedFieldsPrefs), + ::testing::Values(version_info::Channel::BETA, + version_info::Channel::STABLE)))); -// If channel is unknown, client is not assigned a group. -TEST_P(ExpectedFieldTrialGroupUnknownTest, Unknown) { +TEST_P(ExpectedFieldTrialGroupBetaStableTest, MigrateFromSeedFileToLocalState) { + // Assign client to SeedFiles group. + SetUpSeedFileTrial(std::string(kSeedFilesGroup)); + // Write seed to seed file. + const std::string compressed_seed = CreateCompressedVariationsSeed(); + ASSERT_TRUE(base::WriteFile(temp_seed_file_path_, compressed_seed)); + + // Initialize seed_reader_writer with test thread and timer. SeedReaderWriter seed_reader_writer( &local_state_, /*seed_file_dir=*/temp_dir_.GetPath(), kSeedFilename, - GetParam(), version_info::Channel::UNKNOWN, entropy_providers_.get(), - file_writer_thread_.task_runner()); - EXPECT_THAT(base::FieldTrialList::FindFullName(kSeedFileTrial), IsEmpty()); + GetParam().seed_fields_prefs, GetParam().channel, + entropy_providers_.get(), file_writer_thread_.task_runner()); + file_writer_thread_.FlushForTesting(); + + // Verify that the seed was written into local state. + std::string encoded_seed = base::Base64Encode(compressed_seed); + EXPECT_EQ(local_state_.GetString(GetParam().seed_fields_prefs.seed), + encoded_seed); + + // Verify that the seed file was deleted. + EXPECT_FALSE(base::PathExists(temp_seed_file_path_)); +} + +// If no seed file exists, the seed in local state should not be overwritten. +TEST_P(ExpectedFieldTrialGroupBetaStableTest, NoSeedFile) { + // Assign client to SeedFiles group. + SetUpSeedFileTrial(std::string(kSeedFilesGroup)); + // No seed file. + ASSERT_FALSE(base::PathExists(temp_seed_file_path_)); + // Seed in local state that shouldn't be overwritten. + const std::string encoded_seed = + base::Base64Encode(CreateCompressedVariationsSeed()); + local_state_.SetString(GetParam().seed_fields_prefs.seed, encoded_seed); + ASSERT_EQ(local_state_.GetString(GetParam().seed_fields_prefs.seed), + encoded_seed); + + // Initialize seed_reader_writer with test thread and timer. + SeedReaderWriter seed_reader_writer( + &local_state_, /*seed_file_dir=*/temp_dir_.GetPath(), kSeedFilename, + GetParam().seed_fields_prefs, GetParam().channel, + entropy_providers_.get(), file_writer_thread_.task_runner()); + file_writer_thread_.FlushForTesting(); + + // Verify that the seed was not overwritten. + EXPECT_EQ(local_state_.GetString(GetParam().seed_fields_prefs.seed), + encoded_seed); + // Verify that the seed file was not created. + EXPECT_FALSE(base::PathExists(temp_seed_file_path_)); } class SeedReaderWriterGroupTest @@ -708,8 +755,7 @@ kSafeSeedFieldsPrefs), ::testing::Values(kSeedFilesGroup), ::testing::Values(version_info::Channel::CANARY, - version_info::Channel::DEV, - version_info::Channel::BETA)))); + version_info::Channel::DEV)))); // Verifies clients using local state to store seeds write seeds to Local State. TEST_P(SeedReaderWriterLocalStateGroupsTest, WriteSeed) { @@ -1126,7 +1172,9 @@ ::testing::Combine(::testing::Values(kRegularSeedFieldsPrefs, kSafeSeedFieldsPrefs), ::testing::Values(kNoGroup), - ::testing::Values(version_info::Channel::UNKNOWN)))); + ::testing::Values(version_info::Channel::UNKNOWN, + version_info::Channel::STABLE, + version_info::Channel::BETA)))); INSTANTIATE_TEST_SUITE_P( ControlAndDefaultGroup,
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index c92c711..1f91db0 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -136,6 +136,7 @@ "//components/payments/content/icon", "//components/payments/mojom", "//components/performance_manager/scenario_api", + "//components/persistent_cache", "//components/power_monitor", "//components/services/filesystem:lib", "//components/services/quarantine",
diff --git a/content/browser/DEPS b/content/browser/DEPS index a598e3ef..5abe472 100644 --- a/content/browser/DEPS +++ b/content/browser/DEPS
@@ -34,6 +34,7 @@ "+components/offline_pages/core/request_header", "+components/payments/content/icon", "+components/payments/mojom", + "+components/persistent_cache", "+components/services/heap_profiling/public", "+components/services/quarantine/public/mojom/quarantine.mojom.h", "+components/system_media_controls",
diff --git a/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc b/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc index 6dfbfae..604fe84b 100644 --- a/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc +++ b/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc
@@ -102,11 +102,14 @@ } void StoragePartitionCodeCacheDataRemover::ClearJSCodeCache() { + if (generated_code_cache_context_) { + generated_code_cache_context_->ClearAndDeletePersistentCacheCollection(); + } + if (generated_code_cache_context_ && generated_code_cache_context_->generated_js_code_cache()) { generated_code_cache_context_->generated_js_code_cache() ->ClearInMemoryCache(); - net::CompletionOnceCallback callback = base::BindOnce( &StoragePartitionCodeCacheDataRemover::ClearWASMCodeCache, base::Unretained(this));
diff --git a/content/browser/code_cache/generated_code_cache.cc b/content/browser/code_cache/generated_code_cache.cc index 1673dd4..b798ae06 100644 --- a/content/browser/code_cache/generated_code_cache.cc +++ b/content/browser/code_cache/generated_code_cache.cc
@@ -41,16 +41,16 @@ constexpr char kPrefix[] = "_key"; constexpr char kSeparator[] = " \n"; -// We always expect to receive valid URLs that can be used as keys to the code -// cache. The relevant checks (for ex: resource_url is valid, origin_lock is -// not opque etc.,) must be done prior to requesting the code cache. +// In this and `CheckValidContext` it's expected to receive valid URLs that can +// be used as keys to the code cache. The relevant checks (for ex: resource_url +// is valid, origin_lock is not opaque etc.,) must be done prior to requesting +// the code cache. // -// This function doesn't enforce anything in the production code. It is here +// These functions don't enforce anything in the production code. They are here // to make the assumptions explicit and to catch any errors when DCHECKs are // enabled. -void CheckValidKeys(const GURL& resource_url, - const GURL& origin_lock, - GeneratedCodeCache::CodeCacheType cache_type) { +void CheckValidResource(const GURL& resource_url, + GeneratedCodeCache::CodeCacheType cache_type) { // If the resource url is invalid don't cache the code. DCHECK(resource_url.is_valid()); bool resource_url_is_chrome_or_chrome_untrusted = @@ -60,6 +60,14 @@ resource_url_is_chrome_or_chrome_untrusted || blink::CommonSchemeRegistry::IsExtensionScheme(resource_url.scheme())); + // The chrome and chrome-untrusted schemes are only used with the WebUI + // code cache type. + DCHECK_EQ(resource_url_is_chrome_or_chrome_untrusted, + cache_type == GeneratedCodeCache::kWebUIJavaScript); +} + +void CheckValidContext(const GURL& origin_lock, + GeneratedCodeCache::CodeCacheType cache_type) { // |origin_lock| should be either empty or should have // Http/Https/chrome/chrome-untrusted schemes and it should not be a URL with // opaque origin. Empty origin_locks are allowed when the renderer is not @@ -78,8 +86,6 @@ // code cache type. DCHECK_EQ(origin_lock_is_chrome_or_chrome_untrusted, cache_type == GeneratedCodeCache::kWebUIJavaScript); - DCHECK_EQ(resource_url_is_chrome_or_chrome_untrusted, - cache_type == GeneratedCodeCache::kWebUIJavaScript); } // Generates the cache key for the given |resource_url|, |origin_lock| and @@ -103,33 +109,16 @@ const GURL& origin_lock, const net::NetworkIsolationKey& nik, GeneratedCodeCache::CodeCacheType cache_type) { - CheckValidKeys(resource_url, origin_lock, cache_type); + return base::StrCat( + {GeneratedCodeCache::GetResourceKey(resource_url, cache_type), - // Add a prefix _ so it can't be parsed as a valid URL. - std::string key(kPrefix); - // Remove reference, username and password sections of the URL. - key.append(net::SimplifyUrlForRequest(resource_url).spec()); - // Add a separator between URL and origin to avoid any possibility of - // attacks by crafting the URL. URLs do not contain any control ASCII - // characters, and also space is encoded. So use ' \n' as a seperator. - key.append(kSeparator); + // Add a separator between URL and origin to avoid any possibility of + // attacks by crafting the URL. URLs do not contain any control ASCII + // characters, and also space is encoded. So use ' \n' as a + // separator. + kSeparator, - if (origin_lock.is_valid()) - key.append(net::SimplifyUrlForRequest(origin_lock).spec()); - - if (net::HttpCache::IsSplitCacheEnabled() && - base::FeatureList::IsEnabled( - net::features::kSplitCodeCacheByNetworkIsolationKey)) { - // TODO(crbug.com/40232395): Transient NIKs return nullopt when - // their ToCacheKeyString() method is invoked, as they generally shouldn't - // be written to disk. This code is currently reached for transient NIKs, - // which needs to be fixed. - if (!nik.IsTransient()) { - key.append(kSeparator); - key.append(*nik.ToCacheKeyString()); - } - } - return key; + GeneratedCodeCache::GetContextKey(origin_lock, nik, cache_type)}); } constexpr size_t kResponseTimeSizeInBytes = sizeof(int64_t); @@ -224,6 +213,48 @@ } // namespace +// static +std::string GeneratedCodeCache::GetResourceKey( + const GURL& resource_url, + GeneratedCodeCache::CodeCacheType cache_type) { + CheckValidResource(resource_url, cache_type); + + return base::StrCat( + {// Add a prefix _ so it can't be parsed as a valid URL. + kPrefix, + // Remove reference, username and password sections of the URL. + net::SimplifyUrlForRequest(resource_url).spec()}); +} + +// static +std::string GeneratedCodeCache::GetContextKey( + const GURL& origin_lock, + const net::NetworkIsolationKey& nik, + GeneratedCodeCache::CodeCacheType cache_type) { + CheckValidContext(origin_lock, cache_type); + + std::string key; + + if (origin_lock.is_valid()) { + key.append(net::SimplifyUrlForRequest(origin_lock).spec()); + } + + if (net::HttpCache::IsSplitCacheEnabled() && + base::FeatureList::IsEnabled( + net::features::kSplitCodeCacheByNetworkIsolationKey)) { + // TODO(crbug.com/40232395): Transient NIKs return nullopt when + // their ToCacheKeyString() method is invoked, as they generally shouldn't + // be written to disk. This code is currently reached for transient NIKs, + // which needs to be fixed. + if (!nik.IsTransient()) { + key.append(kSeparator); + key.append(*nik.ToCacheKeyString()); + } + } + + return key; +} + bool GeneratedCodeCache::IsValidHeader( scoped_refptr<net::IOBufferWithSize> small_buffer) const { size_t buffer_size = small_buffer->size();
diff --git a/content/browser/code_cache/generated_code_cache.h b/content/browser/code_cache/generated_code_cache.h index 94602e2..a01f0d9 100644 --- a/content/browser/code_cache/generated_code_cache.h +++ b/content/browser/code_cache/generated_code_cache.h
@@ -36,8 +36,8 @@ // renderer is not locked to an origin (ex:SitePerProcess is disabled) and it // is safe to use only |resource_url| as the key in such cases. // -// This uses a simple disk_cache backend. It just stores one data stream and -// stores response_time + generated code as one data blob. +// This stores response_time and generated code using either a simple disk_cache +// backend or PersistentCache depending on experiment status. // // There exists one cache per storage partition and is owned by the storage // partition. This cache is created, accessed and destroyed on the I/O @@ -97,6 +97,21 @@ ~GeneratedCodeCache(); + // Generates the cache key for the given `resource_url`. + // `resource_url` is the url corresponding to the requested resource. + static std::string GetResourceKey( + const GURL& resource_url, + GeneratedCodeCache::CodeCacheType cache_type); + + // Generates the cache key for the given `origin_lock` and `nik`. + // `origin_lock` is the origin that the renderer which requested this + // resource is locked to. `nik` is the network isolation key that consists + // of top-level-site that initiated the request. + static std::string GetContextKey( + const GURL& origin_lock, + const net::NetworkIsolationKey& nik, + GeneratedCodeCache::CodeCacheType cache_type); + // Runs the callback with a raw pointer to the backend. If we could not create // the backend then it will return a null. This runs the callback // synchronously if the backend is already open or asynchronously on the
diff --git a/content/browser/code_cache/generated_code_cache_context.cc b/content/browser/code_cache/generated_code_cache_context.cc index 6140c99..6194d40 100644 --- a/content/browser/code_cache/generated_code_cache_context.cc +++ b/content/browser/code_cache/generated_code_cache_context.cc
@@ -8,12 +8,20 @@ #include "base/files/file_path.h" #include "base/functional/bind.h" #include "base/metrics/histogram_macros.h" +#include "base/system/sys_info.h" #include "base/task/sequenced_task_runner.h" +#include "base/task/single_thread_task_runner_thread_mode.h" +#include "base/task/task_traits.h" #include "base/task/thread_pool.h" +#include "components/persistent_cache/entry.h" +#include "components/persistent_cache/persistent_cache_collection.h" #include "content/browser/code_cache/generated_code_cache.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_features.h" +#include "net/disk_cache/cache_util.h" +#include "net/http/http_cache.h" +#include "third_party/blink/public/common/features_generated.h" namespace content { @@ -42,8 +50,21 @@ GeneratedCodeCacheContext::GeneratedCodeCacheContext() { DCHECK_CURRENTLY_ON(BrowserThread::UI); DETACH_FROM_SEQUENCE(sequence_checker_); - task_runner_ = base::ThreadPool::CreateSingleThreadTaskRunner( - {base::TaskPriority::USER_BLOCKING}); + + if (base::FeatureList::IsEnabled( + blink::features::kUsePersistentCacheForCodeCache)) { + // MayBlock() because disk operations are happening on-thread under the + // experiment for now. + // Dedicated because there doesn't seem to be a reason to not be + // dedicated and it should provide some isolation which is especially + // important if there is blocking involved. + task_runner_ = base::ThreadPool::CreateSingleThreadTaskRunner( + {base::TaskPriority::USER_BLOCKING, base::MayBlock()}, + base::SingleThreadTaskRunnerThreadMode::DEDICATED); + } else { + task_runner_ = base::ThreadPool::CreateSingleThreadTaskRunner( + {base::TaskPriority::USER_BLOCKING}); + } } void GeneratedCodeCacheContext::Initialize(const base::FilePath& path, @@ -101,6 +122,23 @@ new GeneratedCodeCache(path.AppendASCII("wasm"), max_bytes, GeneratedCodeCache::CodeCacheType::kWebAssembly), base::OnTaskRunnerDeleter(task_runner_)}; + + if (base::FeatureList::IsEnabled( + blink::features::kUsePersistentCacheForCodeCache)) { + // Target the same amount of disk space used for persistent_cache as is used + // for disk_cache. + int64_t disk_cache_max_size = disk_cache::PreferredCacheSize( + base::SysInfo::AmountOfFreeDiskSpace(path), + net::GENERATED_BYTE_CODE_CACHE); + + persistent_cache_collection_ = { + new persistent_cache::PersistentCacheCollection( + std::make_unique<persistent_cache::BackendParamsManager>( + path.AppendASCII("pc")), // Name as short as possible to avoid + // maximum path problems. + disk_cache_max_size), + base::OnTaskRunnerDeleter(task_runner_)}; + } } void GeneratedCodeCacheContext::Shutdown() { @@ -110,6 +148,34 @@ base::BindOnce(&GeneratedCodeCacheContext::ShutdownOnThread, this)); } +void GeneratedCodeCacheContext::ClearAndDeletePersistentCacheCollection() { + if (persistent_cache_collection_) { + persistent_cache_collection_->DeleteAllFiles(); + } +} + +void GeneratedCodeCacheContext::InsertIntoPersistentCacheCollection( + const std::string& context_key, + std::string_view url, + base::span<const uint8_t> content, + persistent_cache::EntryMetadata metadata) { + // Since `content` is coming in through mojo it's important to make sure that + // it's copied so it cannot be modified racily. This happens implicitly + // because of the way the SQLite backend (the only backend available + // currently) of PersistentCache stores data through the BLOB type. + // + // TODO(crbug.com/377475540): Make an explicit copy here once PersistentCache + // handles taking ownership of the memory passed in. + persistent_cache_collection_->Insert(context_key, url, content, metadata); +} + +std::unique_ptr<persistent_cache::Entry> +GeneratedCodeCacheContext::FindInPersistentCacheCollection( + const std::string& context_key, + std::string_view url) { + return persistent_cache_collection_->Find(context_key, url); +} + void GeneratedCodeCacheContext::ShutdownOnThread() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); generated_js_code_cache_.reset();
diff --git a/content/browser/code_cache/generated_code_cache_context.h b/content/browser/code_cache/generated_code_cache_context.h index eb4b87e7..10c3eda 100644 --- a/content/browser/code_cache/generated_code_cache_context.h +++ b/content/browser/code_cache/generated_code_cache_context.h
@@ -9,6 +9,7 @@ #include "base/memory/ref_counted.h" #include "base/task/sequenced_task_runner.h" #include "base/thread_annotations.h" +#include "components/persistent_cache/persistent_cache_collection.h" #include "content/common/content_export.h" #include "content/public/browser/browser_thread.h" @@ -53,6 +54,25 @@ GeneratedCodeCache* generated_wasm_code_cache() const; GeneratedCodeCache* generated_webui_js_code_cache() const; + // Use to get rid of code cached in the PersistentCache collection both in + // memory and persisted. + void ClearAndDeletePersistentCacheCollection(); + + // Using a persistent cache collection with `context_key` as the cache_id + // makes sure that there are seperate files for separate process locks. This + // will eventually allow the sharing of the files with the renderers. + void InsertIntoPersistentCacheCollection( + const std::string& context_key, + std::string_view url, + base::span<const uint8_t> content, + persistent_cache::EntryMetadata metadata); + + // TODO(crbug.com/377475540): Use types that are not interchangeable for + // `context_key` and `url` so that they cannot be mixed up by mistake. + std::unique_ptr<persistent_cache::Entry> FindInPersistentCacheCollection( + const std::string& context_key, + std::string_view url); + private: friend class base::RefCountedThreadSafe<GeneratedCodeCacheContext>; ~GeneratedCodeCacheContext(); @@ -72,6 +92,16 @@ nullptr, base::OnTaskRunnerDeleter(nullptr)}; scoped_refptr<base::SequencedTaskRunner> task_runner_; + // When used instead of `generated_js_code_cache_` this stores the code + // following the same isolation principles but using two keys instead of one. + // The first key is used to get a `PersistentCache` associated with an + // isolation context from the collection. This insures that each isolation + // context uses a seperate database file. The second key is the resource + // url used on that cache. + std::unique_ptr<persistent_cache::PersistentCacheCollection, + base::OnTaskRunnerDeleter> + persistent_cache_collection_{nullptr, base::OnTaskRunnerDeleter(nullptr)}; + SEQUENCE_CHECKER(sequence_checker_); };
diff --git a/content/browser/direct_sockets/direct_sockets_service_impl.cc b/content/browser/direct_sockets/direct_sockets_service_impl.cc index 86290d6..14d0f366 100644 --- a/content/browser/direct_sockets/direct_sockets_service_impl.cc +++ b/content/browser/direct_sockets/direct_sockets_service_impl.cc
@@ -44,7 +44,6 @@ #include "services/network/public/mojom/udp_socket.mojom.h" #include "third_party/abseil-cpp/absl/functional/overload.h" #include "third_party/blink/public/common/features_generated.h" -#include "third_party/blink/public/common/runtime_feature_state/runtime_feature_state_read_context.h" #include "third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom.h" #if BUILDFLAG(IS_WIN) @@ -157,30 +156,6 @@ } #endif // BUILDFLAG(IS_CHROMEOS) -bool IsMulticastAllowed(const Context& context) { - if (!base::FeatureList::IsEnabled( - blink::features::kMulticastInDirectSockets)) { - return false; - } - - return std::visit( - absl::Overload{[&](content::RenderFrameHost* rfh) { - // TODO(crbug.com/398934282): check the necessary - // permission policy - return true; - }, - [&](base::WeakPtr<SharedWorkerHost> shared_worker) { - // TODO(crbug.com/398934282): add shared worker support. - return false; - }, - [&](base::WeakPtr<ServiceWorkerVersion> service_worker) { - // TODO(crbug.com/398934282): add dedicated worker - // support. - return false; - }}, - context); -} - bool RequiresPrivateNetworkAccess(const net::AddressList& addresses) { return std::ranges::any_of( addresses.endpoints(), [](const net::IPEndPoint& ip_endpoint) { @@ -591,18 +566,6 @@ if (options->receive_buffer_size.has_value()) { socket_options->receive_buffer_size = *options->receive_buffer_size; } - if (IsMulticastAllowed(context_)) { - if (options->multicast_allow_address_sharing.has_value()) { - socket_options->allow_address_sharing_for_multicast = - *options->multicast_allow_address_sharing; - } - if (options->multicast_time_to_live.has_value()) { - socket_options->multicast_time_to_live = *options->multicast_time_to_live; - } - if (options->multicast_loopback.has_value()) { - socket_options->multicast_loopback_mode = *options->multicast_loopback; - } - } auto params = network::mojom::RestrictedUDPSocketParams::New(); params->socket_options = std::move(socket_options); @@ -811,15 +774,6 @@ socket_options->receive_buffer_size = *options->receive_buffer_size; } - if (IsMulticastAllowed(context_)) { - if (options->multicast_time_to_live.has_value()) { - socket_options->multicast_time_to_live = *options->multicast_time_to_live; - } - if (options->multicast_loopback.has_value()) { - socket_options->multicast_loopback_mode = *options->multicast_loopback; - } - } - auto params = network::mojom::RestrictedUDPSocketParams::New(); params->socket_options = std::move(socket_options);
diff --git a/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc b/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc index ad3e878..130c773a 100644 --- a/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc +++ b/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc
@@ -125,8 +125,6 @@ std::unique_ptr<test::IsolatedWebAppContentBrowserClient> client_; std::unique_ptr<content::test::AsyncJsRunner> runner_; - base::test::ScopedFeatureList scoped_feature_list_{ - blink::features::kMulticastInDirectSockets}; }; IN_PROC_BROWSER_TEST_F(DirectSocketsUdpBrowserTest, CloseUdp) { @@ -136,31 +134,6 @@ EXPECT_EQ("closeUdp succeeded", EvalJs(shell(), script)); } -IN_PROC_BROWSER_TEST_F(DirectSocketsUdpBrowserTest, MulticastTimeToLiveParam) { - EXPECT_EQ( - "closeUdp succeeded", - EvalJs( - shell(), - "closeUdp({ localAddress: '127.0.0.1', multicastTimeToLive: 0 })")); - EXPECT_EQ( - "closeUdp succeeded", - EvalJs( - shell(), - "closeUdp({ localAddress: '127.0.0.1', multicastTimeToLive: 255 })")); - - EXPECT_THAT( - EvalJs(shell(), - "closeUdp({ localAddress: '127.0.0.1', multicastTimeToLive: -1 })") - .ExtractString(), - ::testing::StartsWith("closeUdp failed")); - EXPECT_THAT( - EvalJs( - shell(), - "closeUdp({ localAddress: '127.0.0.1', multicastTimeToLive: 256 })") - .ExtractString(), - ::testing::StartsWith("closeUdp failed")); -} - IN_PROC_BROWSER_TEST_F(DirectSocketsUdpBrowserTest, SendUdpAfterClose) { const int32_t kRequiredBytes = 1; const std::string script =
diff --git a/content/browser/indexed_db/instance/backing_store.h b/content/browser/indexed_db/instance/backing_store.h index 4f5de4f..f08c895 100644 --- a/content/browser/indexed_db/instance/backing_store.h +++ b/content/browser/indexed_db/instance/backing_store.h
@@ -97,12 +97,21 @@ public: virtual ~Transaction() = default; - // For now, refer to comments in level_db::BackingStore::Transaction for - // documentation. - virtual void Begin(std::vector<PartitionedLock> locks) = 0; + virtual Status Begin(std::vector<PartitionedLock> locks) = 0; + // CommitPhaseOne determines what blobs (if any) need to be written to disk + // and updates the primary blob journal, and kicks off the async writing + // of the blob files. In case of crash/rollback, the journal indicates what + // files should be cleaned up. + // The blob write callback will be called eventually on success or failure, + // or immediately if phase one is complete due to lack of any blobs to + // write. virtual Status CommitPhaseOne( BlobWriteCallback blob_write_callback, SerializeFsaCallback serialize_fsa_handle) = 0; + // CommitPhaseTwo is called once the blob files (if any) have been written + // to disk, and commits the actual transaction to the backing store, + // including blob journal updates, then deletes any blob files deleted + // by the transaction and not referenced by running scripts. virtual Status CommitPhaseTwo() = 0; virtual void Rollback() = 0;
diff --git a/content/browser/indexed_db/instance/fake_transaction.cc b/content/browser/indexed_db/instance/fake_transaction.cc index 92e9bdc..96afeff2 100644 --- a/content/browser/indexed_db/instance/fake_transaction.cc +++ b/content/browser/indexed_db/instance/fake_transaction.cc
@@ -38,8 +38,8 @@ void FakeTransaction::Rollback() {} -void FakeTransaction::Begin(std::vector<PartitionedLock> locks) { - wrapped_transaction_->Begin(std::move(locks)); +Status FakeTransaction::Begin(std::vector<PartitionedLock> locks) { + return wrapped_transaction_->Begin(std::move(locks)); } Status FakeTransaction::SetDatabaseVersion(int64_t version) {
diff --git a/content/browser/indexed_db/instance/fake_transaction.h b/content/browser/indexed_db/instance/fake_transaction.h index a6fa7dac..2da0228 100644 --- a/content/browser/indexed_db/instance/fake_transaction.h +++ b/content/browser/indexed_db/instance/fake_transaction.h
@@ -22,10 +22,10 @@ FakeTransaction(const FakeTransaction&) = delete; FakeTransaction& operator=(const FakeTransaction&) = delete; + Status Begin(std::vector<PartitionedLock> locks) override; Status CommitPhaseOne(BlobWriteCallback, SerializeFsaCallback) override; Status CommitPhaseTwo() override; void Rollback() override; - void Begin(std::vector<PartitionedLock> locks) override; Status SetDatabaseVersion(int64_t version) override; Status CreateObjectStore(int64_t object_store_id, const std::u16string& name,
diff --git a/content/browser/indexed_db/instance/leveldb/backing_store.cc b/content/browser/indexed_db/instance/leveldb/backing_store.cc index ccb5e9b..a545723 100644 --- a/content/browser/indexed_db/instance/leveldb/backing_store.cc +++ b/content/browser/indexed_db/instance/leveldb/backing_store.cc
@@ -4037,7 +4037,7 @@ backing_store_->OnTransactionComplete(tombstone_threshold_exceeded_); } -void BackingStore::Transaction::Begin(std::vector<PartitionedLock> locks) { +Status BackingStore::Transaction::Begin(std::vector<PartitionedLock> locks) { DCHECK(backing_store_); DCHECK(!transaction_.get()); TRACE_EVENT0("IndexedDB", "BackingStore::Transaction::Begin"); @@ -4060,6 +4060,8 @@ for (const auto& iter : backing_store_->in_memory_external_object_map_) { in_memory_external_object_map_[iter.first] = iter.second->Clone(); } + + return Status::OK(); } Status BackingStore::MigrateToV4(LevelDBWriteBatch* write_batch) {
diff --git a/content/browser/indexed_db/instance/leveldb/backing_store.h b/content/browser/indexed_db/instance/leveldb/backing_store.h index e757522..79a945d9 100644 --- a/content/browser/indexed_db/instance/leveldb/backing_store.h +++ b/content/browser/indexed_db/instance/leveldb/backing_store.h
@@ -135,21 +135,10 @@ ~Transaction() override; - // indexed_db::BackingStore::Transaction: - void Begin(std::vector<PartitionedLock> locks) override; - // CommitPhaseOne determines what blobs (if any) need to be written to disk - // and updates the primary blob journal, and kicks off the async writing - // of the blob files. In case of crash/rollback, the journal indicates what - // files should be cleaned up. - // The blob write callback will be called eventually on success or failure, - // or immediately if phase one is complete due to lack of any blobs to - // write. The `serialize_fsa_handle` callback is not used. + Status Begin(std::vector<PartitionedLock> locks) override; + // The `serialize_fsa_handle` callback is not used. Status CommitPhaseOne(BlobWriteCallback callback, SerializeFsaCallback serialize_fsa_handle) override; - // CommitPhaseTwo is called once the blob files (if any) have been written - // to disk, and commits the actual transaction to the backing store, - // including blob journal updates, then deletes any blob files deleted - // by the transaction and not referenced by running scripts. Status CommitPhaseTwo() override; void Rollback() override; Status SetDatabaseVersion(int64_t version) override;
diff --git a/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.cc b/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.cc index 6a418ffb..368f1b25 100644 --- a/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.cc +++ b/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.cc
@@ -25,9 +25,9 @@ } } -void BackingStoreTransactionImpl::Begin(std::vector<PartitionedLock> locks) { +Status BackingStoreTransactionImpl::Begin(std::vector<PartitionedLock> locks) { locks_ = std::move(locks); - db_->BeginTransaction(PassKey(), *this); + return db_->BeginTransaction(PassKey(), *this); } Status BackingStoreTransactionImpl::CommitPhaseOne(
diff --git a/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.h b/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.h index 1af2d3b..3f35675 100644 --- a/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.h +++ b/content/browser/indexed_db/instance/sqlite/backing_store_transaction_impl.h
@@ -35,7 +35,7 @@ blink::mojom::IDBTransactionMode mode() const { return mode_; } // BackingStore::Transaction: - void Begin(std::vector<PartitionedLock> locks) override; + Status Begin(std::vector<PartitionedLock> locks) override; Status CommitPhaseOne(BlobWriteCallback callback, SerializeFsaCallback serialize_fsa) override; Status CommitPhaseTwo() override;
diff --git a/content/browser/indexed_db/instance/sqlite/database_connection.cc b/content/browser/indexed_db/instance/sqlite/database_connection.cc index ef1f4c5a..d9c5131 100644 --- a/content/browser/indexed_db/instance/sqlite/database_connection.cc +++ b/content/browser/indexed_db/instance/sqlite/database_connection.cc
@@ -61,11 +61,10 @@ return base::unexpected(Status(*db_)); \ } -// Runs the statement and returns if there was an error. For use with functions -// that return Status. -#define RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement) \ - if (!statement.Run()) { \ - return Status(*db_); \ +// Returns a `Status` if the passed expression evaluates to false. +#define RETURN_STATUS_ON_ERROR(expr) \ + if (!expr) { \ + return Status(*db_); \ } // Executes the given SQL on `db` and returns a Status if there was an error. @@ -856,33 +855,25 @@ path_.empty() ? kSqlTagInMemory : kSqlTag); if (path_.empty()) { - if (!db_->OpenInMemory()) { - return Status(*db_); - } - } else if (!db_->Open(path_)) { - return Status(*db_); + RETURN_STATUS_ON_ERROR(db_->OpenInMemory()); + } else { + RETURN_STATUS_ON_ERROR(db_->Open(path_)); } // What SQLite calls "recursive" triggers are required for SQLite to execute // a DELETE ON trigger after `INSERT OR REPLACE` replaces a row. - if (!db_->Execute("PRAGMA recursive_triggers=ON")) { - return Status(*db_); - } + RETURN_STATUS_ON_ERROR(db_->Execute("PRAGMA recursive_triggers=ON")); sql::Transaction transaction(db_.get()); - if (!transaction.Begin()) { - return Status(*db_); - } + RETURN_STATUS_ON_ERROR(transaction.Begin()); if (!sql::MetaTable::DoesTableExist(db_.get())) { IDB_RETURN_IF_ERROR(CreateSchema(db_.get(), *name)); } meta_table_ = std::make_unique<sql::MetaTable>(); - if (!meta_table_->Init(db_.get(), kCurrentSchemaVersion, - kCompatibleSchemaVersion)) { - return Status(*db_); - } + RETURN_STATUS_ON_ERROR(meta_table_->Init(db_.get(), kCurrentSchemaVersion, + kCompatibleSchemaVersion)); if (meta_table_->GetCompatibleVersionNumber() > kCurrentSchemaVersion) { // TODO(crbug.com/419272070): handle this and other cases where the DB needs @@ -921,12 +912,9 @@ sql::Statement statement(db_->GetCachedStatement( SQL_FROM_HERE, "DELETE FROM blob_references WHERE record_row_id IS NULL")); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); - if (!transaction.Commit()) { - return Status(*db_); - } - + RETURN_STATUS_ON_ERROR(transaction.Commit()); inited_ = true; return Status::OK(); } @@ -974,7 +962,7 @@ mode); } -void DatabaseConnection::BeginTransaction( +Status DatabaseConnection::BeginTransaction( base::PassKey<BackingStoreTransactionImpl>, const BackingStoreTransactionImpl& transaction) { // No other transaction can begin while a version change transaction is @@ -982,23 +970,23 @@ CHECK(!HasActiveVersionChangeTransaction()); if (transaction.mode() == blink::mojom::IDBTransactionMode::ReadOnly) { // Nothing to do. - return; + return Status::OK(); } CHECK(!active_rw_transaction_); active_rw_transaction_ = std::make_unique<sql::Transaction>(db_.get()); if (transaction.durability() == blink::mojom::IDBTransactionDurability::Strict) { - TRANSIENT_CHECK(db_->Execute("PRAGMA synchronous=FULL")); + RETURN_STATUS_ON_ERROR(db_->Execute("PRAGMA synchronous=FULL")); } else { // WAL mode is guaranteed to be consistent only with synchronous=NORMAL or // higher: https://www.sqlite.org/pragma.html#pragma_synchronous. - TRANSIENT_CHECK(db_->Execute("PRAGMA synchronous=NORMAL")); + RETURN_STATUS_ON_ERROR(db_->Execute("PRAGMA synchronous=NORMAL")); } - // TODO(crbug.com/40253999): How do we surface the error if this call fails? - TRANSIENT_CHECK(active_rw_transaction_->Begin()); + RETURN_STATUS_ON_ERROR(active_rw_transaction_->Begin()); if (transaction.mode() == blink::mojom::IDBTransactionMode::VersionChange) { metadata_snapshot_.emplace(metadata_); } + return Status::OK(); } Status DatabaseConnection::CommitTransactionPhaseOne( @@ -1033,12 +1021,13 @@ std::optional<sql::StreamingBlobHandle> blob_for_writing = db_->GetStreamingBlob("blobs", "bytes", blob_row_id, /*readonly=*/false); - TRANSIENT_CHECK(blob_for_writing); - std::unique_ptr<BlobWriter> writer = BlobWriter::WriteBlobIntoDatabase( - external_object, *std::move(blob_for_writing), - base::BindOnce(&DatabaseConnection::OnBlobWriteComplete, - blob_writers_weak_factory_.GetWeakPtr(), blob_row_id)); - + std::unique_ptr<BlobWriter> writer; + if (blob_for_writing) { + writer = BlobWriter::WriteBlobIntoDatabase( + external_object, *std::move(blob_for_writing), + base::BindOnce(&DatabaseConnection::OnBlobWriteComplete, + blob_writers_weak_factory_.GetWeakPtr(), blob_row_id)); + } if (!writer) { CancelBlobWriting(); // This is currently ignored as the error is already surfaced through @@ -1104,7 +1093,7 @@ } // No need to sync active blobs when the transaction successfully commits. sync_active_blobs_after_transaction_ = false; - TRANSIENT_CHECK(active_rw_transaction_->Commit()); + RETURN_STATUS_ON_ERROR(active_rw_transaction_->Commit()); if (transaction.mode() == blink::mojom::IDBTransactionMode::VersionChange) { CHECK(metadata_snapshot_.has_value()); metadata_snapshot_.reset(); @@ -1187,7 +1176,7 @@ sql::Statement statement( db_->GetUniqueStatement("UPDATE indexed_db_metadata SET version = ?")); statement.BindInt64(0, version); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); metadata_.version = version; return Status::OK(); } @@ -1216,7 +1205,7 @@ BindKeyPath(statement, 2, metadata.key_path); statement.BindBool(3, metadata.auto_increment); statement.BindInt64(4, ObjectStoreMetaDataKey::kKeyGeneratorInitialNumber); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); metadata_.object_stores[object_store_id] = std::move(metadata); metadata_.max_object_store_id = object_store_id; @@ -1235,25 +1224,25 @@ SQL_FROM_HERE, "DELETE FROM index_references WHERE object_store_id = ?")); statement.BindInt64(0, object_store_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); } { sql::Statement statement(db_->GetCachedStatement( SQL_FROM_HERE, "DELETE FROM indexes WHERE object_store_id = ?")); statement.BindInt64(0, object_store_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); } { sql::Statement statement(db_->GetCachedStatement( SQL_FROM_HERE, "DELETE FROM records WHERE object_store_id = ?")); statement.BindInt64(0, object_store_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); } { sql::Statement statement(db_->GetCachedStatement( SQL_FROM_HERE, "DELETE FROM object_stores WHERE id = ?")); statement.BindInt64(0, object_store_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); } CHECK(metadata_.object_stores.erase(object_store_id) == 1); return Status::OK(); @@ -1271,7 +1260,7 @@ SQL_FROM_HERE, "UPDATE object_stores SET name = ? WHERE id = ?")); statement.BindBlob(0, new_name); statement.BindInt64(1, object_store_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); metadata_.object_stores.at(object_store_id).name = new_name; return Status::OK(); } @@ -1303,7 +1292,7 @@ BindKeyPath(statement, 3, index.key_path); statement.BindBool(4, index.unique); statement.BindBool(5, index.multi_entry); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); object_store.indexes[index_id] = std::move(index); object_store.max_index_id = index_id; @@ -1328,7 +1317,7 @@ "WHERE object_store_id = ? AND index_id = ?")); statement.BindInt64(0, object_store_id); statement.BindInt64(1, index_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); } { sql::Statement statement(db_->GetCachedStatement( @@ -1336,7 +1325,7 @@ "DELETE FROM indexes WHERE object_store_id = ? AND id = ?")); statement.BindInt64(0, object_store_id); statement.BindInt64(1, index_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); } CHECK(metadata_.object_stores.at(object_store_id).indexes.erase(index_id) == 1); @@ -1361,7 +1350,7 @@ statement.BindBlob(0, new_name); statement.BindInt64(1, object_store_id); statement.BindInt64(2, index_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); metadata_.object_stores.at(object_store_id).indexes.at(index_id).name = new_name; return Status::OK(); @@ -1391,7 +1380,7 @@ statement.BindInt64(0, new_number); statement.BindInt64(1, object_store_id); statement.BindInt64(2, new_number); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); return Status::OK(); } @@ -1616,7 +1605,7 @@ StartRecordRangeQuery("DELETE", key_range); sql::Statement statement(db_->GetUniqueStatement(base::StrCat(query_pieces))); BindRecordRangeQueryParams(statement, object_store_id, key_range); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); return Status::OK(); } @@ -1626,7 +1615,7 @@ sql::Statement statement(db_->GetCachedStatement( SQL_FROM_HERE, "DELETE FROM records WHERE object_store_id = ?")); statement.BindInt64(0, object_store_id); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); return Status::OK(); } @@ -1667,7 +1656,7 @@ statement.BindBlob(2, EncodeSortableIDBKey(key)); statement.BindInt64(3, object_store_id); statement.BindBlob(4, record.data); - RUN_STATEMENT_RETURN_STATUS_ON_ERROR(statement); + RETURN_STATUS_ON_ERROR(statement.Run()); return Status::OK(); }
diff --git a/content/browser/indexed_db/instance/sqlite/database_connection.h b/content/browser/indexed_db/instance/sqlite/database_connection.h index e0dcb77..7689e502 100644 --- a/content/browser/indexed_db/instance/sqlite/database_connection.h +++ b/content/browser/indexed_db/instance/sqlite/database_connection.h
@@ -93,8 +93,8 @@ blink::mojom::IDBTransactionDurability durability, blink::mojom::IDBTransactionMode mode); - void BeginTransaction(base::PassKey<BackingStoreTransactionImpl>, - const BackingStoreTransactionImpl& transaction); + Status BeginTransaction(base::PassKey<BackingStoreTransactionImpl>, + const BackingStoreTransactionImpl& transaction); // In this phase, blobs, if any, are asynchronously written. Status CommitTransactionPhaseOne( base::PassKey<BackingStoreTransactionImpl>,
diff --git a/content/browser/indexed_db/instance/transaction.cc b/content/browser/indexed_db/instance/transaction.cc index 856f019a..fe64149f 100644 --- a/content/browser/indexed_db/instance/transaction.cc +++ b/content/browser/indexed_db/instance/transaction.cc
@@ -1006,13 +1006,17 @@ return RunTasksResult::kNotFinished; } - processing_event_queue_ = true; - if (!backing_store_transaction_begun_) { - backing_store_transaction_->Begin(std::move(locks_receiver_.locks)); + Status s = + backing_store_transaction_->Begin(std::move(locks_receiver_.locks)); + if (!s.ok()) { + return base::unexpected(s); + } backing_store_transaction_begun_ = true; } + processing_event_queue_ = true; + bool run_preemptive_queue = !preemptive_task_queue_.empty() || pending_preemptive_events_ != 0; TaskQueue* task_queue =
diff --git a/content/browser/preloading/prerender/prerender_host.cc b/content/browser/preloading/prerender/prerender_host.cc index 15f2f9c..bbf85476 100644 --- a/content/browser/preloading/prerender/prerender_host.cc +++ b/content/browser/preloading/prerender/prerender_host.cc
@@ -545,7 +545,8 @@ load_url_params.referrer = attributes_.referrer; load_url_params.override_user_agent = - web_contents_->GetDelegate()->ShouldOverrideUserAgentForPrerender2(); + web_contents_->GetDelegate()->ShouldOverrideUserAgentForPrerender2( + attributes_.prerendering_url); // TODO(https://crbug.com/1406149, https://crbug.com/1378921): Set // `override_user_agent` for Android. This field is determined on the Java
diff --git a/content/browser/renderer_host/code_cache_host_impl.cc b/content/browser/renderer_host/code_cache_host_impl.cc index 404ff1e4..408337dea 100644 --- a/content/browser/renderer_host/code_cache_host_impl.cc +++ b/content/browser/renderer_host/code_cache_host_impl.cc
@@ -4,14 +4,17 @@ #include "content/browser/renderer_host/code_cache_host_impl.h" +#include <string_view> #include <utility> +#include "base/feature_list.h" #include "base/functional/bind.h" #include "base/functional/callback_helpers.h" #include "base/metrics/histogram_functions.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread.h" #include "build/build_config.h" +#include "components/persistent_cache/entry.h" #include "components/services/storage/public/cpp/buckets/bucket_locator.h" #include "components/services/storage/public/mojom/cache_storage_control.mojom.h" #include "content/browser/child_process_security_policy_impl.h" @@ -23,10 +26,14 @@ #include "content/public/browser/storage_partition.h" #include "content/public/common/content_features.h" #include "content/public/common/url_constants.h" +#include "mojo/public/cpp/base/big_buffer.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "net/base/io_buffer.h" +#include "net/http/http_cache.h" #include "third_party/blink/public/common/cache_storage/cache_storage_utils.h" +#include "third_party/blink/public/common/features_generated.h" #include "third_party/blink/public/common/scheme_registry.h" +#include "third_party/blink/public/mojom/loader/code_cache.mojom-data-view.h" #include "url/gurl.h" #include "url/origin.h" @@ -36,6 +43,18 @@ namespace { +GeneratedCodeCache::CodeCacheType MojoCacheTypeToCodeCacheType( + blink::mojom::CodeCacheType type) { + switch (type) { + case blink::mojom::CodeCacheType::kJavascript: + return GeneratedCodeCache::CodeCacheType::kJavaScript; + case blink::mojom::CodeCacheType::kWebAssembly: + return GeneratedCodeCache::CodeCacheType::kWebAssembly; + default: + NOTREACHED(); + } +} + bool CheckSecurityForAccessingCodeCacheData( const GURL& resource_url, int render_process_id, @@ -240,6 +259,25 @@ cache_storage_control_for_testing_ = cache_storage_control; } +bool CodeCacheHostImpl::IsPersistentCacheForCodeCacheEnabled() { + ProcessLock process_lock = + ChildProcessSecurityPolicyImpl::GetInstance()->GetProcessLock( + render_process_id_); + + // Serve ChromeUI from existing cache implementation. + // TODO(crbug.com/377475540): Use another PersistentCacheCollection for + // ChromeUI. + if (process_lock.MatchesScheme(content::kChromeUIScheme) || + process_lock.MatchesScheme(content::kChromeUIUntrustedScheme)) { + return false; + } + + // The feature is only compatible with split caches. + return base::FeatureList::IsEnabled( + blink::features::kUsePersistentCacheForCodeCache) && + net::HttpCache::IsSplitCacheEnabled(); +} + void CodeCacheHostImpl::DidGenerateCacheableMetadata( blink::mojom::CodeCacheType cache_type, const GURL& url, @@ -247,29 +285,44 @@ mojo_base::BigBuffer data) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - GeneratedCodeCache* code_cache = GetCodeCache(cache_type); - if (!code_cache) - return; - std::optional<GURL> secondary_key = GetSecondaryKeyForCodeCache(url, render_process_id_, Operation::kWrite); if (!secondary_key) { return; } - code_cache->WriteEntry(url, *secondary_key, network_isolation_key_, - expected_response_time, std::move(data)); + if (IsPersistentCacheForCodeCacheEnabled()) { + std::string resource_key = GeneratedCodeCache::GetResourceKey( + url, MojoCacheTypeToCodeCacheType(cache_type)); + std::string context_key = GeneratedCodeCache::GetContextKey( + secondary_key.value(), network_isolation_key_, + MojoCacheTypeToCodeCacheType(cache_type)); + + // No context key means no way to isolate per context which is not supported + // under PersistentCacheForCodeCache. + if (!context_key.empty()) { + generated_code_cache_context_->InsertIntoPersistentCacheCollection( + context_key, resource_key, std::move(data), + persistent_cache::EntryMetadata{ + .input_signature = + expected_response_time.ToDeltaSinceWindowsEpoch() + .InMicroseconds()}); + } + } else { + GeneratedCodeCache* code_cache = GetCodeCache(cache_type); + if (!code_cache) { + return; + } + + code_cache->WriteEntry(url, *secondary_key, network_isolation_key_, + expected_response_time, std::move(data)); + } } void CodeCacheHostImpl::FetchCachedCode(blink::mojom::CodeCacheType cache_type, const GURL& url, FetchCachedCodeCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - GeneratedCodeCache* code_cache = GetCodeCache(cache_type); - if (!code_cache) { - std::move(callback).Run(base::Time(), {}); - return; - } std::optional<GURL> secondary_key = GetSecondaryKeyForCodeCache(url, render_process_id_, Operation::kRead); @@ -278,11 +331,46 @@ return; } - auto read_callback = base::BindOnce( - &CodeCacheHostImpl::OnReceiveCachedCode, weak_ptr_factory_.GetWeakPtr(), - cache_type, base::TimeTicks::Now(), std::move(callback)); - code_cache->FetchEntry(url, *secondary_key, network_isolation_key_, - std::move(read_callback)); + if (IsPersistentCacheForCodeCacheEnabled()) { + std::string resource_key = GeneratedCodeCache::GetResourceKey( + url, MojoCacheTypeToCodeCacheType(cache_type)); + std::string context_key = GeneratedCodeCache::GetContextKey( + secondary_key.value(), network_isolation_key_, + MojoCacheTypeToCodeCacheType(cache_type)); + + // No context key means no way to isolate per context which is not supported + // under PersistentCacheForCodeCache. + if (context_key.empty()) { + std::move(callback).Run(base::Time(), mojo_base::BigBuffer()); + return; + } + + std::unique_ptr<persistent_cache::Entry> entry = + generated_code_cache_context_->FindInPersistentCacheCollection( + context_key, resource_key); + + if (entry && entry->GetContentSize() > 0) { + std::move(callback).Run( + base::Time::FromDeltaSinceWindowsEpoch( + base::Microseconds(entry->GetMetadata().input_signature)), + mojo_base::BigBuffer(entry->GetContentSpan())); + } else { + std::move(callback).Run(base::Time(), mojo_base::BigBuffer()); + } + + } else { + GeneratedCodeCache* code_cache = GetCodeCache(cache_type); + if (!code_cache) { + std::move(callback).Run(base::Time(), {}); + return; + } + + auto read_callback = base::BindOnce( + &CodeCacheHostImpl::OnReceiveCachedCode, weak_ptr_factory_.GetWeakPtr(), + cache_type, base::TimeTicks::Now(), std::move(callback)); + code_cache->FetchEntry(url, *secondary_key, network_isolation_key_, + std::move(read_callback)); + } } void CodeCacheHostImpl::ClearCodeCacheEntry(
diff --git a/content/browser/renderer_host/code_cache_host_impl.h b/content/browser/renderer_host/code_cache_host_impl.h index e4069b98..faa0da26 100644 --- a/content/browser/renderer_host/code_cache_host_impl.h +++ b/content/browser/renderer_host/code_cache_host_impl.h
@@ -106,6 +106,10 @@ }; private: + FRIEND_TEST_ALL_PREFIXES(CodeCacheHostImplTest, PersistentCacheWriteAndRead); + + bool IsPersistentCacheForCodeCacheEnabled(); + // blink::mojom::CodeCacheHost implementation. void DidGenerateCacheableMetadata(blink::mojom::CodeCacheType cache_type, const GURL& url,
diff --git a/content/browser/renderer_host/code_cache_host_impl_unittest.cc b/content/browser/renderer_host/code_cache_host_impl_unittest.cc new file mode 100644 index 0000000..97270c53 --- /dev/null +++ b/content/browser/renderer_host/code_cache_host_impl_unittest.cc
@@ -0,0 +1,158 @@ +// 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. + +#include "content/browser/renderer_host/code_cache_host_impl.h" + +#include "base/containers/span.h" +#include "base/files/scoped_temp_dir.h" +#include "base/functional/bind.h" +#include "base/functional/callback_forward.h" +#include "base/run_loop.h" +#include "base/task/sequenced_task_runner.h" +#include "base/test/bind.h" +#include "base/test/scoped_feature_list.h" +#include "content/browser/child_process_security_policy_impl.h" +#include "content/browser/code_cache/generated_code_cache_context.h" +#include "content/browser/process_lock.h" +#include "content/browser/site_instance_impl.h" +#include "content/public/test/browser_task_environment.h" +#include "content/public/test/test_browser_context.h" +#include "mojo/public/cpp/base/big_buffer.h" +#include "net/base/features.h" +#include "net/http/http_cache.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" + +namespace content { + +class CodeCacheHostImplTest : public testing::Test { + public: + CodeCacheHostImplTest() { + feature_list_.InitWithFeatures( + {blink::features::kUsePersistentCacheForCodeCache, + net::features::kSplitCacheByNetworkIsolationKey}, + {}); + CHECK(temp_dir_.CreateUniqueTempDir()); + generated_code_cache_context_ = + base::MakeRefCounted<GeneratedCodeCacheContext>(); + generated_code_cache_context_->Initialize(temp_dir_.GetPath(), 0); + } + + ~CodeCacheHostImplTest() override { + generated_code_cache_context_->Shutdown(); + } + + void SetupRendererWithLock(int process_id, const GURL& url) { + ChildProcessSecurityPolicyImpl* p = + ChildProcessSecurityPolicyImpl::GetInstance(); + p->AddForTesting(process_id, &browser_context_); + + scoped_refptr<SiteInstanceImpl> site_instance = + SiteInstanceImpl::CreateForTesting(&browser_context_, url); + ChildProcessSecurityPolicyImpl::GetInstance()->LockProcess( + site_instance->GetIsolationContext(), process_id, false, + ProcessLock::FromSiteInfo(site_instance->GetSiteInfo())); + } + + protected: + BrowserTaskEnvironment task_environment_; + TestBrowserContext browser_context_; + base::test::ScopedFeatureList feature_list_; + base::ScopedTempDir temp_dir_; + scoped_refptr<GeneratedCodeCacheContext> generated_code_cache_context_; +}; + +#if !BUILDFLAG(IS_FUCHSIA) +TEST_F(CodeCacheHostImplTest, PersistentCacheWriteAndRead) { +#else +// PersistentCache is not supported on Fuchsia. +TEST_F(CodeCacheHostImplTest, DISABLED_PersistentCacheWriteAndRead) { +#endif + const base::Time response_time = base::Time::Now(); + const std::string data_str = "some data"; + const mojo_base::BigBuffer data(base::as_byte_span(data_str)); + const GURL original_resource_url("http://example.com/script.js"); + + // Storing and retrieving for from the same isolation context works. + { + base::RunLoop runloop; + auto quit_closure = runloop.QuitClosure(); + + GURL url = original_resource_url; + GURL origin_lock("http://example.com"); + net::NetworkIsolationKey nik(net::SchemefulSite{url}, + net::SchemefulSite{url}); + + const int process_id = 12; + SetupRendererWithLock(process_id, url); + + GeneratedCodeCacheContext::RunOrPostTask( + generated_code_cache_context_.get(), FROM_HERE, + base::BindLambdaForTesting([&]() { + CodeCacheHostImpl host(process_id, generated_code_cache_context_, nik, + blink::StorageKey::CreateFirstParty( + url::Origin::Create(origin_lock))); + + host.DidGenerateCacheableMetadata( + blink::mojom::CodeCacheType::kJavascript, url, response_time, + data.Clone()); + + host.FetchCachedCode( + blink::mojom::CodeCacheType::kJavascript, url, + + base::BindOnce( + [&](base::Time expected_response_time, + const std::string& expected_data, + base::OnceClosure quit_closure, base::Time response_time, + mojo_base::BigBuffer data) { + EXPECT_EQ(expected_response_time, response_time); + EXPECT_EQ( + expected_data, + std::string(reinterpret_cast<const char*>(data.data()), + data.size())); + std::move(quit_closure).Run(); + }, + response_time, data_str, quit_closure)); + })); + runloop.Run(); + } + + // Attempting to retrieve code for `original_resource_url` from a different + // isolation context does not work and instead returns default values. + { + base::RunLoop runloop; + auto quit_closure = runloop.QuitClosure(); + + GURL url("http://other.com/script.js"); + GURL origin_lock("http://other.com"); + net::NetworkIsolationKey nik(net::SchemefulSite{url}, + net::SchemefulSite{url}); + + const int process_id = 24; + SetupRendererWithLock(process_id, url); + + GeneratedCodeCacheContext::RunOrPostTask( + generated_code_cache_context_.get(), FROM_HERE, + base::BindLambdaForTesting([&]() { + CodeCacheHostImpl host(process_id, generated_code_cache_context_, nik, + blink::StorageKey::CreateFirstParty( + url::Origin::Create(origin_lock))); + host.FetchCachedCode( + blink::mojom::CodeCacheType::kJavascript, original_resource_url, + + base::BindOnce( + [&](base::OnceClosure quit_closure, base::Time response_time, + mojo_base::BigBuffer data) { + EXPECT_EQ(response_time, base::Time()); + EXPECT_EQ(data.byte_span(), + mojo_base::BigBuffer().byte_span()); + std::move(quit_closure).Run(); + }, + quit_closure)); + })); + runloop.Run(); + } +} + +} // namespace content
diff --git a/content/browser/renderer_host/navigation_controller_android.cc b/content/browser/renderer_host/navigation_controller_android.cc index c47592b..ceafb11e 100644 --- a/content/browser/renderer_host/navigation_controller_android.cc +++ b/content/browser/renderer_host/navigation_controller_android.cc
@@ -261,15 +261,12 @@ // If the attribution src token exists, then an impression exists with this // navigation. - if (GetAttributionSrcTokenFromJavaAdditionalNavigationParams( - env, j_additional_navigation_params) - .has_value()) { - blink::Impression impression; - impression.attribution_src_token = - GetAttributionSrcTokenFromJavaAdditionalNavigationParams( - env, j_additional_navigation_params) - .value(); - params.impression = impression; + if (std::optional<blink::AttributionSrcToken> attribution_src_token = + GetAttributionSrcTokenFromJavaAdditionalNavigationParams( + env, j_additional_navigation_params)) { + params.impression = blink::Impression{ + .attribution_src_token = *attribution_src_token, + }; } }
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 3677a957..0dc4e01 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3015,6 +3015,10 @@ return delta <= kMaxInterval; } +base::TimeTicks WebContentsImpl::GetLastInteractionTimeTicks() { + return last_interaction_time_; +} + WebContents::ScopedIgnoreInputEvents WebContentsImpl::IgnoreInputEvents( std::optional<WebInputEventAuditCallback> audit_callback) { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::IgnoreInputEvents");
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index 8bad6ba..3850e89 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h
@@ -636,6 +636,7 @@ std::unique_ptr<SelectionPopupDelegate> delegate) override; #endif bool HasRecentInteraction() override; + base::TimeTicks GetLastInteractionTimeTicks() override; [[nodiscard]] ScopedIgnoreInputEvents IgnoreInputEvents( std::optional<WebInputEventAuditCallback> audit_callback) override; bool ShouldIgnoreInputEventsForTesting() override;
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h index 37c2351..d970f36 100644 --- a/content/public/browser/web_contents.h +++ b/content/public/browser/web_contents.h
@@ -1538,6 +1538,9 @@ // user activation work: crbug.com/848778 virtual bool HasRecentInteraction() = 0; + // Returns the time ticks of the last user interaction. + virtual base::TimeTicks GetLastInteractionTimeTicks() = 0; + // Causes the WebContents to ignore input events for at least as long as the // token exists. In the event of multiple calls, input events will be ignored // until all tokens have been destroyed.
diff --git a/content/public/browser/web_contents_delegate.cc b/content/public/browser/web_contents_delegate.cc index a8c0f1c..47ab12b 100644 --- a/content/public/browser/web_contents_delegate.cc +++ b/content/public/browser/web_contents_delegate.cc
@@ -28,6 +28,7 @@ #include "ui/base/mojom/window_show_state.mojom.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/geometry/rect.h" +#include "url/gurl.h" namespace content { @@ -412,7 +413,7 @@ } NavigationController::UserAgentOverrideOption -WebContentsDelegate::ShouldOverrideUserAgentForPrerender2() { +WebContentsDelegate::ShouldOverrideUserAgentForPrerender2(const GURL& url) { return NavigationController::UA_OVERRIDE_INHERIT; }
diff --git a/content/public/browser/web_contents_delegate.h b/content/public/browser/web_contents_delegate.h index 1af915f..2bae2901 100644 --- a/content/public/browser/web_contents_delegate.h +++ b/content/public/browser/web_contents_delegate.h
@@ -769,9 +769,11 @@ // WebContents::StartPrerendering(). virtual int AllowedPrerenderingCount(WebContents& web_contents); - // Returns whether to override user agent for prerendering navigation. + // Returns whether to override user agent for prerendering navigation. `url` + // is the target URL of the request. This function can be called repeatedly + // for each URL in the redirect chain. virtual NavigationController::UserAgentOverrideOption - ShouldOverrideUserAgentForPrerender2(); + ShouldOverrideUserAgentForPrerender2(const GURL& url); // Returns true if the embedder allows initiator and transition type mismatch // for prerender activation navigations that are embedder-initiated and have
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index f087a28..59916ef4 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -640,6 +640,10 @@ // If explicitly disabled, prefetch proxy is not used. BASE_FEATURE(PrefetchProxy, base::FEATURE_ENABLED_BY_DEFAULT); +// Killswitch for UA override issue fix (crbug.com/441612842) in preloading. +BASE_FEATURE(PreloadingRespectUserAgentOverride, + base::FEATURE_DISABLED_BY_DEFAULT); + // If enabled, the feature allows the prerender host to be reused for the // future same-site page prerender if marked as reusable. BASE_FEATURE(Prerender2ReuseHost, base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index a7fd005..f731b1a 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -195,6 +195,7 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kPeriodicBackgroundSync); CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchPrerenderIntegration); CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchProxy); +CONTENT_EXPORT BASE_DECLARE_FEATURE(kPreloadingRespectUserAgentOverride); CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrerender2ReuseHost); CONTENT_EXPORT BASE_DECLARE_FEATURE_PARAM(bool, kPrerender2ReuseSearchResultHost);
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 8e939c6..83aedf8 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -2783,6 +2783,7 @@ "../browser/renderer_host/back_forward_cache_subframe_navigation_throttle_unittest.cc", "../browser/renderer_host/browsing_context_group_swap_unittest.cc", "../browser/renderer_host/clipboard_host_impl_unittest.cc", + "../browser/renderer_host/code_cache_host_impl_unittest.cc", "../browser/renderer_host/commit_deferring_condition_runner_unittest.cc", "../browser/renderer_host/cursor_manager_unittest.cc", "../browser/renderer_host/debug_urls_unittest.cc", @@ -3072,15 +3073,10 @@ ] } - if (is_ios) { - sources += [ - "../browser/renderer_host/render_widget_host_view_ios_uiview_unittest.mm", - ] - } - if (is_ios && target_platform == "iphoneos") { sources += [ "../browser/date_time_chooser/ios/date_time_chooser_util_unittest.mm", + "../browser/renderer_host/render_widget_host_view_ios_uiview_unittest.mm", ] }
diff --git a/crypto/BUILD.gn b/crypto/BUILD.gn index 8055da2..3c1c0f7 100644 --- a/crypto/BUILD.gn +++ b/crypto/BUILD.gn
@@ -95,8 +95,6 @@ if (is_mac) { sources += [ - "apple/keychain_seckeychain.cc", - "apple/keychain_seckeychain.h", "apple/scoped_lacontext.h", "apple/scoped_lacontext.mm", "apple/security_framework_lock.cc",
diff --git a/crypto/apple/keychain.cc b/crypto/apple/keychain.cc index a4f52e7..b4c6b43 100644 --- a/crypto/apple/keychain.cc +++ b/crypto/apple/keychain.cc
@@ -11,29 +11,11 @@ #include "crypto/apple/keychain_secitem.h" #include "third_party/abseil-cpp/absl/cleanup/cleanup.h" -#if BUILDFLAG(IS_MAC) -#include "crypto/apple/keychain_seckeychain.h" -#endif - namespace crypto::apple { -#if BUILDFLAG(IS_MAC) -BASE_FEATURE(kAppleKeychainUseSecItem, - "AppleKeychainUseSecItem", - base::FEATURE_ENABLED_BY_DEFAULT); -#endif - // static std::unique_ptr<Keychain> Keychain::DefaultKeychain() { -#if BUILDFLAG(IS_MAC) - if (base::FeatureList::IsEnabled(kAppleKeychainUseSecItem)) { - return std::make_unique<KeychainSecItem>(); - } - - return std::make_unique<KeychainSecKeychain>(); -#else return std::make_unique<KeychainSecItem>(); -#endif } Keychain::Keychain() = default; @@ -43,14 +25,10 @@ // ---------- ScopedKeychainUserInteractionAllowed ---------- -// Much of the Keychain API was marked deprecated as of the macOS 13 SDK. -// Removal of its use is tracked in https://crbug.com/40233280 but deprecation -// warnings are disabled in the meanwhile. -// -// This specific usage is unfortunate. While the new SecItem keychain API has -// ways to suppress user interaction, none of those ways work when using the new -// API to access file-based keychains. This was filed as FB16959400, but until -// that is addressed, this usage of deprecated API cannot be removed. +// On the Mac, the SecItem keychain API has ways to suppress user interaction, +// but none of those ways work when using it to access file-based keychains. +// This was filed as FB16959400, but until that is addressed, this usage of +// deprecated API cannot be removed. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations"
diff --git a/crypto/apple/keychain.h b/crypto/apple/keychain.h index 2438c39..b5e604c 100644 --- a/crypto/apple/keychain.h +++ b/crypto/apple/keychain.h
@@ -18,7 +18,6 @@ namespace crypto::apple { -// DEPRECATED: use `KeychainV2` instead. // Wraps the KeychainServices API in a very thin layer, to allow it to be // mocked out for testing. @@ -26,7 +25,7 @@ // through directly to their Keychain Services equivalents (Foo -> // SecKeychainFoo). // -// New code should use KeychainV2. +// TODO(https://crbug.com/441317288): Unify with KeychainV2. class CRYPTO_EXPORT Keychain { public: // Returns an object suitable for accessing the platform's default type of
diff --git a/crypto/apple/keychain_seckeychain.cc b/crypto/apple/keychain_seckeychain.cc deleted file mode 100644 index a737276c..0000000 --- a/crypto/apple/keychain_seckeychain.cc +++ /dev/null
@@ -1,63 +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. - -#include "crypto/apple/keychain_seckeychain.h" - -#include "base/containers/span.h" -#include "base/containers/to_vector.h" -#include "base/memory/raw_ptr.h" -#include "base/synchronization/lock.h" -#include "base/types/expected.h" -#include "crypto/apple/security_framework_lock.h" - -// Much of the Keychain API was marked deprecated as of the macOS 13 SDK. -// Removal of its use is tracked in https://crbug.com/40233280 but deprecation -// warnings are disabled in the meanwhile. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -namespace crypto::apple { - -KeychainSecKeychain::KeychainSecKeychain() = default; - -KeychainSecKeychain::~KeychainSecKeychain() = default; - -base::expected<std::vector<uint8_t>, OSStatus> -KeychainSecKeychain::FindGenericPassword(std::string_view service_name, - std::string_view account_name) const { - base::AutoLock lock(GetSecurityFrameworkLock()); - uint32_t password_length = 0; - void* password_data = nullptr; - OSStatus status = SecKeychainFindGenericPassword( - nullptr, service_name.length(), service_name.data(), - account_name.length(), account_name.data(), &password_length, - &password_data, nullptr); - if (status != noErr) { - return base::unexpected(status); - } - - // SAFETY: SecKeychainFindGenericPassword returns an allocation of - // `password_length` bytes in size. - UNSAFE_BUFFERS(base::span password_span( - static_cast<const uint8_t*>(password_data), password_length)); - auto result = base::ToVector(password_span); - SecKeychainItemFreeContent(nullptr, password_data); - return result; -} - -OSStatus KeychainSecKeychain::AddGenericPassword( - std::string_view service_name, - std::string_view account_name, - base::span<const uint8_t> password) const { - base::AutoLock lock(GetSecurityFrameworkLock()); - return SecKeychainAddGenericPassword( - nullptr, base::checked_cast<uint32_t>(service_name.length()), - service_name.data(), base::checked_cast<uint32_t>(account_name.length()), - account_name.data(), base::checked_cast<uint32_t>(password.size()), - password.data(), nullptr); -} - -#pragma clang diagnostic pop - -} // namespace crypto::apple
diff --git a/crypto/apple/keychain_seckeychain.h b/crypto/apple/keychain_seckeychain.h deleted file mode 100644 index 991b2c8..0000000 --- a/crypto/apple/keychain_seckeychain.h +++ /dev/null
@@ -1,33 +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. - -#ifndef CRYPTO_APPLE_KEYCHAIN_SECKEYCHAIN_H_ -#define CRYPTO_APPLE_KEYCHAIN_SECKEYCHAIN_H_ - -#include "crypto/apple/keychain.h" - -namespace crypto::apple { - -// An implementation of Keychain on top of the deprecated SecKeychain API. -// -// The underlying API was deprecated as of the macOS 13 SDK. -// Removal of its use is tracked in https://crbug.com/1348251 -class CRYPTO_EXPORT KeychainSecKeychain : public Keychain { - public: - KeychainSecKeychain(); - ~KeychainSecKeychain() override; - - base::expected<std::vector<uint8_t>, OSStatus> FindGenericPassword( - std::string_view service_name, - std::string_view account_name) const override; - - OSStatus AddGenericPassword( - std::string_view service_name, - std::string_view account_name, - base::span<const uint8_t> password) const override; -}; - -} // namespace crypto::apple - -#endif // CRYPTO_APPLE_KEYCHAIN_SECKEYCHAIN_H_
diff --git a/crypto/apple/keychain_v2.h b/crypto/apple/keychain_v2.h index 27d701f..d158126 100644 --- a/crypto/apple/keychain_v2.h +++ b/crypto/apple/keychain_v2.h
@@ -22,6 +22,8 @@ // KeychainV2 wraps iOS-style operations from the macOS Security framework // to work with keys and keychain items. These functions are grouped here so // they can be mocked out in testing. +// +// TODO(https://crbug.com/441317288): Unify with Keychain. class CRYPTO_EXPORT KeychainV2 { public: static KeychainV2& GetInstance();
diff --git a/crypto/apple/mock_keychain.h b/crypto/apple/mock_keychain.h index 40fb4e1f..680efe03 100644 --- a/crypto/apple/mock_keychain.h +++ b/crypto/apple/mock_keychain.h
@@ -19,8 +19,7 @@ namespace crypto::apple { -// Mock Keychain wrapper for testing code that interacts with the OS X -// Keychain. +// Mock Keychain wrapper for testing code that interacts with the Keychain. // // Note that "const" is pretty much meaningless for this class; the const-ness // of Keychain doesn't apply to the actual keychain data, so all of the Mock
diff --git a/device/fido/features.cc b/device/fido/features.cc index 23cf052..9a1dd88 100644 --- a/device/fido/features.cc +++ b/device/fido/features.cc
@@ -73,12 +73,6 @@ "WebAuthenticationICloudKeychainForInactiveWithoutDrive", base::FEATURE_DISABLED_BY_DEFAULT); -// Default enabled in M135. Remove in or after M138. -COMPONENT_EXPORT(DEVICE_FIDO) -BASE_FEATURE(kWebAuthnRetryU2FErrors, - "WebAuthenticationRetryU2FErrors", - base::FEATURE_ENABLED_BY_DEFAULT); - // Development flag. Must not be enabled by default once // kWebAuthnEnclaveAuthenticator is enabled. BASE_FEATURE(kWebAuthnUseInsecureSoftwareUnexportableKeys,
diff --git a/device/fido/features.h b/device/fido/features.h index 279b19d..ef2e345 100644 --- a/device/fido/features.h +++ b/device/fido/features.h
@@ -40,10 +40,6 @@ COMPONENT_EXPORT(DEVICE_FIDO) BASE_DECLARE_FEATURE(kWebAuthnICloudKeychainForInactiveWithoutDrive); -// Retry requests to U2F keys after a delay if a low-level error happens. -COMPONENT_EXPORT(DEVICE_FIDO) -BASE_DECLARE_FEATURE(kWebAuthnRetryU2FErrors); - // Use insecure software unexportable keys to authenticate to the enclave. // For development purposes only. COMPONENT_EXPORT(DEVICE_FIDO)
diff --git a/device/fido/u2f_sign_operation.cc b/device/fido/u2f_sign_operation.cc index eacf599..9d36eda 100644 --- a/device/fido/u2f_sign_operation.cc +++ b/device/fido/u2f_sign_operation.cc
@@ -91,15 +91,13 @@ } } else { FIDO_LOG(ERROR) << "U2F device responded with empty response"; - if (base::FeatureList::IsEnabled(device::kWebAuthnRetryU2FErrors)) { - failed_and_retried_ = true; - base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&U2fSignOperation::WinkAndTrySign, - weak_factory_.GetWeakPtr()), - kU2fRetryDelay); - return; - } + failed_and_retried_ = true; + base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&U2fSignOperation::WinkAndTrySign, + weak_factory_.GetWeakPtr()), + kU2fRetryDelay); + return; } // Older U2F devices may respond with the length of the input as an error
diff --git a/gpu/command_buffer/build_cmd_buffer_lib.py b/gpu/command_buffer/build_cmd_buffer_lib.py index bf8c5d5e..493891c8 100644 --- a/gpu/command_buffer/build_cmd_buffer_lib.py +++ b/gpu/command_buffer/build_cmd_buffer_lib.py
@@ -2171,11 +2171,6 @@ %(name)sHelper(%(args)s); helper_->%(name)sImmediate(%(args)s); """ - if not not_shared: - code += """\ - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::Flush(); - """ code += """\ %(log_code)s CheckGLError();
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index 9389596..589a129 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -200,7 +200,6 @@ GLES2CmdHelper* helper, scoped_refptr<ShareGroup> share_group, TransferBufferInterface* transfer_buffer, - bool bind_generates_resource, bool lose_context_when_out_of_memory, GpuControl* gpu_control) : ImplementationBase(helper, transfer_buffer, gpu_control), @@ -251,10 +250,8 @@ share_group_ = (share_group ? std::move(share_group) - : new ShareGroup( - bind_generates_resource, + : base::MakeRefCounted<ShareGroup>( gpu_control_->GetCommandBufferID().GetUnsafeValue())); - DCHECK(share_group_->bind_generates_resource() == bind_generates_resource); } gpu::ContextResult GLES2Implementation::Initialize( @@ -298,17 +295,6 @@ vertex_array_object_manager_ = std::make_unique<VertexArrayObjectManager>( gl_capabilities_.max_vertex_attribs); - // GL_BIND_GENERATES_RESOURCE_CHROMIUM state must be the same - // on Client & Service. - if (gl_capabilities_.bind_generates_resource_chromium != - (share_group_->bind_generates_resource() ? 1 : 0)) { - SetGLError(GL_INVALID_OPERATION, "Initialize", - "Service bind_generates_resource mismatch."); - LOG(ERROR) << "ContextResult::kFatalFailure: " - << "bind_generates_resource mismatch"; - return gpu::ContextResult::kFatalFailure; - } - return gpu::ContextResult::kSuccess; } @@ -5113,8 +5099,6 @@ void GLES2Implementation::BindBufferStub(GLenum target, GLuint buffer) { helper_->BindBuffer(target, buffer); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::OrderingBarrier(); } bool GLES2Implementation::UpdateIndexedBufferState(GLenum target, @@ -5178,8 +5162,6 @@ GLuint index, GLuint buffer) { helper_->BindBufferBase(target, index, buffer); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::Flush(); } void GLES2Implementation::BindBufferRangeHelper(GLenum target, @@ -5202,8 +5184,6 @@ GLintptr offset, GLsizeiptr size) { helper_->BindBufferRange(target, index, buffer, offset, size); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::Flush(); } void GLES2Implementation::BindFramebufferHelper(GLenum target, @@ -5277,8 +5257,6 @@ void GLES2Implementation::BindRenderbufferStub(GLenum target, GLuint renderbuffer) { helper_->BindRenderbuffer(target, renderbuffer); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::OrderingBarrier(); } void GLES2Implementation::BindSamplerHelper(GLuint unit, GLuint sampler) { @@ -5328,8 +5306,6 @@ void GLES2Implementation::BindTextureStub(GLenum target, GLuint texture) { helper_->BindTexture(target, texture); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::OrderingBarrier(); } void GLES2Implementation::BindTransformFeedbackHelper( @@ -6741,8 +6717,6 @@ GetIdHandler(SharedIdNamespaces::kTextures)->MakeIds(this, 0, 1, &client_id); helper_->CreateAndTexStorage2DSharedImageINTERNALImmediate(client_id, mailbox_data); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::OrderingBarrier(); CheckGLError(); return client_id; }
diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h index a4519822..70383dc 100644 --- a/gpu/command_buffer/client/gles2_implementation.h +++ b/gpu/command_buffer/client/gles2_implementation.h
@@ -105,7 +105,6 @@ GLES2Implementation(GLES2CmdHelper* helper, scoped_refptr<ShareGroup> share_group, TransferBufferInterface* transfer_buffer, - bool bind_generates_resource, bool lose_context_when_out_of_memory, GpuControl* gpu_control);
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h index a92c062..c56d58d 100644 --- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -748,8 +748,6 @@ GetIdHandler(SharedIdNamespaces::kBuffers)->MakeIds(this, 0, n, buffers); GenBuffersHelper(n, buffers); helper_->GenBuffersImmediate(n, buffers); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::Flush(); GPU_CLIENT_LOG_CODE_BLOCK({ for (GLsizei i = 0; i < n; ++i) { GPU_CLIENT_LOG(" " << i << ": " << buffers[i]); @@ -799,8 +797,6 @@ ->MakeIds(this, 0, n, renderbuffers); GenRenderbuffersHelper(n, renderbuffers); helper_->GenRenderbuffersImmediate(n, renderbuffers); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::Flush(); GPU_CLIENT_LOG_CODE_BLOCK({ for (GLsizei i = 0; i < n; ++i) { GPU_CLIENT_LOG(" " << i << ": " << renderbuffers[i]); @@ -820,8 +816,6 @@ GetIdHandler(SharedIdNamespaces::kSamplers)->MakeIds(this, 0, n, samplers); GenSamplersHelper(n, samplers); helper_->GenSamplersImmediate(n, samplers); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::Flush(); GPU_CLIENT_LOG_CODE_BLOCK({ for (GLsizei i = 0; i < n; ++i) { GPU_CLIENT_LOG(" " << i << ": " << samplers[i]); @@ -841,8 +835,6 @@ GetIdHandler(SharedIdNamespaces::kTextures)->MakeIds(this, 0, n, textures); GenTexturesHelper(n, textures); helper_->GenTexturesImmediate(n, textures); - if (share_group_->bind_generates_resource()) - helper_->CommandBufferHelper::Flush(); GPU_CLIENT_LOG_CODE_BLOCK({ for (GLsizei i = 0; i < n; ++i) { GPU_CLIENT_LOG(" " << i << ": " << textures[i]);
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc index ff3491d..16f911d 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -190,8 +190,6 @@ TestContext() : commands_(nullptr), token_(0) {} bool Initialize(ShareGroup* share_group, - bool bind_generates_resource_client, - bool bind_generates_resource_service, bool lose_context_when_out_of_memory, bool transfer_buffer_initialize_fail, bool sync_query, @@ -242,8 +240,6 @@ gl_capabilities_.max_transform_feedback_separate_attribs = kMaxTransformFeedbackSeparateAttribs; gl_capabilities_.max_uniform_buffer_bindings = kMaxUniformBufferBindings; - gl_capabilities_.bind_generates_resource_chromium = - bind_generates_resource_service ? 1 : 0; capabilities_.sync_query = sync_query; gl_capabilities_.sync_query = sync_query; gl_capabilities_.occlusion_query_boolean = occlusion_query_boolean; @@ -258,12 +254,9 @@ { InSequence sequence; - gl_.reset(new GLES2Implementation(helper_.get(), - share_group, - transfer_buffer_.get(), - bind_generates_resource_client, - lose_context_when_out_of_memory, - gpu_control_.get())); + gl_ = std::make_unique<GLES2Implementation>( + helper_.get(), share_group, transfer_buffer_.get(), + lose_context_when_out_of_memory, gpu_control_.get()); } // The client should be set to something non-null. @@ -339,43 +332,25 @@ return gl_->query_tracker_->GetQuery(id); } - QueryTracker* GetQueryTracker() { - return gl_->query_tracker_.get(); - } + QueryTracker* GetQueryTracker() { return gl_->query_tracker_.get(); } struct ContextInitOptions { - ContextInitOptions() - : bind_generates_resource_client(true), - bind_generates_resource_service(true), - lose_context_when_out_of_memory(false), - transfer_buffer_initialize_fail(false), - sync_query(true), - occlusion_query_boolean(true), - timer_queries(true), - major_version(2), - minor_version(0) {} - - bool bind_generates_resource_client; - bool bind_generates_resource_service; - bool lose_context_when_out_of_memory; - bool transfer_buffer_initialize_fail; - bool sync_query; - bool occlusion_query_boolean; - bool timer_queries; - int major_version; - int minor_version; + bool lose_context_when_out_of_memory = false; + bool transfer_buffer_initialize_fail = false; + bool sync_query = true; + bool occlusion_query_boolean = true; + bool timer_queries = true; + int major_version = 2; + int minor_version = 0; }; bool Initialize(const ContextInitOptions& init_options) { bool success = true; - share_group_ = new ShareGroup(init_options.bind_generates_resource_client, - 0 /* tracing_id */); + share_group_ = base::MakeRefCounted<ShareGroup>(/*tracing_id=*/0); for (int i = 0; i < kNumTestContexts; i++) { if (!test_contexts_[i].Initialize( share_group_.get(), - init_options.bind_generates_resource_client, - init_options.bind_generates_resource_service, init_options.lose_context_when_out_of_memory, init_options.transfer_buffer_initialize_fail, init_options.sync_query, @@ -617,8 +592,6 @@ void GLES2ImplementationStrictSharedTest::SetUp() { ContextInitOptions init_options; - init_options.bind_generates_resource_client = false; - init_options.bind_generates_resource_service = false; ASSERT_TRUE(Initialize(init_options)); } @@ -3691,15 +3664,16 @@ .WillOnce(SetMemory(result.ptr, uint32_t(1))) .RetiresOnSaturation(); - const GLuint kBufferId = 123; - gl_->BindBuffer(GL_ARRAY_BUFFER, kBufferId); + GLuint buffer_id = 0; + gl_->GenBuffers(1, &buffer_id); + gl_->BindBuffer(GL_ARRAY_BUFFER, buffer_id); void* mem = gl_->MapBufferRange(GL_ARRAY_BUFFER, 10, 64, GL_MAP_WRITE_BIT); EXPECT_TRUE(mem != nullptr); std::vector<uint8_t> data(16); // DeleteBuffers unmaps the data store. - gl_->DeleteBuffers(1, &kBufferId); + gl_->DeleteBuffers(1, &buffer_id); EXPECT_FALSE(gl_->UnmapBuffer(GL_ARRAY_BUFFER)); EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); @@ -3833,65 +3807,12 @@ EXPECT_EQ(0, lost_count); } -TEST_F(GLES2ImplementationManualInitTest, FailInitOnBGRMismatch1) { - ContextInitOptions init_options; - init_options.bind_generates_resource_client = false; - init_options.bind_generates_resource_service = true; - EXPECT_FALSE(Initialize(init_options)); -} - -TEST_F(GLES2ImplementationManualInitTest, FailInitOnBGRMismatch2) { - ContextInitOptions init_options; - init_options.bind_generates_resource_client = true; - init_options.bind_generates_resource_service = false; - EXPECT_FALSE(Initialize(init_options)); -} - TEST_F(GLES2ImplementationManualInitTest, FailInitOnTransferBufferFail) { ContextInitOptions init_options; init_options.transfer_buffer_initialize_fail = true; EXPECT_FALSE(Initialize(init_options)); } -TEST_F(GLES2ImplementationTest, DiscardableMemoryDelete) { - const GLuint texture_id = 1; - EXPECT_FALSE( - share_group_->discardable_texture_manager()->TextureIsValid(texture_id)); - gl_->InitializeDiscardableTextureCHROMIUM(texture_id); - EXPECT_TRUE( - share_group_->discardable_texture_manager()->TextureIsValid(texture_id)); - - // Deleting a texture should clear its discardable entry. - gl_->DeleteTextures(1, &texture_id); - EXPECT_FALSE( - share_group_->discardable_texture_manager()->TextureIsValid(texture_id)); -} - -TEST_F(GLES2ImplementationTest, DiscardableTextureLockFail) { - const GLuint texture_id = 1; - gl_->InitializeDiscardableTextureCHROMIUM(texture_id); - EXPECT_TRUE( - share_group_->discardable_texture_manager()->TextureIsValid(texture_id)); - - // Unlock the handle on the client side. - gl_->UnlockDiscardableTextureCHROMIUM(texture_id); - - // Unlock and delete the handle on the service side. - ClientDiscardableHandle client_handle = - share_group_->discardable_texture_manager()->GetHandleForTesting( - texture_id); - ServiceDiscardableHandle service_handle(client_handle.BufferForTesting(), - client_handle.byte_offset(), - client_handle.shm_id()); - service_handle.Unlock(); - EXPECT_TRUE(service_handle.Delete()); - - // Trying to re-lock the texture via GL should fail and delete the entry. - EXPECT_FALSE(gl_->LockDiscardableTextureCHROMIUM(texture_id)); - EXPECT_FALSE( - share_group_->discardable_texture_manager()->TextureIsValid(texture_id)); -} - TEST_F(GLES2ImplementationTest, DiscardableTextureDoubleInitError) { const GLuint texture_id = 1; gl_->InitializeDiscardableTextureCHROMIUM(texture_id);
diff --git a/gpu/command_buffer/client/share_group.cc b/gpu/command_buffer/client/share_group.cc index 1a738029..73de754 100644 --- a/gpu/command_buffer/client/share_group.cc +++ b/gpu/command_buffer/client/share_group.cc
@@ -32,88 +32,6 @@ static_assert(gpu::kInvalidResource == 0, "GL expects kInvalidResource to be 0"); -// The standard id handler. -class IdHandler : public IdHandlerInterface { - public: - IdHandler() = default; - ~IdHandler() override = default; - - // Overridden from IdHandlerInterface. - void MakeIds(GLES2Implementation* /* gl_impl */, - GLuint id_offset, - GLsizei n, - GLuint* ids) override { - base::AutoLock auto_lock(lock_); - if (id_offset == 0) { - for (GLsizei ii = 0; ii < n; ++ii) { - ids[ii] = id_allocator_.AllocateID(); - } - } else { - for (GLsizei ii = 0; ii < n; ++ii) { - ids[ii] = id_allocator_.AllocateIDAtOrAbove(id_offset); - id_offset = ids[ii] + 1; - } - } - } - - // Overridden from IdHandlerInterface. - bool FreeIds(GLES2Implementation* gl_impl, - GLsizei n, - const GLuint* ids, - DeleteFn delete_fn) override { - base::AutoLock auto_lock(lock_); - - for (GLsizei ii = 0; ii < n; ++ii) { - id_allocator_.FreeID(ids[ii]); - } - - (gl_impl->*delete_fn)(n, ids); - // We need to ensure that the delete call is evaluated on the service side - // before any other contexts issue commands using these client ids. - gl_impl->helper()->CommandBufferHelper::OrderingBarrier(); - return true; - } - - // Overridden from IdHandlerInterface. - bool MarkAsUsedForBind(GLES2Implementation* gl_impl, - GLenum target, - GLuint id, - BindFn bind_fn) override { - base::AutoLock auto_lock(lock_); - bool result = id ? id_allocator_.MarkAsUsed(id) : true; - (gl_impl->*bind_fn)(target, id); - return result; - } - bool MarkAsUsedForBind(GLES2Implementation* gl_impl, - GLenum target, - GLuint index, - GLuint id, - BindIndexedFn bind_fn) override { - base::AutoLock auto_lock(lock_); - bool result = id ? id_allocator_.MarkAsUsed(id) : true; - (gl_impl->*bind_fn)(target, index, id); - return result; - } - bool MarkAsUsedForBind(GLES2Implementation* gl_impl, - GLenum target, - GLuint index, - GLuint id, - GLintptr offset, - GLsizeiptr size, - BindIndexedRangeFn bind_fn) override { - base::AutoLock auto_lock(lock_); - bool result = id ? id_allocator_.MarkAsUsed(id) : true; - (gl_impl->*bind_fn)(target, index, id, offset, size); - return result; - } - - void FreeContext(GLES2Implementation* gl_impl) override {} - - private: - base::Lock lock_; - IdAllocator id_allocator_ GUARDED_BY(lock_); -}; - // An id handler that requires Gen before Bind. class StrictIdHandler : public IdHandlerInterface { public: @@ -198,9 +116,6 @@ BindFn bind_fn) override { DCHECK(IdValidForBind(id)); - // StrictIdHandler is used if |bind_generates_resource| is false. In that - // case, |bind_fn| will not use Flush() after helper->Bind*(), so it is OK - // to call |bind_fn| without holding the lock. (gl_impl->*bind_fn)(target, id); return true; } @@ -211,9 +126,6 @@ BindIndexedFn bind_fn) override { DCHECK(IdValidForBind(id)); - // StrictIdHandler is used if |bind_generates_resource| is false. In that - // case, |bind_fn| will not use Flush() after helper->Bind*(), so it is OK - // to call |bind_fn| without holding the lock. (gl_impl->*bind_fn)(target, index, id); return true; } @@ -226,9 +138,6 @@ BindIndexedRangeFn bind_fn) override { DCHECK(IdValidForBind(id)); - // StrictIdHandler is used if |bind_generates_resource| is false. In that - // case, |bind_fn| will not use Flush() after helper->Bind*(), so it is OK - // to call |bind_fn| without holding the lock. (gl_impl->*bind_fn)(target, index, id, offset, size); return true; } @@ -242,7 +151,7 @@ private: enum IdState { kIdFree, kIdPendingFree, kIdInUse }; - bool IdValidForBind(GLuint id) { + bool IdValidForBind(GLuint id) LOCKS_EXCLUDED(lock_) { if (id == 0) { return true; } @@ -365,30 +274,16 @@ IdAllocator id_allocator_ GUARDED_BY(lock_); }; -ShareGroup::ShareGroup(bool bind_generates_resource, uint64_t tracing_guid) - : bind_generates_resource_(bind_generates_resource), - tracing_guid_(tracing_guid) { - if (bind_generates_resource) { - for (int i = 0; - i < static_cast<int>(SharedIdNamespaces::kNumSharedIdNamespaces); - ++i) { - if (i == static_cast<int>(SharedIdNamespaces::kProgramsAndShaders)) { - id_handlers_[i] = std::make_unique<NonReusedIdHandler>(); - } else { - id_handlers_[i] = std::make_unique<IdHandler>(); - } - } - } else { - for (int i = 0; - i < static_cast<int>(SharedIdNamespaces::kNumSharedIdNamespaces); - ++i) { - if (i == static_cast<int>(SharedIdNamespaces::kProgramsAndShaders)) { - id_handlers_[i] = std::make_unique<NonReusedIdHandler>(); - } else { - id_handlers_[i] = std::make_unique<StrictIdHandler>(i); - } +ShareGroup::ShareGroup(uint64_t tracing_guid) : tracing_guid_(tracing_guid) { + for (int i = 0; + i < static_cast<int>(SharedIdNamespaces::kNumSharedIdNamespaces); ++i) { + if (i == static_cast<int>(SharedIdNamespaces::kProgramsAndShaders)) { + id_handlers_[i] = std::make_unique<NonReusedIdHandler>(); + } else { + id_handlers_[i] = std::make_unique<StrictIdHandler>(i); } } + program_info_manager_ = std::make_unique<ProgramInfoManager>(); for (auto& range_id_handler : range_id_handlers_) { range_id_handler = std::make_unique<RangeIdHandler>();
diff --git a/gpu/command_buffer/client/share_group.h b/gpu/command_buffer/client/share_group.h index eadf5b19..31f16f3 100644 --- a/gpu/command_buffer/client/share_group.h +++ b/gpu/command_buffer/client/share_group.h
@@ -129,15 +129,11 @@ class GLES2_IMPL_EXPORT ShareGroup : public gpu::RefCountedThreadSafe<ShareGroup> { public: - ShareGroup(bool bind_generates_resource, uint64_t tracing_guid); + explicit ShareGroup(uint64_t tracing_guid); ShareGroup(const ShareGroup&) = delete; ShareGroup& operator=(const ShareGroup&) = delete; - bool bind_generates_resource() const { - return bind_generates_resource_; - } - IdHandlerInterface* GetIdHandler(SharedIdNamespaces namespace_id) const { return id_handlers_[static_cast<int>(namespace_id)].get(); } @@ -191,7 +187,6 @@ std::unique_ptr<ProgramInfoManager> program_info_manager_; ClientDiscardableTextureManager discardable_texture_manager_; - bool bind_generates_resource_; uint64_t tracing_guid_; mutable base::Lock lost_lock_;
diff --git a/gpu/command_buffer/service/drm_modifiers_filter_dawn.cc b/gpu/command_buffer/service/drm_modifiers_filter_dawn.cc index 92bd35ee..cf24824 100644 --- a/gpu/command_buffer/service/drm_modifiers_filter_dawn.cc +++ b/gpu/command_buffer/service/drm_modifiers_filter_dawn.cc
@@ -31,16 +31,16 @@ I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC, }); -base::flat_map<gfx::BufferFormat, std::vector<uint64_t>> GetDawnModifierMap( - wgpu::Adapter adapter) { - base::flat_map<gfx::BufferFormat, std::vector<uint64_t>> modifier_map; +base::flat_map<viz::SharedImageFormat, std::vector<uint64_t>> +GetDawnModifierMap(wgpu::Adapter adapter) { + base::flat_map<viz::SharedImageFormat, std::vector<uint64_t>> modifier_map; for (int i = 0; i <= static_cast<int>(gfx::BufferFormat::LAST); i++) { gfx::BufferFormat buffer_format = static_cast<gfx::BufferFormat>(i); auto si_format = viz::GetSharedImageFormat(buffer_format); auto wgpu_format = ToDawnFormat(si_format); if (wgpu_format == wgpu::TextureFormat::Undefined) { - modifier_map.emplace(buffer_format, std::vector<uint64_t>()); + modifier_map.emplace(si_format, std::vector<uint64_t>()); continue; } @@ -50,7 +50,7 @@ adapter.GetFormatCapabilities(wgpu_format, &formatCapabilities); if (!drmCapabilities.properties || !drmCapabilities.propertiesCount) { - modifier_map.emplace(buffer_format, std::vector<uint64_t>()); + modifier_map.emplace(si_format, std::vector<uint64_t>()); continue; } @@ -62,7 +62,7 @@ modifiers.push_back(drmCapabilities.properties[j].modifier); } } - modifier_map.emplace(buffer_format, std::move(modifiers)); + modifier_map.emplace(si_format, std::move(modifiers)); } return modifier_map; @@ -75,7 +75,7 @@ base::flat_map<uint32_t, std::vector<uint64_t>>& fourcc_modifier_map) { auto buffer_format_map = GetDawnModifierMap(adapter); for (auto& entry : buffer_format_map) { - int fourcc_format = ui::GetFourCCFormatFromBufferFormat(entry.first); + int fourcc_format = ui::GetFourCCFormatFromSharedImageFormat(entry.first); if (fourcc_format == DRM_FORMAT_INVALID) { continue; } @@ -90,8 +90,9 @@ DrmModifiersFilterDawn::~DrmModifiersFilterDawn() = default; std::vector<uint64_t> DrmModifiersFilterDawn::Filter( - gfx::BufferFormat format, + viz::SharedImageFormat format, const std::vector<uint64_t>& modifiers) { + CHECK(viz::HasEquivalentBufferFormat(format)); const auto& modifier_set = modifier_map_.at(format); std::vector<uint64_t> intersection;
diff --git a/gpu/command_buffer/service/drm_modifiers_filter_dawn.h b/gpu/command_buffer/service/drm_modifiers_filter_dawn.h index be8aa09..c56dc0e 100644 --- a/gpu/command_buffer/service/drm_modifiers_filter_dawn.h +++ b/gpu/command_buffer/service/drm_modifiers_filter_dawn.h
@@ -6,8 +6,8 @@ #define GPU_COMMAND_BUFFER_SERVICE_DRM_MODIFIERS_FILTER_DAWN_H_ #include "base/containers/flat_map.h" +#include "components/viz/common/resources/shared_image_format.h" #include "gpu/gpu_gles2_export.h" -#include "ui/gfx/buffer_types.h" #include "ui/ozone/public/drm_modifiers_filter.h" namespace wgpu { @@ -34,12 +34,12 @@ ~DrmModifiersFilterDawn() override; - std::vector<uint64_t> Filter(gfx::BufferFormat format, + std::vector<uint64_t> Filter(viz::SharedImageFormat format, const std::vector<uint64_t>& modifiers) override; private: // Map from all BufferFormats to a set of modifiers supported by that format. - base::flat_map<gfx::BufferFormat, std::vector<uint64_t>> modifier_map_; + base::flat_map<viz::SharedImageFormat, std::vector<uint64_t>> modifier_map_; }; } // namespace gpu
diff --git a/gpu/command_buffer/service/drm_modifiers_filter_vulkan.cc b/gpu/command_buffer/service/drm_modifiers_filter_vulkan.cc index ee6a711..ce5b351 100644 --- a/gpu/command_buffer/service/drm_modifiers_filter_vulkan.cc +++ b/gpu/command_buffer/service/drm_modifiers_filter_vulkan.cc
@@ -7,6 +7,8 @@ #include "base/check.h" #include "base/containers/contains.h" #include "base/containers/flat_set.h" +#include "components/viz/common/resources/shared_image_format_utils.h" +#include "gpu/command_buffer/service/shared_image/shared_image_format_service_utils.h" #include "gpu/vulkan/vulkan_instance.h" #include "gpu/vulkan/vulkan_util.h" #include "ui/gfx/buffer_format_util.h" @@ -20,9 +22,17 @@ DrmModifiersFilterVulkan::~DrmModifiersFilterVulkan() = default; std::vector<uint64_t> DrmModifiersFilterVulkan::Filter( - gfx::BufferFormat format, + viz::SharedImageFormat format, const std::vector<uint64_t>& modifiers) { - VkFormat vulkan_format = ToVkFormat(format); + CHECK(viz::HasEquivalentBufferFormat(format)); + VkFormat vulkan_format; + if (format.is_single_plane()) { + vulkan_format = gpu::ToVkFormatSinglePlanar(format); + } else { + // Format prefers external sampler. + format.SetPrefersExternalSampler(); + vulkan_format = gpu::ToVkFormatExternalSampler(format); + } gpu::VulkanInstance* instance = vulkan_implementation_->GetVulkanInstance(); CHECK(instance->vulkan_info().physical_devices.size() > 0); VkPhysicalDevice phys_dev =
diff --git a/gpu/command_buffer/service/drm_modifiers_filter_vulkan.h b/gpu/command_buffer/service/drm_modifiers_filter_vulkan.h index f9b67f8..ab19166 100644 --- a/gpu/command_buffer/service/drm_modifiers_filter_vulkan.h +++ b/gpu/command_buffer/service/drm_modifiers_filter_vulkan.h
@@ -8,9 +8,9 @@ #include <vector> #include "base/memory/raw_ptr.h" +#include "components/viz/common/resources/shared_image_format.h" #include "gpu/gpu_gles2_export.h" #include "gpu/vulkan/vulkan_implementation.h" -#include "ui/gfx/buffer_types.h" #include "ui/ozone/public/drm_modifiers_filter.h" namespace gpu { @@ -28,7 +28,7 @@ ~DrmModifiersFilterVulkan() override; - std::vector<uint64_t> Filter(gfx::BufferFormat format, + std::vector<uint64_t> Filter(viz::SharedImageFormat format, const std::vector<uint64_t>& modifiers) override; private:
diff --git a/gpu/command_buffer/service/drm_modifiers_filter_vulkan_unittest.cc b/gpu/command_buffer/service/drm_modifiers_filter_vulkan_unittest.cc index b1c9c3ee..46f5e711 100644 --- a/gpu/command_buffer/service/drm_modifiers_filter_vulkan_unittest.cc +++ b/gpu/command_buffer/service/drm_modifiers_filter_vulkan_unittest.cc
@@ -13,7 +13,6 @@ #include "gpu/vulkan/vulkan_function_pointers.h" #include "gpu/vulkan/vulkan_implementation.h" #include "testing/gtest/include/gtest/gtest.h" -#include "ui/gfx/buffer_types.h" namespace gpu { @@ -97,7 +96,7 @@ kUnsupportedModifier}; std::vector<uint64_t> filtered_modifiers = - filter_->Filter(gfx::BufferFormat::BGRX_8888, all_modifiers); + filter_->Filter(viz::SinglePlaneFormat::kBGRX_8888, all_modifiers); EXPECT_EQ(1u, filtered_modifiers.size()); EXPECT_EQ(kSupportedModifier1, filtered_modifiers[0]);
diff --git a/gpu/command_buffer/tests/decoder_perftest.cc b/gpu/command_buffer/tests/decoder_perftest.cc index 90347309..09fcac2d 100644 --- a/gpu/command_buffer/tests/decoder_perftest.cc +++ b/gpu/command_buffer/tests/decoder_perftest.cc
@@ -219,7 +219,7 @@ const bool lose_context_when_out_of_memory = false; gles2_implementation_ = std::make_unique<gles2::GLES2Implementation>( gles2_helper_.get(), nullptr, transfer_buffer_.get(), - bind_generates_resource, lose_context_when_out_of_memory, this); + lose_context_when_out_of_memory, this); result = gles2_implementation_->Initialize(limits); DCHECK_EQ(result, ContextResult::kSuccess);
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc index 4c299f07..65882b4 100644 --- a/gpu/command_buffer/tests/gl_manager.cc +++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -258,8 +258,7 @@ // Create the object exposing the OpenGL API. gles2_implementation_.reset(new gles2::GLES2Implementation( gles2_helper_.get(), std::move(client_share_group), - transfer_buffer_.get(), bind_generates_resource, - options.lose_context_when_out_of_memory, this)); + transfer_buffer_.get(), options.lose_context_when_out_of_memory, this)); ASSERT_EQ(gles2_implementation_->Initialize(limits), gpu::ContextResult::kSuccess)
diff --git a/gpu/ipc/gl_in_process_context.cc b/gpu/ipc/gl_in_process_context.cc index bb5b87b..a3f74672 100644 --- a/gpu/ipc/gl_in_process_context.cc +++ b/gpu/ipc/gl_in_process_context.cc
@@ -83,14 +83,11 @@ // Create a transfer buffer. transfer_buffer_ = std::make_unique<TransferBuffer>(gles2_helper_.get()); - const bool bind_generates_resource = false; - // Create the object exposing the OpenGL API. gles2_implementation_ = std::make_unique<skia_bindings::GLES2ImplementationWithGrContextSupport>( gles2_helper_.get(), /*share_group=*/nullptr, transfer_buffer_.get(), - bind_generates_resource, attribs.lose_context_when_out_of_memory, - command_buffer_.get()); + attribs.lose_context_when_out_of_memory, command_buffer_.get()); result = gles2_implementation_->Initialize(mem_limits); return result;
diff --git a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc index 086fdf65..a1ba0e67c 100644 --- a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc +++ b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc
@@ -17,13 +17,11 @@ gpu::gles2::GLES2CmdHelper* helper, scoped_refptr<gpu::gles2::ShareGroup> share_group, gpu::TransferBufferInterface* transfer_buffer, - bool bind_generates_resource, bool lose_context_when_out_of_memory, gpu::GpuControl* gpu_control) : GLES2Implementation(helper, std::move(share_group), transfer_buffer, - bind_generates_resource, lose_context_when_out_of_memory, gpu_control) {}
diff --git a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h index ac7c9295..ee1fdea3 100644 --- a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h +++ b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h
@@ -19,7 +19,6 @@ gpu::gles2::GLES2CmdHelper* helper, scoped_refptr<gpu::gles2::ShareGroup> share_group, gpu::TransferBufferInterface* transfer_buffer, - bool bind_generates_resource, bool lose_context_when_out_of_memory, gpu::GpuControl* gpu_control);
diff --git a/infra/config/generated/builder-owners/clank-engprod@google.com.txt b/infra/config/generated/builder-owners/clank-engprod@google.com.txt index 22781ac..9c422d5e 100644 --- a/infra/config/generated/builder-owners/clank-engprod@google.com.txt +++ b/infra/config/generated/builder-owners/clank-engprod@google.com.txt
@@ -36,14 +36,12 @@ ci/android-binary-size-generator ci/android-desktop-15-x64-fyi-rel ci/android-desktop-arm64-archive-rel -ci/android-desktop-arm64-binary-size-generator ci/android-desktop-arm64-compile-dbg ci/android-desktop-arm64-compile-rel ci/android-desktop-arm64-deterministic-dbg ci/android-desktop-arm64-deterministic-rel ci/android-desktop-arm64-official ci/android-desktop-x64-archive-rel -ci/android-desktop-x64-binary-size-generator ci/android-desktop-x64-compile-dbg ci/android-desktop-x64-compile-rel ci/android-desktop-x64-deterministic-dbg @@ -78,14 +76,12 @@ try/android-arm64-compile-dbg try/android-clobber-rel try/android-desktop-15-x64-fyi-rel -try/android-desktop-arm64-binary-size try/android-desktop-arm64-clobber-rel try/android-desktop-arm64-compile-dbg try/android-desktop-arm64-compile-rel try/android-desktop-arm64-deterministic-dbg try/android-desktop-arm64-deterministic-rel try/android-desktop-arm64-official -try/android-desktop-x64-binary-size try/android-desktop-x64-clobber-rel try/android-desktop-x64-compile-dbg try/android-desktop-x64-deterministic-dbg
diff --git a/infra/config/generated/builders/ci/android-desktop-arm64-binary-size-generator/gn-args.json b/infra/config/generated/builders/ci/android-desktop-arm64-binary-size-generator/gn-args.json deleted file mode 100644 index de5c8b9..0000000 --- a/infra/config/generated/builders/ci/android-desktop-arm64-binary-size-generator/gn-args.json +++ /dev/null
@@ -1,17 +0,0 @@ -{ - "gn_args": { - "android_channel": "stable", - "debuggable_apks": false, - "ffmpeg_branding": "Chrome", - "is_desktop_android": true, - "is_official_build": true, - "proprietary_codecs": true, - "symbol_level": 1, - "target_cpu": "arm64", - "target_os": "android", - "use_reclient": false, - "use_remoteexec": true, - "use_siso": true, - "v8_is_on_release_branch": true - } -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-desktop-x64-binary-size-generator/gn-args.json b/infra/config/generated/builders/ci/android-desktop-x64-binary-size-generator/gn-args.json deleted file mode 100644 index 366e138..0000000 --- a/infra/config/generated/builders/ci/android-desktop-x64-binary-size-generator/gn-args.json +++ /dev/null
@@ -1,17 +0,0 @@ -{ - "gn_args": { - "android_channel": "stable", - "debuggable_apks": false, - "ffmpeg_branding": "Chrome", - "is_desktop_android": true, - "is_official_build": true, - "proprietary_codecs": true, - "symbol_level": 1, - "target_cpu": "x64", - "target_os": "android", - "use_reclient": false, - "use_remoteexec": true, - "use_siso": true, - "v8_is_on_release_branch": true - } -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json b/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json index e0e6f758..0405da56 100644 --- a/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json +++ b/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json
@@ -70,5 +70,5 @@ }, "builder_group": "chromium.fyi", "recipe": "chromium", - "xcode_build_version": "17a5305f" + "xcode_build_version": "17a5305k" } \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json index b82995f..6bb4055 100644 --- a/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -44,7 +44,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -63,7 +63,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -94,7 +94,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -116,7 +116,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -147,7 +147,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -166,7 +166,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -197,7 +197,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -216,7 +216,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -247,7 +247,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -266,7 +266,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -297,7 +297,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -319,7 +319,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -355,7 +355,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -374,7 +374,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -405,7 +405,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -424,7 +424,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -455,7 +455,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -474,7 +474,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -505,7 +505,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -524,7 +524,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -555,7 +555,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -577,7 +577,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -608,7 +608,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -629,7 +629,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -660,7 +660,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -681,7 +681,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -712,7 +712,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -733,7 +733,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -764,7 +764,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -785,7 +785,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -816,7 +816,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -838,7 +838,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -869,7 +869,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -888,7 +888,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -919,7 +919,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -938,7 +938,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -969,7 +969,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -988,7 +988,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1019,7 +1019,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1038,7 +1038,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1069,7 +1069,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1088,7 +1088,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1119,7 +1119,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1138,7 +1138,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1169,7 +1169,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1188,7 +1188,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1219,7 +1219,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1240,7 +1240,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1271,7 +1271,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1290,7 +1290,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1321,7 +1321,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1340,7 +1340,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1371,7 +1371,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1390,7 +1390,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1421,7 +1421,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1442,7 +1442,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1473,7 +1473,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1492,7 +1492,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1523,7 +1523,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1542,7 +1542,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1573,7 +1573,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1592,7 +1592,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1623,7 +1623,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1642,7 +1642,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1673,7 +1673,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1692,7 +1692,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1723,7 +1723,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1744,7 +1744,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1775,7 +1775,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1800,7 +1800,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1831,7 +1831,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1856,7 +1856,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1887,7 +1887,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1906,7 +1906,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1937,7 +1937,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1958,7 +1958,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1989,7 +1989,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2008,7 +2008,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2039,7 +2039,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2058,7 +2058,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2089,7 +2089,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2108,7 +2108,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2139,7 +2139,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2158,7 +2158,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2189,7 +2189,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2208,7 +2208,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2239,7 +2239,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2259,7 +2259,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2290,7 +2290,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2309,7 +2309,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2340,7 +2340,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2359,7 +2359,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2390,7 +2390,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2409,7 +2409,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2440,7 +2440,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2459,7 +2459,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2490,7 +2490,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2510,7 +2510,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2541,7 +2541,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2560,7 +2560,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2591,7 +2591,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2610,7 +2610,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2641,7 +2641,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2660,7 +2660,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2691,7 +2691,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2713,7 +2713,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2744,7 +2744,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2763,7 +2763,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2794,7 +2794,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2813,7 +2813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2844,7 +2844,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/ci/ios-simulator-full-configs/targets/chromium.mac.json b/infra/config/generated/builders/ci/ios-simulator-full-configs/targets/chromium.mac.json index b95a37e..6cc55e1b 100644 --- a/infra/config/generated/builders/ci/ios-simulator-full-configs/targets/chromium.mac.json +++ b/infra/config/generated/builders/ci/ios-simulator-full-configs/targets/chromium.mac.json
@@ -1291,112 +1291,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_bookmarks_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_bookmarks_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -1440,6 +1334,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, @@ -1505,61 +1404,6 @@ "--clones", "2", "--platform", - "iPad Pro (12.9-inch) (6th generation)", - "--version", - "17.5", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPad Pro (12.9-inch) (6th generation) 17.5", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_17_5", - "path": "Runtime-ios-17.5" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 9 - }, - "test": "ios_chrome_integration_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPad Pro (12.9-inch) (6th generation) 17.5" - }, - { - "args": [ - "--clones", - "2", - "--platform", "iPad Pro 13-inch (M4)", "--version", "18.2", @@ -1603,6 +1447,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 9 }, @@ -1713,6 +1562,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 9 }, @@ -1768,6 +1622,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 9 }, @@ -1835,116 +1694,6 @@ "--clones", "2", "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 4 - }, - "test": "ios_chrome_settings_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--clones", - "2", - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 4 - }, - "test": "ios_chrome_settings_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--clones", - "2", - "--platform", "iPhone 15", "--version", "18.2", @@ -1988,6 +1737,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 4 }, @@ -2053,112 +1807,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test": "ios_chrome_signin_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test": "ios_chrome_signin_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -2202,6 +1850,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 6 }, @@ -2265,110 +1918,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ios_chrome_smoke_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ios_chrome_smoke_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -2412,6 +1961,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_chrome_smoke_eg2tests_module", @@ -2475,116 +2029,6 @@ "--clones", "2", "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 12 - }, - "test": "ios_chrome_ui_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--clones", - "2", - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 12 - }, - "test": "ios_chrome_ui_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--clones", - "2", - "--platform", "iPhone 15", "--version", "18.2", @@ -2628,6 +2072,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 12 }, @@ -2907,112 +2356,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_web_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_web_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -3056,6 +2399,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, @@ -3656,58 +3004,6 @@ { "args": [ "--platform", - "iPad Pro (12.9-inch) (6th generation)", - "--version", - "17.5", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPad Pro (12.9-inch) (6th generation) 17.5", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_17_5", - "path": "Runtime-ios-17.5" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ios_web_shell_eg2tests_module", - "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPad Pro (12.9-inch) (6th generation) 17.5" - }, - { - "args": [ - "--platform", "iPad Pro 13-inch (M4)", "--version", "18.2", @@ -3751,6 +3047,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_web_shell_eg2tests_module", @@ -3855,6 +3156,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_web_shell_eg2tests_module", @@ -3907,6 +3213,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_web_shell_eg2tests_module",
diff --git a/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json b/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json index 1906805..85482e8 100644 --- a/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json +++ b/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json
@@ -69,5 +69,5 @@ }, "builder_group": "chromium.fyi", "recipe": "chromium", - "xcode_build_version": "17a5305f" + "xcode_build_version": "17a5305k" } \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json index 8d48f7d..8217ca0 100644 --- a/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -44,7 +44,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -63,7 +63,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -94,7 +94,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -113,7 +113,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -144,7 +144,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -163,7 +163,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -194,7 +194,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -213,7 +213,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -244,7 +244,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -263,7 +263,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -294,7 +294,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -313,7 +313,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -344,7 +344,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -363,7 +363,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -394,7 +394,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -413,7 +413,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -444,7 +444,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -463,7 +463,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -494,7 +494,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -513,7 +513,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -544,7 +544,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -563,7 +563,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -594,7 +594,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -613,7 +613,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -644,7 +644,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -663,7 +663,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -694,7 +694,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -713,7 +713,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -744,7 +744,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -763,7 +763,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -794,7 +794,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -813,7 +813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -844,7 +844,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -863,7 +863,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -894,7 +894,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -913,7 +913,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -944,7 +944,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -963,7 +963,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -994,7 +994,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1013,7 +1013,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1044,7 +1044,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1066,7 +1066,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1097,7 +1097,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1120,7 +1120,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1151,7 +1151,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1176,7 +1176,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1207,7 +1207,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1232,7 +1232,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1263,7 +1263,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1286,7 +1286,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1317,7 +1317,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1340,7 +1340,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1371,7 +1371,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1394,7 +1394,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1425,7 +1425,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1447,7 +1447,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1478,7 +1478,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1497,7 +1497,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1528,7 +1528,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1547,7 +1547,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1578,7 +1578,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1597,7 +1597,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1628,7 +1628,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1650,7 +1650,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1681,7 +1681,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1704,7 +1704,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1735,7 +1735,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1755,7 +1755,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1786,7 +1786,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1805,7 +1805,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1836,7 +1836,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1856,7 +1856,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1887,7 +1887,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1907,7 +1907,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1938,7 +1938,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1957,7 +1957,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1988,7 +1988,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2008,7 +2008,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2039,7 +2039,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2059,7 +2059,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2090,7 +2090,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2109,7 +2109,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2140,7 +2140,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2160,7 +2160,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2191,7 +2191,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2211,7 +2211,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2242,7 +2242,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2261,7 +2261,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2292,7 +2292,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2311,7 +2311,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2342,7 +2342,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2361,7 +2361,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2392,7 +2392,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2411,7 +2411,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2442,7 +2442,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2461,7 +2461,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2492,7 +2492,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2511,7 +2511,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2542,7 +2542,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2561,7 +2561,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2592,7 +2592,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2611,7 +2611,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2642,7 +2642,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2661,7 +2661,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2692,7 +2692,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2711,7 +2711,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2742,7 +2742,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2761,7 +2761,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2792,7 +2792,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2811,7 +2811,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2842,7 +2842,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2861,7 +2861,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2892,7 +2892,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2911,7 +2911,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2942,7 +2942,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2961,7 +2961,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2992,7 +2992,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3011,7 +3011,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3042,7 +3042,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3061,7 +3061,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3092,7 +3092,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3111,7 +3111,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3142,7 +3142,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3161,7 +3161,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3192,7 +3192,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3211,7 +3211,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3242,7 +3242,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3261,7 +3261,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3292,7 +3292,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3311,7 +3311,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3342,7 +3342,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3361,7 +3361,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3392,7 +3392,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json index d3ea13a2..8adfdd8 100644 --- a/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -44,7 +44,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -63,7 +63,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -94,7 +94,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -113,7 +113,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -144,7 +144,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -163,7 +163,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -194,7 +194,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -213,7 +213,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -244,7 +244,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -263,7 +263,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -294,7 +294,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -313,7 +313,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -344,7 +344,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -363,7 +363,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -394,7 +394,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -413,7 +413,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -444,7 +444,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -463,7 +463,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -494,7 +494,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -513,7 +513,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -544,7 +544,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -563,7 +563,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -594,7 +594,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -613,7 +613,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -644,7 +644,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -663,7 +663,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -694,7 +694,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -713,7 +713,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -744,7 +744,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -763,7 +763,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -794,7 +794,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -813,7 +813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -844,7 +844,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -863,7 +863,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -894,7 +894,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -913,7 +913,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -944,7 +944,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -963,7 +963,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -994,7 +994,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1013,7 +1013,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1044,7 +1044,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1066,7 +1066,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1097,7 +1097,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1120,7 +1120,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1151,7 +1151,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1176,7 +1176,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1207,7 +1207,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1232,7 +1232,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1263,7 +1263,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1288,7 +1288,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1319,7 +1319,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1344,7 +1344,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1375,7 +1375,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1398,7 +1398,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1429,7 +1429,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1452,7 +1452,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1483,7 +1483,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1506,7 +1506,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1537,7 +1537,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1559,7 +1559,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1590,7 +1590,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1614,7 +1614,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1645,7 +1645,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1670,7 +1670,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1701,7 +1701,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1721,7 +1721,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1752,7 +1752,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1771,7 +1771,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1802,7 +1802,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1821,7 +1821,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1852,7 +1852,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1874,7 +1874,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1905,7 +1905,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1928,7 +1928,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1959,7 +1959,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1979,7 +1979,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2010,7 +2010,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2029,7 +2029,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2060,7 +2060,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2080,7 +2080,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2111,7 +2111,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2131,7 +2131,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2162,7 +2162,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2181,7 +2181,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2212,7 +2212,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2232,7 +2232,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2263,7 +2263,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2283,7 +2283,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2314,7 +2314,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2333,7 +2333,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2364,7 +2364,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2383,7 +2383,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2414,7 +2414,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2433,7 +2433,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2464,7 +2464,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2483,7 +2483,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2514,7 +2514,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2536,7 +2536,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2567,7 +2567,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2589,7 +2589,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2620,7 +2620,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2639,7 +2639,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2670,7 +2670,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2689,7 +2689,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2720,7 +2720,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2739,7 +2739,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2770,7 +2770,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2789,7 +2789,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2820,7 +2820,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2839,7 +2839,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2870,7 +2870,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2889,7 +2889,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2920,7 +2920,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2939,7 +2939,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2970,7 +2970,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2989,7 +2989,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3020,7 +3020,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3039,7 +3039,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3070,7 +3070,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3089,7 +3089,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3120,7 +3120,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3139,7 +3139,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3170,7 +3170,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3189,7 +3189,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3220,7 +3220,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3239,7 +3239,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3270,7 +3270,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3289,7 +3289,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3320,7 +3320,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3339,7 +3339,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3370,7 +3370,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3389,7 +3389,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3420,7 +3420,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3439,7 +3439,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3470,7 +3470,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3489,7 +3489,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3520,7 +3520,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3539,7 +3539,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3570,7 +3570,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3589,7 +3589,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3620,7 +3620,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3639,7 +3639,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3670,7 +3670,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3689,7 +3689,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3720,7 +3720,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3739,7 +3739,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3770,7 +3770,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json b/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json index 00b92a8..f410cdd 100644 --- a/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json +++ b/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json
@@ -69,5 +69,5 @@ }, "builder_group": "chromium.fyi", "recipe": "chromium", - "xcode_build_version": "17a5305f" + "xcode_build_version": "17a5305k" } \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json index 33667e9..afa1355 100644 --- a/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json
@@ -16,7 +16,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -47,7 +47,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -70,7 +70,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -101,7 +101,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -124,7 +124,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -155,7 +155,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -178,7 +178,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -209,7 +209,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -229,7 +229,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -260,7 +260,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -279,7 +279,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -310,7 +310,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -329,7 +329,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -360,7 +360,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/gn_args_locations.json b/infra/config/generated/builders/gn_args_locations.json index 36f62a1..64ffec8 100644 --- a/infra/config/generated/builders/gn_args_locations.json +++ b/infra/config/generated/builders/gn_args_locations.json
@@ -68,12 +68,10 @@ "android-x86-rel": "ci/android-x86-rel/gn-args.json" }, "chromium.android.desktop": { - "android-desktop-arm64-binary-size-generator": "ci/android-desktop-arm64-binary-size-generator/gn-args.json", "android-desktop-arm64-compile-dbg": "ci/android-desktop-arm64-compile-dbg/gn-args.json", "android-desktop-arm64-compile-rel": "ci/android-desktop-arm64-compile-rel/gn-args.json", "android-desktop-arm64-deterministic-dbg": "ci/android-desktop-arm64-deterministic-dbg/gn-args.json", "android-desktop-arm64-deterministic-rel": "ci/android-desktop-arm64-deterministic-rel/gn-args.json", - "android-desktop-x64-binary-size-generator": "ci/android-desktop-x64-binary-size-generator/gn-args.json", "android-desktop-x64-compile-dbg": "ci/android-desktop-x64-compile-dbg/gn-args.json", "android-desktop-x64-compile-rel": "ci/android-desktop-x64-compile-rel/gn-args.json", "android-desktop-x64-deterministic-dbg": "ci/android-desktop-x64-deterministic-dbg/gn-args.json", @@ -612,13 +610,11 @@ "android-cronet-x86-dbg-pie-tests": "try/android-cronet-x86-dbg-pie-tests/gn-args.json", "android-cronet-x86-rel": "try/android-cronet-x86-rel/gn-args.json", "android-desktop-15-x64-fyi-rel": "try/android-desktop-15-x64-fyi-rel/gn-args.json", - "android-desktop-arm64-binary-size": "try/android-desktop-arm64-binary-size/gn-args.json", "android-desktop-arm64-clobber-rel": "try/android-desktop-arm64-clobber-rel/gn-args.json", "android-desktop-arm64-compile-dbg": "try/android-desktop-arm64-compile-dbg/gn-args.json", "android-desktop-arm64-compile-rel": "try/android-desktop-arm64-compile-rel/gn-args.json", "android-desktop-arm64-deterministic-dbg": "try/android-desktop-arm64-deterministic-dbg/gn-args.json", "android-desktop-arm64-deterministic-rel": "try/android-desktop-arm64-deterministic-rel/gn-args.json", - "android-desktop-x64-binary-size": "try/android-desktop-x64-binary-size/gn-args.json", "android-desktop-x64-clobber-rel": "try/android-desktop-x64-clobber-rel/gn-args.json", "android-desktop-x64-compile-dbg": "try/android-desktop-x64-compile-dbg/gn-args.json", "android-desktop-x64-deterministic-dbg": "try/android-desktop-x64-deterministic-dbg/gn-args.json",
diff --git a/infra/config/generated/builders/try/android-desktop-arm64-binary-size/gn-args.json b/infra/config/generated/builders/try/android-desktop-arm64-binary-size/gn-args.json deleted file mode 100644 index de5c8b9..0000000 --- a/infra/config/generated/builders/try/android-desktop-arm64-binary-size/gn-args.json +++ /dev/null
@@ -1,17 +0,0 @@ -{ - "gn_args": { - "android_channel": "stable", - "debuggable_apks": false, - "ffmpeg_branding": "Chrome", - "is_desktop_android": true, - "is_official_build": true, - "proprietary_codecs": true, - "symbol_level": 1, - "target_cpu": "arm64", - "target_os": "android", - "use_reclient": false, - "use_remoteexec": true, - "use_siso": true, - "v8_is_on_release_branch": true - } -} \ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-desktop-x64-binary-size/gn-args.json b/infra/config/generated/builders/try/android-desktop-x64-binary-size/gn-args.json deleted file mode 100644 index 366e138..0000000 --- a/infra/config/generated/builders/try/android-desktop-x64-binary-size/gn-args.json +++ /dev/null
@@ -1,17 +0,0 @@ -{ - "gn_args": { - "android_channel": "stable", - "debuggable_apks": false, - "ffmpeg_branding": "Chrome", - "is_desktop_android": true, - "is_official_build": true, - "proprietary_codecs": true, - "symbol_level": 1, - "target_cpu": "x64", - "target_os": "android", - "use_reclient": false, - "use_remoteexec": true, - "use_siso": true, - "v8_is_on_release_branch": true - } -} \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json b/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json index 77ff6e98..aba5100 100644 --- a/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json +++ b/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json
@@ -63,5 +63,5 @@ }, "builder_group": "tryserver.chromium.mac", "recipe": "chromium_trybot", - "xcode_build_version": "17a5305f" + "xcode_build_version": "17a5305k" } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json index b82995f..6bb4055 100644 --- a/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -44,7 +44,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -63,7 +63,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -94,7 +94,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -116,7 +116,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -147,7 +147,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -166,7 +166,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -197,7 +197,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -216,7 +216,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -247,7 +247,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -266,7 +266,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -297,7 +297,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -319,7 +319,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -355,7 +355,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -374,7 +374,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -405,7 +405,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -424,7 +424,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -455,7 +455,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -474,7 +474,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -505,7 +505,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -524,7 +524,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -555,7 +555,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -577,7 +577,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -608,7 +608,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -629,7 +629,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -660,7 +660,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -681,7 +681,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -712,7 +712,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -733,7 +733,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -764,7 +764,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -785,7 +785,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -816,7 +816,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -838,7 +838,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -869,7 +869,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -888,7 +888,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -919,7 +919,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -938,7 +938,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -969,7 +969,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -988,7 +988,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1019,7 +1019,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1038,7 +1038,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1069,7 +1069,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1088,7 +1088,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1119,7 +1119,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1138,7 +1138,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1169,7 +1169,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1188,7 +1188,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1219,7 +1219,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1240,7 +1240,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1271,7 +1271,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1290,7 +1290,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1321,7 +1321,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1340,7 +1340,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1371,7 +1371,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1390,7 +1390,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1421,7 +1421,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1442,7 +1442,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1473,7 +1473,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1492,7 +1492,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1523,7 +1523,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1542,7 +1542,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1573,7 +1573,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1592,7 +1592,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1623,7 +1623,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1642,7 +1642,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1673,7 +1673,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1692,7 +1692,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1723,7 +1723,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1744,7 +1744,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1775,7 +1775,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1800,7 +1800,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1831,7 +1831,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1856,7 +1856,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1887,7 +1887,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1906,7 +1906,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1937,7 +1937,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1958,7 +1958,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1989,7 +1989,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2008,7 +2008,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2039,7 +2039,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2058,7 +2058,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2089,7 +2089,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2108,7 +2108,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2139,7 +2139,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2158,7 +2158,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2189,7 +2189,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2208,7 +2208,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2239,7 +2239,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2259,7 +2259,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2290,7 +2290,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2309,7 +2309,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2340,7 +2340,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2359,7 +2359,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2390,7 +2390,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2409,7 +2409,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2440,7 +2440,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2459,7 +2459,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2490,7 +2490,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2510,7 +2510,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2541,7 +2541,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2560,7 +2560,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2591,7 +2591,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2610,7 +2610,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2641,7 +2641,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2660,7 +2660,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2691,7 +2691,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2713,7 +2713,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2744,7 +2744,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2763,7 +2763,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2794,7 +2794,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2813,7 +2813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2844,7 +2844,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/try/ios-simulator-full-configs/targets/chromium.mac.json b/infra/config/generated/builders/try/ios-simulator-full-configs/targets/chromium.mac.json index b95a37e..6cc55e1b 100644 --- a/infra/config/generated/builders/try/ios-simulator-full-configs/targets/chromium.mac.json +++ b/infra/config/generated/builders/try/ios-simulator-full-configs/targets/chromium.mac.json
@@ -1291,112 +1291,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_bookmarks_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_bookmarks_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_bookmarks_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -1440,6 +1334,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, @@ -1505,61 +1404,6 @@ "--clones", "2", "--platform", - "iPad Pro (12.9-inch) (6th generation)", - "--version", - "17.5", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_integration_eg2tests_module iPad Pro (12.9-inch) (6th generation) 17.5", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_17_5", - "path": "Runtime-ios-17.5" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 9 - }, - "test": "ios_chrome_integration_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/", - "variant_id": "iPad Pro (12.9-inch) (6th generation) 17.5" - }, - { - "args": [ - "--clones", - "2", - "--platform", "iPad Pro 13-inch (M4)", "--version", "18.2", @@ -1603,6 +1447,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 9 }, @@ -1713,6 +1562,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 9 }, @@ -1768,6 +1622,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 9 }, @@ -1835,116 +1694,6 @@ "--clones", "2", "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 4 - }, - "test": "ios_chrome_settings_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--clones", - "2", - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_settings_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 4 - }, - "test": "ios_chrome_settings_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--clones", - "2", - "--platform", "iPhone 15", "--version", "18.2", @@ -1988,6 +1737,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 4 }, @@ -2053,112 +1807,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test": "ios_chrome_signin_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_signin_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test": "ios_chrome_signin_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -2202,6 +1850,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 6 }, @@ -2265,110 +1918,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ios_chrome_smoke_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_smoke_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ios_chrome_smoke_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -2412,6 +1961,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_chrome_smoke_eg2tests_module", @@ -2475,116 +2029,6 @@ "--clones", "2", "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 12 - }, - "test": "ios_chrome_ui_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--clones", - "2", - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_ui_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 12 - }, - "test": "ios_chrome_ui_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--clones", - "2", - "--platform", "iPhone 15", "--version", "18.2", @@ -2628,6 +2072,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 12 }, @@ -2907,112 +2356,6 @@ { "args": [ "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "18.2", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Pro 13-inch (M4) 18.2", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_18_2", - "path": "Runtime-ios-18.2" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_web_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 18.2" - }, - { - "args": [ - "--platform", - "iPad Pro 13-inch (M4)", - "--version", - "26.0", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_chrome_web_eg2tests_module iPad Pro 13-inch (M4) 26.0", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_26_0", - "path": "Runtime-ios-26.0" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "ios_chrome_web_eg2tests_module", - "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/", - "variant_id": "iPad Pro 13-inch (M4) 26.0" - }, - { - "args": [ - "--platform", "iPhone 15", "--version", "18.2", @@ -3056,6 +2399,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, @@ -3656,58 +3004,6 @@ { "args": [ "--platform", - "iPad Pro (12.9-inch) (6th generation)", - "--version", - "17.5", - "--xcodebuild-sim-runner", - "--out-dir", - "${ISOLATED_OUTDIR}", - "--xcode-build-version", - "17a5305f", - "--xctest" - ], - "isolate_profile_data": true, - "merge": { - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module/", - "module_scheme": "xctest", - "name": "ios_web_shell_eg2tests_module iPad Pro (12.9-inch) (6th generation) 17.5", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "cipd_packages": [ - { - "cipd_package": "infra/tools/mac_toolchain/${platform}", - "location": ".", - "revision": "git_revision:4c7290150d1c360cecc6a93c0214dc531585c3ab" - } - ], - "dimensions": { - "cpu": "arm64", - "os": "Mac-15" - }, - "named_caches": [ - { - "name": "runtime_ios_17_5", - "path": "Runtime-ios-17.5" - }, - { - "name": "xcode_ios_17a5305f", - "path": "Xcode.app" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ios_web_shell_eg2tests_module", - "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/", - "variant_id": "iPad Pro (12.9-inch) (6th generation) 17.5" - }, - { - "args": [ - "--platform", "iPad Pro 13-inch (M4)", "--version", "18.2", @@ -3751,6 +3047,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_web_shell_eg2tests_module", @@ -3855,6 +3156,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_web_shell_eg2tests_module", @@ -3907,6 +3213,11 @@ "path": "Xcode.app" } ], + "optional_dimensions": { + "30": { + "cpu": "Apple_(Virtual)" + } + }, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "ios_web_shell_eg2tests_module",
diff --git a/infra/config/generated/builders/try/ios-simulator/properties.json b/infra/config/generated/builders/try/ios-simulator/properties.json index 3350b72..b0c6b26 100644 --- a/infra/config/generated/builders/try/ios-simulator/properties.json +++ b/infra/config/generated/builders/try/ios-simulator/properties.json
@@ -57,10 +57,6 @@ ], "use_clang_coverage": true }, - "$build/flakiness": { - "check_for_flakiness": true, - "check_for_flakiness_with_resultdb": true - }, "$build/siso": { "configs": [ "builder" @@ -81,7 +77,6 @@ ] }, "builder_group": "tryserver.chromium.mac", - "cq": "required", "recipe": "chromium/orchestrator", "xcode_build_version": "17a5305f" } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json b/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json index 43d9af6..6d3b36f 100644 --- a/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json +++ b/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json
@@ -62,5 +62,5 @@ }, "builder_group": "tryserver.chromium.mac", "recipe": "chromium_trybot", - "xcode_build_version": "17a5305f" + "xcode_build_version": "17a5305k" } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json index 8d48f7d..8217ca0 100644 --- a/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -44,7 +44,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -63,7 +63,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -94,7 +94,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -113,7 +113,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -144,7 +144,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -163,7 +163,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -194,7 +194,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -213,7 +213,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -244,7 +244,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -263,7 +263,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -294,7 +294,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -313,7 +313,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -344,7 +344,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -363,7 +363,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -394,7 +394,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -413,7 +413,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -444,7 +444,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -463,7 +463,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -494,7 +494,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -513,7 +513,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -544,7 +544,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -563,7 +563,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -594,7 +594,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -613,7 +613,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -644,7 +644,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -663,7 +663,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -694,7 +694,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -713,7 +713,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -744,7 +744,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -763,7 +763,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -794,7 +794,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -813,7 +813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -844,7 +844,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -863,7 +863,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -894,7 +894,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -913,7 +913,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -944,7 +944,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -963,7 +963,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -994,7 +994,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1013,7 +1013,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1044,7 +1044,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1066,7 +1066,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1097,7 +1097,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1120,7 +1120,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1151,7 +1151,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1176,7 +1176,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1207,7 +1207,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1232,7 +1232,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1263,7 +1263,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1286,7 +1286,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1317,7 +1317,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1340,7 +1340,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1371,7 +1371,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1394,7 +1394,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1425,7 +1425,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1447,7 +1447,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1478,7 +1478,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1497,7 +1497,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1528,7 +1528,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1547,7 +1547,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1578,7 +1578,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1597,7 +1597,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1628,7 +1628,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1650,7 +1650,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1681,7 +1681,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1704,7 +1704,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1735,7 +1735,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1755,7 +1755,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1786,7 +1786,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1805,7 +1805,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1836,7 +1836,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1856,7 +1856,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1887,7 +1887,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1907,7 +1907,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1938,7 +1938,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1957,7 +1957,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1988,7 +1988,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2008,7 +2008,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2039,7 +2039,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2059,7 +2059,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2090,7 +2090,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2109,7 +2109,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2140,7 +2140,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2160,7 +2160,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2191,7 +2191,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2211,7 +2211,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2242,7 +2242,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2261,7 +2261,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2292,7 +2292,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2311,7 +2311,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2342,7 +2342,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2361,7 +2361,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2392,7 +2392,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2411,7 +2411,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2442,7 +2442,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2461,7 +2461,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2492,7 +2492,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2511,7 +2511,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2542,7 +2542,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2561,7 +2561,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2592,7 +2592,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2611,7 +2611,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2642,7 +2642,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2661,7 +2661,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2692,7 +2692,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2711,7 +2711,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2742,7 +2742,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2761,7 +2761,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2792,7 +2792,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2811,7 +2811,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2842,7 +2842,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2861,7 +2861,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2892,7 +2892,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2911,7 +2911,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2942,7 +2942,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2961,7 +2961,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2992,7 +2992,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3011,7 +3011,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3042,7 +3042,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3061,7 +3061,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3092,7 +3092,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3111,7 +3111,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3142,7 +3142,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3161,7 +3161,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3192,7 +3192,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3211,7 +3211,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3242,7 +3242,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3261,7 +3261,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3292,7 +3292,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3311,7 +3311,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3342,7 +3342,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3361,7 +3361,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3392,7 +3392,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json index d3ea13a2..8adfdd8 100644 --- a/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -44,7 +44,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -63,7 +63,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -94,7 +94,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -113,7 +113,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -144,7 +144,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -163,7 +163,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -194,7 +194,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -213,7 +213,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -244,7 +244,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -263,7 +263,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -294,7 +294,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -313,7 +313,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -344,7 +344,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -363,7 +363,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -394,7 +394,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -413,7 +413,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -444,7 +444,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -463,7 +463,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -494,7 +494,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -513,7 +513,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -544,7 +544,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -563,7 +563,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -594,7 +594,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -613,7 +613,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -644,7 +644,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -663,7 +663,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -694,7 +694,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -713,7 +713,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -744,7 +744,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -763,7 +763,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -794,7 +794,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -813,7 +813,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -844,7 +844,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -863,7 +863,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -894,7 +894,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -913,7 +913,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -944,7 +944,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -963,7 +963,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -994,7 +994,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1013,7 +1013,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1044,7 +1044,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1066,7 +1066,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1097,7 +1097,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1120,7 +1120,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1151,7 +1151,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1176,7 +1176,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1207,7 +1207,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1232,7 +1232,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1263,7 +1263,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1288,7 +1288,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1319,7 +1319,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1344,7 +1344,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1375,7 +1375,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1398,7 +1398,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1429,7 +1429,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1452,7 +1452,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1483,7 +1483,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1506,7 +1506,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1537,7 +1537,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1559,7 +1559,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1590,7 +1590,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1614,7 +1614,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1645,7 +1645,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1670,7 +1670,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1701,7 +1701,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1721,7 +1721,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1752,7 +1752,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1771,7 +1771,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1802,7 +1802,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1821,7 +1821,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1852,7 +1852,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1874,7 +1874,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1905,7 +1905,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1928,7 +1928,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -1959,7 +1959,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -1979,7 +1979,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2010,7 +2010,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2029,7 +2029,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2060,7 +2060,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2080,7 +2080,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2111,7 +2111,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2131,7 +2131,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2162,7 +2162,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2181,7 +2181,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2212,7 +2212,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2232,7 +2232,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2263,7 +2263,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2283,7 +2283,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2314,7 +2314,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2333,7 +2333,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2364,7 +2364,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2383,7 +2383,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2414,7 +2414,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2433,7 +2433,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2464,7 +2464,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2483,7 +2483,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2514,7 +2514,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2536,7 +2536,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2567,7 +2567,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2589,7 +2589,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2620,7 +2620,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2639,7 +2639,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2670,7 +2670,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2689,7 +2689,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2720,7 +2720,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2739,7 +2739,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2770,7 +2770,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2789,7 +2789,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2820,7 +2820,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2839,7 +2839,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2870,7 +2870,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2889,7 +2889,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2920,7 +2920,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2939,7 +2939,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -2970,7 +2970,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -2989,7 +2989,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3020,7 +3020,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3039,7 +3039,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3070,7 +3070,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3089,7 +3089,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3120,7 +3120,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3139,7 +3139,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3170,7 +3170,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3189,7 +3189,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3220,7 +3220,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3239,7 +3239,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3270,7 +3270,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3289,7 +3289,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3320,7 +3320,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3339,7 +3339,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3370,7 +3370,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3389,7 +3389,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3420,7 +3420,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3439,7 +3439,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3470,7 +3470,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3489,7 +3489,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3520,7 +3520,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3539,7 +3539,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3570,7 +3570,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3589,7 +3589,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3620,7 +3620,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3639,7 +3639,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3670,7 +3670,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3689,7 +3689,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3720,7 +3720,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -3739,7 +3739,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -3770,7 +3770,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json b/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json index e866182..1fe7852 100644 --- a/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json +++ b/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json
@@ -62,5 +62,5 @@ }, "builder_group": "tryserver.chromium.mac", "recipe": "chromium_trybot", - "xcode_build_version": "17a5305f" + "xcode_build_version": "17a5305k" } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json index 33667e9..afa1355 100644 --- a/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json +++ b/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json
@@ -16,7 +16,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -47,7 +47,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -70,7 +70,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -101,7 +101,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -124,7 +124,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -155,7 +155,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -178,7 +178,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -209,7 +209,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -229,7 +229,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -260,7 +260,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -279,7 +279,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -310,7 +310,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ], @@ -329,7 +329,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "17a5305f", + "17a5305k", "--xctest" ], "merge": { @@ -360,7 +360,7 @@ "path": "Runtime-ios-26.0" }, { - "name": "xcode_ios_17a5305f", + "name": "xcode_ios_17a5305k", "path": "Xcode.app" } ],
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index 083f0ae6..5c16382 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -45,8 +45,6 @@ * [fuchsia-x64-cast-receiver-rel](https://ci.chromium.org/p/chromium/builders/try/fuchsia-x64-cast-receiver-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""fuchsia-x64-cast-receiver-rel"")) -* [ios-simulator](https://ci.chromium.org/p/chromium/builders/try/ios-simulator) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""ios-simulator"")) - * [linux-chromeos-compile-dbg](https://ci.chromium.org/p/chromium/builders/try/linux-chromeos-compile-dbg) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""linux-chromeos-compile-dbg"")) * [linux-chromeos-rel](https://ci.chromium.org/p/chromium/builders/try/linux-chromeos-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""linux-chromeos-rel""))
diff --git a/infra/config/generated/cq-usage/default.cfg b/infra/config/generated/cq-usage/default.cfg index e6c4d6393..7c519c7 100644 --- a/infra/config/generated/cq-usage/default.cfg +++ b/infra/config/generated/cq-usage/default.cfg
@@ -62,9 +62,6 @@ name: "chromium/try/fuchsia-x64-cast-receiver-rel" } builders { - name: "chromium/try/ios-simulator" - } - builders { name: "chromium/try/linux-chromeos-compile-dbg" } builders {
diff --git a/infra/config/generated/cq-usage/full.cfg b/infra/config/generated/cq-usage/full.cfg index ec3c387..2d43bc0 100644 --- a/infra/config/generated/cq-usage/full.cfg +++ b/infra/config/generated/cq-usage/full.cfg
@@ -2572,29 +2572,6 @@ } } builders { - name: "chromium/try/ios-simulator" - location_filters { - gerrit_host_regexp: ".*" - gerrit_project_regexp: ".*" - gerrit_ref_regexp: ".*" - path_regexp: "infra/config/.+" - exclude: true - } - location_filters { - gerrit_host_regexp: ".*" - gerrit_project_regexp: ".*" - gerrit_ref_regexp: ".*" - path_regexp: "docs/.+" - exclude: true - } - location_filters { - gerrit_host_regexp: ".*" - gerrit_project_regexp: ".*" - gerrit_ref_regexp: ".*" - path_regexp: "infra/config/generated/builders/try/ios-simulator/.+" - } - } - builders { name: "chromium/try/ios-simulator-full-configs" location_filters { gerrit_host_regexp: ".*"
diff --git a/infra/config/generated/health-specs/health-specs.json b/infra/config/generated/health-specs/health-specs.json index 0ac4a6c..b2e8e12 100644 --- a/infra/config/generated/health-specs/health-specs.json +++ b/infra/config/generated/health-specs/health-specs.json
@@ -7475,27 +7475,6 @@ } ] }, - "android-desktop-arm64-binary-size-generator": { - "contact_team_email": "clank-engprod@google.com", - "problem_specs": [ - { - "name": "Unhealthy", - "period_days": 7, - "score": 5, - "thresholds": { - "_default": "_default" - } - }, - { - "name": "Low Value", - "period_days": 90, - "score": 1, - "thresholds": { - "_default": "_default" - } - } - ] - }, "android-desktop-arm64-compile-dbg": { "contact_team_email": "clank-engprod@google.com", "problem_specs": [ @@ -7622,27 +7601,6 @@ } ] }, - "android-desktop-x64-binary-size-generator": { - "contact_team_email": "clank-engprod@google.com", - "problem_specs": [ - { - "name": "Unhealthy", - "period_days": 7, - "score": 5, - "thresholds": { - "_default": "_default" - } - }, - { - "name": "Low Value", - "period_days": 90, - "score": 1, - "thresholds": { - "_default": "_default" - } - } - ] - }, "android-desktop-x64-compile-dbg": { "contact_team_email": "clank-engprod@google.com", "problem_specs": [
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg index ff3799f3..16763a8 100644 --- a/infra/config/generated/luci/commit-queue.cfg +++ b/infra/config/generated/luci/commit-queue.cfg
@@ -1871,11 +1871,6 @@ disable_reuse_footers: "Include-Ci-Only-Tests" } builders { - name: "chromium/try/android-desktop-arm64-binary-size" - includable_only: true - disable_reuse_footers: "Include-Ci-Only-Tests" - } - builders { name: "chromium/try/android-desktop-arm64-clobber-rel" includable_only: true disable_reuse_footers: "Include-Ci-Only-Tests" @@ -1906,11 +1901,6 @@ disable_reuse_footers: "Include-Ci-Only-Tests" } builders { - name: "chromium/try/android-desktop-x64-binary-size" - includable_only: true - disable_reuse_footers: "Include-Ci-Only-Tests" - } - builders { name: "chromium/try/android-desktop-x64-clobber-rel" includable_only: true disable_reuse_footers: "Include-Ci-Only-Tests" @@ -4412,29 +4402,8 @@ } builders { name: "chromium/try/ios-simulator" + includable_only: true disable_reuse_footers: "Include-Ci-Only-Tests" - location_filters { - gerrit_host_regexp: ".*" - gerrit_project_regexp: ".*" - gerrit_ref_regexp: ".*" - path_regexp: "infra/config/.+" - exclude: true - } - location_filters { - gerrit_host_regexp: ".*" - gerrit_project_regexp: ".*" - gerrit_ref_regexp: ".*" - path_regexp: "docs/.+" - exclude: true - } - location_filters { - gerrit_host_regexp: ".*" - gerrit_project_regexp: ".*" - gerrit_ref_regexp: ".*" - path_regexp: "infra/config/generated/builders/try/ios-simulator/.+" - } - mode_allowlist: "DRY_RUN" - mode_allowlist: "FULL_RUN" } builders { name: "chromium/try/ios-simulator-code-coverage" @@ -8082,6 +8051,7 @@ ref_regexp_exclude: "refs/branch-heads/7204" ref_regexp_exclude: "refs/branch-heads/7258" ref_regexp_exclude: "refs/branch-heads/7339" + ref_regexp_exclude: "refs/branch-heads/7390" } } verifiers {
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index e40caac..22be070 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -40985,126 +40985,6 @@ } } builders { - name: "android-desktop-arm64-binary-size-generator" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builder:android-desktop-arm64-binary-size-generator" - dimensions: "cores:32" - dimensions: "cpu:x86-64" - dimensions: "os:Ubuntu-22.04" - dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:1" - exe { - cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" - cipd_version: "refs/heads/main" - cmd: "luciexe" - } - properties: - '{' - ' "$build/siso": {' - ' "configs": [' - ' "builder"' - ' ],' - ' "enable_cloud_monitoring": true,' - ' "enable_cloud_profiler": true,' - ' "enable_cloud_trace": true,' - ' "experiments": [],' - ' "metrics_project": "chromium-reclient-metrics",' - ' "project": "rbe-chromium-trusted",' - ' "remote_jobs": 250' - ' },' - ' "$recipe_engine/resultdb/test_presentation": {' - ' "column_keys": [],' - ' "grouping_keys": [' - ' "status",' - ' "v.test_suite"' - ' ]' - ' },' - ' "builder_group": "chromium.android.desktop",' - ' "recipe": "binary_size_generator_tot"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "chromium.use_per_builder_build_dir_name" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome|content)/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)|(ninja://[^/]*headless_shell_wpt/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - description_html: "Generates binary size data for android-desktop on arm64.<br/>Builder owner: <a href=mailto:clank-engprod@google.com>clank-engprod@google.com</a>" - shadow_builder_adjustments { - service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" - pool: "luci.chromium.try" - properties: - '{' - ' "$build/siso": {' - ' "configs": [' - ' "builder"' - ' ],' - ' "enable_cloud_monitoring": true,' - ' "enable_cloud_profiler": true,' - ' "enable_cloud_trace": true,' - ' "experiments": [],' - ' "metrics_project": "chromium-reclient-metrics",' - ' "project": "rbe-chromium-untrusted",' - ' "remote_jobs": 250' - ' }' - '}' - dimensions: "builder:" - dimensions: "builderless:1" - dimensions: "pool:luci.chromium.try" - } - contact_team_email: "clank-engprod@google.com" - custom_metric_definitions { - name: "/chrome/infra/browser/builds/cached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"true\"" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_retry_shard_count" - predicates: "has(build.output.properties.ran_tests_retry_shard)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_without_patch_count" - predicates: "has(build.output.properties.ran_tests_without_patch)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/uncached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"false\"" - } - } - builders { name: "android-desktop-arm64-compile-dbg" swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:android-desktop-arm64-compile-dbg" @@ -41778,126 +41658,6 @@ } } builders { - name: "android-desktop-x64-binary-size-generator" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builder:android-desktop-x64-binary-size-generator" - dimensions: "cores:32" - dimensions: "cpu:x86-64" - dimensions: "os:Ubuntu-22.04" - dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:1" - exe { - cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" - cipd_version: "refs/heads/main" - cmd: "luciexe" - } - properties: - '{' - ' "$build/siso": {' - ' "configs": [' - ' "builder"' - ' ],' - ' "enable_cloud_monitoring": true,' - ' "enable_cloud_profiler": true,' - ' "enable_cloud_trace": true,' - ' "experiments": [],' - ' "metrics_project": "chromium-reclient-metrics",' - ' "project": "rbe-chromium-trusted",' - ' "remote_jobs": 250' - ' },' - ' "$recipe_engine/resultdb/test_presentation": {' - ' "column_keys": [],' - ' "grouping_keys": [' - ' "status",' - ' "v.test_suite"' - ' ]' - ' },' - ' "builder_group": "chromium.android.desktop",' - ' "recipe": "binary_size_generator_tot"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "chromium.use_per_builder_build_dir_name" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome|content)/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)|(ninja://[^/]*headless_shell_wpt/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - description_html: "Generates binary size data for android-desktop on x64.<br/>Builder owner: <a href=mailto:clank-engprod@google.com>clank-engprod@google.com</a>" - shadow_builder_adjustments { - service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" - pool: "luci.chromium.try" - properties: - '{' - ' "$build/siso": {' - ' "configs": [' - ' "builder"' - ' ],' - ' "enable_cloud_monitoring": true,' - ' "enable_cloud_profiler": true,' - ' "enable_cloud_trace": true,' - ' "experiments": [],' - ' "metrics_project": "chromium-reclient-metrics",' - ' "project": "rbe-chromium-untrusted",' - ' "remote_jobs": 250' - ' }' - '}' - dimensions: "builder:" - dimensions: "builderless:1" - dimensions: "pool:luci.chromium.try" - } - contact_team_email: "clank-engprod@google.com" - custom_metric_definitions { - name: "/chrome/infra/browser/builds/cached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"true\"" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_retry_shard_count" - predicates: "has(build.output.properties.ran_tests_retry_shard)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_without_patch_count" - predicates: "has(build.output.properties.ran_tests_without_patch)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/uncached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"false\"" - } - } - builders { name: "android-desktop-x64-compile-dbg" swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:android-desktop-x64-compile-dbg" @@ -48523,8 +48283,8 @@ priority: 35 execution_timeout_secs: 10800 caches { - name: "xcode_ios_17a5305f" - path: "xcode_ios_17a5305f.app" + name: "xcode_ios_17a5305k" + path: "xcode_ios_17a5305k.app" } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -48593,8 +48353,9 @@ builders { name: "ios-catalyst" swarming_host: "chromium-swarm.appspot.com" - dimensions: "builder:ios-catalyst" - dimensions: "cpu:x86-64" + dimensions: "builderless:1" + dimensions: "cpu:arm64" + dimensions: "free_space:standard" dimensions: "os:Mac-15" dimensions: "pool:luci.chromium.ci" exe { @@ -48683,8 +48444,7 @@ shadow_builder_adjustments { service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" pool: "luci.chromium.try" - dimensions: "builder:" - dimensions: "builderless:1" + dimensions: "free_space:" dimensions: "pool:luci.chromium.try" } custom_metric_definitions { @@ -50089,8 +49849,8 @@ priority: 35 execution_timeout_secs: 36000 caches { - name: "xcode_ios_17a5305f" - path: "xcode_ios_17a5305f.app" + name: "xcode_ios_17a5305k" + path: "xcode_ios_17a5305k.app" } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -50307,8 +50067,8 @@ priority: 35 execution_timeout_secs: 36000 caches { - name: "xcode_ios_17a5305f" - path: "xcode_ios_17a5305f.app" + name: "xcode_ios_17a5305k" + path: "xcode_ios_17a5305k.app" } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -77822,7 +77582,7 @@ name: "android-binary-size" swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:android-binary-size" - dimensions: "cores:32" + dimensions: "cores:16|32" dimensions: "cpu:x86-64" dimensions: "os:Ubuntu-22.04" dimensions: "pool:luci.chromium.try" @@ -81834,126 +81594,6 @@ } } builders { - name: "android-desktop-arm64-binary-size" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:32" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-22.04" - dimensions: "pool:luci.chromium.try" - dimensions: "ssd:1" - exe { - cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" - cipd_version: "refs/heads/main" - cmd: "luciexe" - } - properties: - '{' - ' "$build/binary_size": {' - ' "analyze_targets": [' - ' "//chrome/android:trichrome_64_minimal_apks",' - ' "//chrome/android:trichrome_library_64_apk",' - ' "//chrome/android:validate_expectations",' - ' "//tools/binary_size:binary_size_trybot_py"' - ' ],' - ' "compile_targets": [' - ' "check_chrome_static_initializers",' - ' "monochrome_64_32_apk",' - ' "validate_expectations"' - ' ]' - ' },' - ' "$build/siso": {' - ' "configs": [' - ' "builder"' - ' ],' - ' "enable_cloud_monitoring": true,' - ' "enable_cloud_profiler": true,' - ' "enable_cloud_trace": true,' - ' "experiments": [],' - ' "metrics_project": "chromium-reclient-metrics",' - ' "project": "rbe-chromium-untrusted",' - ' "remote_jobs": 150' - ' },' - ' "$recipe_engine/resultdb/test_presentation": {' - ' "column_keys": [],' - ' "grouping_keys": [' - ' "status",' - ' "v.test_suite"' - ' ]' - ' },' - ' "builder_group": "tryserver.chromium.android",' - ' "recipe": "binary_size_trybot"' - '}' - execution_timeout_secs: 14400 - expiration_secs: 7200 - grace_period { - seconds: 120 - } - build_numbers: YES - service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "chromium.use_per_builder_build_dir_name" - value: 100 - } - experiments { - key: "luci.buildbucket.canary_software" - value: 5 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "try_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome|content)/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_try_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)|(ninja://[^/]*headless_shell_wpt/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - description_html: "Measures binary size of android-desktop on arm64.<br/>Builder owner: <a href=mailto:clank-engprod@google.com>clank-engprod@google.com</a>" - contact_team_email: "clank-engprod@google.com" - custom_metric_definitions { - name: "/chrome/infra/browser/builds/cached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"true\"" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_retry_shard_count" - predicates: "has(build.output.properties.ran_tests_retry_shard)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_without_patch_count" - predicates: "has(build.output.properties.ran_tests_without_patch)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/uncached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"false\"" - } - } - builders { name: "android-desktop-arm64-clobber-rel" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -82598,126 +82238,6 @@ } } builders { - name: "android-desktop-x64-binary-size" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:32" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-22.04" - dimensions: "pool:luci.chromium.try" - dimensions: "ssd:1" - exe { - cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" - cipd_version: "refs/heads/main" - cmd: "luciexe" - } - properties: - '{' - ' "$build/binary_size": {' - ' "analyze_targets": [' - ' "//chrome/android:trichrome_64_minimal_apks",' - ' "//chrome/android:trichrome_library_64_apk",' - ' "//chrome/android:validate_expectations",' - ' "//tools/binary_size:binary_size_trybot_py"' - ' ],' - ' "compile_targets": [' - ' "check_chrome_static_initializers",' - ' "monochrome_64_32_apk",' - ' "validate_expectations"' - ' ]' - ' },' - ' "$build/siso": {' - ' "configs": [' - ' "builder"' - ' ],' - ' "enable_cloud_monitoring": true,' - ' "enable_cloud_profiler": true,' - ' "enable_cloud_trace": true,' - ' "experiments": [],' - ' "metrics_project": "chromium-reclient-metrics",' - ' "project": "rbe-chromium-untrusted",' - ' "remote_jobs": 150' - ' },' - ' "$recipe_engine/resultdb/test_presentation": {' - ' "column_keys": [],' - ' "grouping_keys": [' - ' "status",' - ' "v.test_suite"' - ' ]' - ' },' - ' "builder_group": "tryserver.chromium.android",' - ' "recipe": "binary_size_trybot"' - '}' - execution_timeout_secs: 14400 - expiration_secs: 7200 - grace_period { - seconds: 120 - } - build_numbers: YES - service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "chromium.use_per_builder_build_dir_name" - value: 100 - } - experiments { - key: "luci.buildbucket.canary_software" - value: 5 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "try_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome|content)/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_try_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)|(ninja://[^/]*headless_shell_wpt/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - description_html: "Measures binary size of android-desktop on x64.<br/>Builder owner: <a href=mailto:clank-engprod@google.com>clank-engprod@google.com</a>" - contact_team_email: "clank-engprod@google.com" - custom_metric_definitions { - name: "/chrome/infra/browser/builds/cached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"true\"" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_retry_shard_count" - predicates: "has(build.output.properties.ran_tests_retry_shard)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/ran_tests_without_patch_count" - predicates: "has(build.output.properties.ran_tests_without_patch)" - } - custom_metric_definitions { - name: "/chrome/infra/browser/builds/uncached_count" - predicates: "has(build.output.properties.is_cached)" - predicates: "string(build.output.properties.is_cached) == \"false\"" - } - } - builders { name: "android-desktop-x64-clobber-rel" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -99288,8 +98808,8 @@ seconds: 120 } caches { - name: "xcode_ios_17a5305f" - path: "xcode_ios_17a5305f.app" + name: "xcode_ios_17a5305k" + path: "xcode_ios_17a5305k.app" } build_numbers: YES service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -99356,8 +98876,9 @@ builders { name: "ios-catalyst" swarming_host: "chromium-swarm.appspot.com" - dimensions: "builder:ios-catalyst" - dimensions: "cpu:x86-64" + dimensions: "builderless:1" + dimensions: "cpu:arm64" + dimensions: "free_space:standard" dimensions: "os:Mac-15" dimensions: "pool:luci.chromium.try" exe { @@ -99713,7 +99234,6 @@ ' }' ' },' ' "builder_group": "tryserver.chromium.mac",' - ' "cq": "required",' ' "led_builder_is_bootstrapped": true,' ' "recipe": "chromium/orchestrator"' '}' @@ -100829,8 +100349,8 @@ seconds: 120 } caches { - name: "xcode_ios_17a5305f" - path: "xcode_ios_17a5305f.app" + name: "xcode_ios_17a5305k" + path: "xcode_ios_17a5305k.app" } build_numbers: YES service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -101045,8 +100565,8 @@ seconds: 120 } caches { - name: "xcode_ios_17a5305f" - path: "xcode_ios_17a5305f.app" + name: "xcode_ios_17a5305k" + path: "xcode_ios_17a5305k.app" } build_numbers: YES service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg index 0d86fb5..bd8bc433 100644 --- a/infra/config/generated/luci/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -359,6 +359,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -1306,6 +1310,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -2041,6 +2049,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -2611,6 +2623,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -2989,6 +3005,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -3127,12 +3147,6 @@ name: "buildbucket/luci.chromium.try/android-cronet-x86-dbg-marshmallow-tests" } builders { - name: "buildbucket/luci.chromium.try/android-desktop-arm64-binary-size" - } - builders { - name: "buildbucket/luci.chromium.try/android-desktop-x64-binary-size" - } - builders { name: "buildbucket/luci.chromium.try/android-desktop-x64-rel" } builders { @@ -3885,6 +3899,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -4388,6 +4406,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -4821,6 +4843,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -5191,6 +5217,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -5564,6 +5594,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -5932,6 +5966,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -6380,6 +6418,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -7378,6 +7420,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -8141,6 +8187,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -8509,6 +8559,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -9152,6 +9206,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -9306,16 +9364,6 @@ short_name: "x64-rel" } builders { - name: "buildbucket/luci.chromium.ci/android-desktop-arm64-binary-size-generator" - category: "builder|size" - short_name: "arm64" - } - builders { - name: "buildbucket/luci.chromium.ci/android-desktop-x64-binary-size-generator" - category: "builder|size" - short_name: "x64" - } - builders { name: "buildbucket/luci.chromium.ci/android-desktop-x64-rel-15-tests" category: "tester|x64" short_name: "15-rel" @@ -9565,6 +9613,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -9928,6 +9980,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -10375,6 +10431,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -10808,6 +10868,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -11170,6 +11234,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -11686,6 +11754,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -12114,6 +12186,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -12722,6 +12798,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -13300,6 +13380,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -13918,6 +14002,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -14386,6 +14474,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -14776,6 +14868,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -15369,6 +15465,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -15960,6 +16060,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -16379,6 +16483,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -17141,6 +17249,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -17532,6 +17644,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -18277,6 +18393,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -18679,6 +18799,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -19131,6 +19255,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -19594,6 +19722,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -20062,6 +20194,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -20430,6 +20566,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -20828,6 +20968,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -21231,6 +21375,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -21779,6 +21927,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -22177,6 +22329,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -22606,6 +22762,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -23039,6 +23199,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -23412,6 +23576,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -23785,6 +23953,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -24258,6 +24430,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -24861,6 +25037,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -25255,6 +25435,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -25660,6 +25844,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -26043,6 +26231,10 @@ url: "/p/chromium-m140/g/main/console" } links { + text: "m141" + url: "/p/chromium-m141/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -26379,9 +26571,6 @@ name: "buildbucket/luci.chromium.try/android-desktop-15-x64-fyi-rel" } builders { - name: "buildbucket/luci.chromium.try/android-desktop-arm64-binary-size" - } - builders { name: "buildbucket/luci.chromium.try/android-desktop-arm64-clobber-rel" } builders { @@ -26400,9 +26589,6 @@ name: "buildbucket/luci.chromium.try/android-desktop-arm64-official" } builders { - name: "buildbucket/luci.chromium.try/android-desktop-x64-binary-size" - } - builders { name: "buildbucket/luci.chromium.try/android-desktop-x64-clobber-rel" } builders { @@ -27941,9 +28127,6 @@ name: "buildbucket/luci.chromium.try/android-desktop-15-x64-fyi-rel" } builders { - name: "buildbucket/luci.chromium.try/android-desktop-arm64-binary-size" - } - builders { name: "buildbucket/luci.chromium.try/android-desktop-arm64-clobber-rel" } builders { @@ -27959,9 +28142,6 @@ name: "buildbucket/luci.chromium.try/android-desktop-arm64-deterministic-rel" } builders { - name: "buildbucket/luci.chromium.try/android-desktop-x64-binary-size" - } - builders { name: "buildbucket/luci.chromium.try/android-desktop-x64-clobber-rel" } builders {
diff --git a/infra/config/generated/luci/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg index 8c0af634..efc94b4 100644 --- a/infra/config/generated/luci/luci-scheduler.cfg +++ b/infra/config/generated/luci/luci-scheduler.cfg
@@ -3542,15 +3542,6 @@ } } job { - id: "android-desktop-arm64-binary-size-generator" - realm: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-desktop-arm64-binary-size-generator" - } -} -job { id: "android-desktop-arm64-compile-dbg" realm: "ci" buildbucket { @@ -3605,15 +3596,6 @@ } } job { - id: "android-desktop-x64-binary-size-generator" - realm: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-desktop-x64-binary-size-generator" - } -} -job { id: "android-desktop-x64-compile-dbg" realm: "ci" buildbucket { @@ -6579,14 +6561,12 @@ triggers: "android-cronet-x86-rel" triggers: "android-desktop-15-x64-fyi-rel" triggers: "android-desktop-arm64-archive-rel" - triggers: "android-desktop-arm64-binary-size-generator" triggers: "android-desktop-arm64-compile-dbg" triggers: "android-desktop-arm64-compile-rel" triggers: "android-desktop-arm64-deterministic-dbg" triggers: "android-desktop-arm64-deterministic-rel" triggers: "android-desktop-arm64-official" triggers: "android-desktop-x64-archive-rel" - triggers: "android-desktop-x64-binary-size-generator" triggers: "android-desktop-x64-compile-dbg" triggers: "android-desktop-x64-compile-rel" triggers: "android-desktop-x64-deterministic-dbg"
diff --git a/infra/config/generated/luci/realms.cfg b/infra/config/generated/luci/realms.cfg index 7893395..06299837 100644 --- a/infra/config/generated/luci/realms.cfg +++ b/infra/config/generated/luci/realms.cfg
@@ -554,6 +554,7 @@ principals: "project:chromium-m138" principals: "project:chromium-m139" principals: "project:chromium-m140" + principals: "project:chromium-m141" principals: "project:dawn" principals: "user:chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" principals: "user:findit-for-me@appspot.gserviceaccount.com" @@ -609,6 +610,7 @@ principals: "project:chromium-m138" principals: "project:chromium-m139" principals: "project:chromium-m140" + principals: "project:chromium-m141" principals: "project:dawn" principals: "user:chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com" principals: "user:infra-try-recipes-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/infra/config/lib/xcode.star b/infra/config/lib/xcode.star index db0a3f87..d9d3b0d 100644 --- a/infra/config/lib/xcode.star +++ b/infra/config/lib/xcode.star
@@ -26,7 +26,7 @@ # Xcode 16 beta version used on beta bots. x16betabots = _xcode.for_ios("16f6"), # Xcode 26 beta version used on beta bots. - x26betabots = _xcode.for_ios("17a5305f"), + x26betabots = _xcode.for_ios("17a5305k"), # in use by ios-webkit-tot x14wk = _xcode.for_ios("14c18wk"), )
diff --git a/infra/config/milestones.json b/infra/config/milestones.json index f082598c..64cdc8fe 100644 --- a/infra/config/milestones.json +++ b/infra/config/milestones.json
@@ -18,5 +18,10 @@ "name": "m140", "project": "chromium-m140", "ref": "refs/branch-heads/7339" + }, + "141": { + "name": "m141", + "project": "chromium-m141", + "ref": "refs/branch-heads/7390" } }
diff --git a/infra/config/subprojects/chromium/ci/chromium.android.desktop.star b/infra/config/subprojects/chromium/ci/chromium.android.desktop.star index da050c75..8607b53 100644 --- a/infra/config/subprojects/chromium/ci/chromium.android.desktop.star +++ b/infra/config/subprojects/chromium/ci/chromium.android.desktop.star
@@ -430,67 +430,3 @@ execution_timeout = 6 * time.hour, siso_remote_jobs = siso.remote_jobs.DEFAULT, ) - -ci.builder( - name = "android-desktop-arm64-binary-size-generator", - branch_selector = branches.selector.MAIN, - description_html = "Generates binary size data for android-desktop on arm64.", - executable = "recipe:binary_size_generator_tot", - gn_args = gn_args.config( - configs = [ - "android_desktop", - "android_builder", - "arm64", - "chrome_with_codecs", - "remoteexec", - "minimal_symbols", - "official_optimize", - "stable_channel", - "v8_release_branch", - ], - ), - builderless = False, - cores = 32, - ssd = True, - # TODO(crbug.com/420639761): Enable gardening and tree closing when stable. - gardener_rotations = args.ignore_default(None), - tree_closing = False, - console_view_entry = consoles.console_view_entry( - category = "builder|size", - short_name = "arm64", - ), - contact_team_email = "clank-engprod@google.com", - siso_remote_jobs = siso.remote_jobs.DEFAULT, -) - -ci.builder( - name = "android-desktop-x64-binary-size-generator", - branch_selector = branches.selector.MAIN, - description_html = "Generates binary size data for android-desktop on x64.", - executable = "recipe:binary_size_generator_tot", - gn_args = gn_args.config( - configs = [ - "android_desktop", - "android_builder", - "x64", - "chrome_with_codecs", - "remoteexec", - "minimal_symbols", - "official_optimize", - "stable_channel", - "v8_release_branch", - ], - ), - builderless = False, - cores = 32, - ssd = True, - # TODO(crbug.com/420639761): Enable gardening and tree closing when stable. - gardener_rotations = args.ignore_default(None), - tree_closing = False, - console_view_entry = consoles.console_view_entry( - category = "builder|size", - short_name = "x64", - ), - contact_team_email = "clank-engprod@google.com", - siso_remote_jobs = siso.remote_jobs.DEFAULT, -)
diff --git a/infra/config/subprojects/chromium/ci/chromium.mac.star b/infra/config/subprojects/chromium/ci/chromium.mac.star index 3165fdd..9098b58 100644 --- a/infra/config/subprojects/chromium/ci/chromium.mac.star +++ b/infra/config/subprojects/chromium/ci/chromium.mac.star
@@ -1138,6 +1138,8 @@ "ios/chrome/test:all_fuzzer_tests", ], ), + builderless = True, + cpu = cpu.ARM64, tree_closing = False, console_view_entry = [ consoles.console_view_entry(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.desktop.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.desktop.star index e1e5fd95..32642c7 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.desktop.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.desktop.star
@@ -202,61 +202,3 @@ ], ), ) - -try_.builder( - name = "android-desktop-arm64-binary-size", - # TODO(crbug.com/439887309): Enable on ANDROID_BRANCHES - #branch_selector = branches.selector.ANDROID_BRANCHES, - description_html = "Measures binary size of android-desktop on arm64.", - executable = "recipe:binary_size_trybot", - gn_args = "ci/android-desktop-arm64-binary-size-generator", - cores = 32, - ssd = True, - contact_team_email = "clank-engprod@google.com", - main_list_view = "try", - properties = { - "$build/binary_size": { - "analyze_targets": [ - "//chrome/android:trichrome_64_minimal_apks", - "//chrome/android:trichrome_library_64_apk", - "//chrome/android:validate_expectations", - "//tools/binary_size:binary_size_trybot_py", - ], - "compile_targets": [ - "check_chrome_static_initializers", - "monochrome_64_32_apk", - "validate_expectations", - ], - }, - }, - siso_remote_linking = False, -) - -try_.builder( - name = "android-desktop-x64-binary-size", - # TODO(crbug.com/439887309): Enable on ANDROID_BRANCHES - #branch_selector = branches.selector.ANDROID_BRANCHES, - description_html = "Measures binary size of android-desktop on x64.", - executable = "recipe:binary_size_trybot", - gn_args = "ci/android-desktop-x64-binary-size-generator", - cores = 32, - ssd = True, - contact_team_email = "clank-engprod@google.com", - main_list_view = "try", - properties = { - "$build/binary_size": { - "analyze_targets": [ - "//chrome/android:trichrome_64_minimal_apks", - "//chrome/android:trichrome_library_64_apk", - "//chrome/android:validate_expectations", - "//tools/binary_size:binary_size_trybot_py", - ], - "compile_targets": [ - "check_chrome_static_initializers", - "monochrome_64_32_apk", - "validate_expectations", - ], - }, - }, - siso_remote_linking = False, -)
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star index 6da2e93a..a6b2ad5 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -565,7 +565,7 @@ ], ), builderless = not settings.is_main, - cores = 32, + cores = "16|32", ssd = True, main_list_view = "try", properties = {
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star b/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star index e5549f8c..95d2d6bb 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star
@@ -573,6 +573,8 @@ "ci/ios-catalyst", ], gn_args = "ci/ios-catalyst", + builderless = True, + cpu = cpu.ARM64, siso_remote_jobs = siso.remote_jobs.LOW_JOBS_FOR_CQ, ) @@ -625,7 +627,7 @@ "chromium.add_one_test_shard": 10, }, main_list_view = "try", - tryjob = try_.job(), + #tryjob = try_.job(), use_clang_coverage = True, xcode = xcode.xcode_default, )
diff --git a/infra/config/targets/bundles.star b/infra/config/targets/bundles.star index 0b104dc7..93836f2e 100644 --- a/infra/config/targets/bundles.star +++ b/infra/config/targets/bundles.star
@@ -5546,13 +5546,21 @@ targets = "ios_eg2_cq_tests", mixins = [ "xcodebuild_sim_runner", + "mac_15_vm_optional", ], variants = [ - "SIM_IPAD_PRO_6TH_GEN_17_5", "SIM_IPAD_PRO_7TH_GEN_18_2", - "SIM_IPAD_PRO_7TH_GEN_26_0", "SIM_IPHONE_14_17_5", "SIM_IPHONE_15_18_2", + ], + ), + targets.bundle( + targets = "ios_eg2_cq_tests", + mixins = [ + "xcodebuild_sim_runner", + ], + variants = [ + "SIM_IPAD_PRO_7TH_GEN_26_0", "SIM_IPHONE_16_26_0", ], ), @@ -5560,11 +5568,18 @@ targets = "ios_eg2_tests", mixins = [ "xcodebuild_sim_runner", + "mac_15_vm_optional", + ], + variants = [ + "SIM_IPHONE_15_18_2", + ], + ), + targets.bundle( + targets = "ios_eg2_tests", + mixins = [ + "xcodebuild_sim_runner", ], variants = [ - "SIM_IPAD_PRO_7TH_GEN_18_2", - "SIM_IPAD_PRO_7TH_GEN_26_0", - "SIM_IPHONE_15_18_2", "SIM_IPHONE_16_26_0", ], ),
diff --git a/infra/config/targets/mixins.star b/infra/config/targets/mixins.star index ec4d9e9d..dd0df62 100644 --- a/infra/config/targets/mixins.star +++ b/infra/config/targets/mixins.star
@@ -2702,12 +2702,12 @@ generate_pyl_entry = False, args = [ "--xcode-build-version", - "17a5305f", + "17a5305k", ], swarming = targets.swarming( named_caches = [ swarming.cache( - name = "xcode_ios_17a5305f", + name = "xcode_ios_17a5305k", path = "Xcode.app", ), ],
diff --git a/internal b/internal index d9853f3..3ddd578 160000 --- a/internal +++ b/internal
@@ -1 +1 @@ -Subproject commit d9853f3ce8dce7ce84f0c2701cf93bfbed617347 +Subproject commit 3ddd5788bd026e3ed8a3f674c273a6030f54e656
diff --git a/ios/chrome/browser/bookmarks/model/bookmarks_utils.cc b/ios/chrome/browser/bookmarks/model/bookmarks_utils.cc index fd50caba..c77675a6 100644 --- a/ios/chrome/browser/bookmarks/model/bookmarks_utils.cc +++ b/ios/chrome/browser/bookmarks/model/bookmarks_utils.cc
@@ -15,16 +15,6 @@ using bookmarks::BookmarkNode; -namespace { - -void LogDefaultBookmarkFolderOutcome( - DefaultBookmarkFolderOutcomeForMetrics value) { - base::UmaHistogramEnumeration("IOS.Bookmarks.DefaultBookmarkFolderOutcome", - value); -} - -} // namespace - const int64_t kLastUsedBookmarkFolderNone = -1; std::vector<const bookmarks::BookmarkNode*> PrimaryPermanentNodes( @@ -83,30 +73,12 @@ int64_t node_id = prefs->GetInt64(prefs::kIosBookmarkLastUsedFolderReceivingBookmarks); - if (node_id == kLastUsedBookmarkFolderNone) { - LogDefaultBookmarkFolderOutcome( - DefaultBookmarkFolderOutcomeForMetrics::kUnset); - } else { - BookmarkStorageType type = - static_cast<BookmarkStorageType>(prefs->GetInteger( - prefs::kIosBookmarkLastUsedStorageReceivingBookmarks)); - + if (node_id != kLastUsedBookmarkFolderNone) { const BookmarkNode* result = bookmarks::GetBookmarkNodeByID(bookmark_model, node_id); + // Make sure the bookmark node is a folder. See crbug.com/1450146. if (result && result->is_folder()) { - // Make sure the bookmark node is a folder. See crbug.com/1450146. - LogDefaultBookmarkFolderOutcome( - bookmark_model->IsLocalOnlyNode(*result) - ? DefaultBookmarkFolderOutcomeForMetrics::kExistingLocalFolderSet - : DefaultBookmarkFolderOutcomeForMetrics:: - kExistingAccountFolderSet); return result; - } else { - LogDefaultBookmarkFolderOutcome( - (type == BookmarkStorageType::kLocalOrSyncable) - ? DefaultBookmarkFolderOutcomeForMetrics::kMissingLocalFolderSet - : DefaultBookmarkFolderOutcomeForMetrics:: - kMissingAccountFolderSet); } }
diff --git a/ios/chrome/browser/bookmarks/model/bookmarks_utils.h b/ios/chrome/browser/bookmarks/model/bookmarks_utils.h index fb247bf..79528b6a 100644 --- a/ios/chrome/browser/bookmarks/model/bookmarks_utils.h +++ b/ios/chrome/browser/bookmarks/model/bookmarks_utils.h
@@ -19,19 +19,6 @@ class BookmarkNode; } // namespace bookmarks -// Enum representing the internal behavior's outcome for -// `GetDefaultBookmarkFolder()`, distinguishing the various cases depending on -// the values in PrefService. These values are persisted to logs. Entries should -// not be renumbered and numeric values should never be reused. -enum class DefaultBookmarkFolderOutcomeForMetrics { - kUnset = 0, - kExistingLocalFolderSet = 1, - kExistingAccountFolderSet = 2, - kMissingLocalFolderSet = 3, - kMissingAccountFolderSet = 4, - kMaxValue = kMissingAccountFolderSet -}; - // Used in the preference kIosBookmarkLastUsedFolderReceivingBookmarks. // It means that the user has not set a folder for bookmarks explicitly. extern const int64_t kLastUsedBookmarkFolderNone;
diff --git a/ios/chrome/browser/bookmarks/model/bookmarks_utils_unittest.mm b/ios/chrome/browser/bookmarks/model/bookmarks_utils_unittest.mm index 5f63bef4f..3237f3e2 100644 --- a/ios/chrome/browser/bookmarks/model/bookmarks_utils_unittest.mm +++ b/ios/chrome/browser/bookmarks/model/bookmarks_utils_unittest.mm
@@ -5,7 +5,6 @@ #import "ios/chrome/browser/bookmarks/model/bookmarks_utils.h" #import "base/memory/raw_ptr.h" -#import "base/test/metrics/histogram_tester.h" #import "components/bookmarks/browser/bookmark_model.h" #import "ios/chrome/browser/bookmarks/model/bookmark_ios_unit_test_support.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" @@ -46,7 +45,6 @@ raw_ptr<const bookmarks::BookmarkNode> account_folder_node_ = nullptr; raw_ptr<const bookmarks::BookmarkNode> local_folder_node_ = nullptr; raw_ptr<const bookmarks::BookmarkNode> local_bookmark_node_ = nullptr; - base::HistogramTester histogram_tester_; }; // Tests GetDefaultBookmarkFolder() when no default folder was set and account @@ -57,9 +55,6 @@ const bookmarks::BookmarkNode* default_folder_node = GetDefaultBookmarkFolderHelper(); EXPECT_EQ(default_folder_node, bookmark_model_->account_mobile_node()); - histogram_tester_.ExpectUniqueSample( - "IOS.Bookmarks.DefaultBookmarkFolderOutcome", - DefaultBookmarkFolderOutcomeForMetrics::kUnset, 1); } // Tests GetDefaultBookmarkFolder() when no default folder was set and account @@ -71,9 +66,6 @@ const bookmarks::BookmarkNode* default_folder_node = GetDefaultBookmarkFolderHelper(); EXPECT_EQ(default_folder_node, bookmark_model_->mobile_node()); - histogram_tester_.ExpectUniqueSample( - "IOS.Bookmarks.DefaultBookmarkFolderOutcome", - DefaultBookmarkFolderOutcomeForMetrics::kUnset, 1); } // Tests when an id of -1 (kLastUsedBookmarkFolderNone) is set as the default @@ -83,9 +75,6 @@ const bookmarks::BookmarkNode* default_folder_node = GetDefaultBookmarkFolderHelper(); EXPECT_EQ(default_folder_node, bookmark_model_->account_mobile_node()); - histogram_tester_.ExpectUniqueSample( - "IOS.Bookmarks.DefaultBookmarkFolderOutcome", - DefaultBookmarkFolderOutcomeForMetrics::kUnset, 1); } // Tests when an unknown id is set as the default folder. @@ -94,9 +83,6 @@ const bookmarks::BookmarkNode* default_folder_node = GetDefaultBookmarkFolderHelper(); EXPECT_EQ(default_folder_node, bookmark_model_->account_mobile_node()); - histogram_tester_.ExpectUniqueSample( - "IOS.Bookmarks.DefaultBookmarkFolderOutcome", - DefaultBookmarkFolderOutcomeForMetrics::kMissingLocalFolderSet, 1); } // Tests when the folder is set to a local bookmark. @@ -106,9 +92,6 @@ const bookmarks::BookmarkNode* default_folder_node = GetDefaultBookmarkFolderHelper(); EXPECT_EQ(default_folder_node, local_folder_node_); - histogram_tester_.ExpectUniqueSample( - "IOS.Bookmarks.DefaultBookmarkFolderOutcome", - DefaultBookmarkFolderOutcomeForMetrics::kExistingLocalFolderSet, 1); } // Tests when the folder is set to a local bookmark. @@ -118,9 +101,6 @@ const bookmarks::BookmarkNode* default_folder_node = GetDefaultBookmarkFolderHelper(); EXPECT_EQ(default_folder_node, account_folder_node_); - histogram_tester_.ExpectUniqueSample( - "IOS.Bookmarks.DefaultBookmarkFolderOutcome", - DefaultBookmarkFolderOutcomeForMetrics::kExistingAccountFolderSet, 1); } // Test when a bookmark node is set as the default folder. @@ -130,9 +110,6 @@ const bookmarks::BookmarkNode* default_folder_node = GetDefaultBookmarkFolderHelper(); EXPECT_EQ(default_folder_node, bookmark_model_->account_mobile_node()); - histogram_tester_.ExpectUniqueSample( - "IOS.Bookmarks.DefaultBookmarkFolderOutcome", - DefaultBookmarkFolderOutcomeForMetrics::kMissingLocalFolderSet, 1); } TEST_F(BookmarksUtilsTest, PrimaryPermanentNodes) {
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn index d6e22fc..667c496 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn
@@ -48,6 +48,7 @@ "//ios/chrome/browser/bookmarks/model", "//ios/chrome/browser/commerce/model:shopping_service", "//ios/chrome/browser/commerce/model/push_notification", + "//ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator", "//ios/chrome/browser/content_suggestions/ui_bundled/cells", "//ios/chrome/browser/content_suggestions/ui_bundled/cells:most_visited_tiles", "//ios/chrome/browser/content_suggestions/ui_bundled/cells:shortcuts",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/BUILD.gn new file mode 100644 index 0000000..75cb5176 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/BUILD.gn
@@ -0,0 +1,19 @@ +# Copyright 2025 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("coordinator") { + sources = [ + "app_bundle_promo_mediator.h", + "app_bundle_promo_mediator.mm", + ] + + deps = [ + "//base", + "//ios/chrome/browser/app_store_bundle/model", + "//ios/chrome/browser/content_suggestions/ui_bundled:public", + "//ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui", + ] + + frameworks = [ "UIKit.framework" ] +}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/app_bundle_promo_mediator.h b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/app_bundle_promo_mediator.h new file mode 100644 index 0000000..60f6df9 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/app_bundle_promo_mediator.h
@@ -0,0 +1,58 @@ +// 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. + +#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_COORDINATOR_APP_BUNDLE_PROMO_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_COORDINATOR_APP_BUNDLE_PROMO_MEDIATOR_H_ + +#import <UIKit/UIKit.h> + +#import "base/ios/block_types.h" + +@protocol ContentSuggestionsViewControllerAudience; +@class AppBundlePromoCommands; +@class AppBundlePromoConfig; +class AppStoreBundleService; + +// Handles App Bundle promo module events. +@protocol AppBundlePromoMediatorDelegate + +// Indicates to the receiver that the App Bundle promo module should be removed. +// The `completion` is called after the removal is finished. +- (void)removeAppBundlePromoModuleWithCompletion:(ProceduralBlock)completion; + +@end + +// Mediator for managing the state of the App Bundle Promo (Magic Stack) module. +@interface AppBundlePromoMediator : NSObject + +// Used by the App Bundle promo module for the module config. +@property(nonatomic, strong) AppBundlePromoConfig* config; + +// Delegate. +@property(nonatomic, weak) id<AppBundlePromoMediatorDelegate> delegate; + +// Audience for presentation actions. +@property(nonatomic, weak) id<ContentSuggestionsViewControllerAudience> + presentationAudience; + +- (instancetype)initWithAppStoreBundleService: + (AppStoreBundleService*)appStoreBundleService; + +// Disconnects this mediator. +- (void)disconnect; + +// Removes the module from the Magic Stack on the current homepage without +// disabling the underlying feature. This prevents the module from being shown +// on the current homepage but does not affect its functionality elsewhere. +// The `completion` is called after the removal is finished. +- (void)removeModuleWithCompletion:(ProceduralBlock)completion; + +// Presents the Best of Google bundle page in an App Store modal window using +// `baseViewController`. Runs `completion` when the sheet is dismissed. +- (void)presentAppStoreBundlePage:(UIViewController*)baseViewController + withCompletion:(ProceduralBlock)completion; + +@end + +#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_COORDINATOR_APP_BUNDLE_PROMO_MEDIATOR_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/app_bundle_promo_mediator.mm b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/app_bundle_promo_mediator.mm new file mode 100644 index 0000000..19a7200d --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/app_bundle_promo_mediator.mm
@@ -0,0 +1,52 @@ +// 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. + +#import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/coordinator/app_bundle_promo_mediator.h" + +#import "base/check.h" +#import "base/memory/raw_ptr.h" +#import "ios/chrome/browser/app_store_bundle/model/app_store_bundle_service.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_audience.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller_audience.h" + +@interface AppBundlePromoMediator () <AppBundlePromoAudience> + +@end + +@implementation AppBundlePromoMediator { + raw_ptr<AppStoreBundleService> _appStoreBundleService; +} + +- (instancetype)initWithAppStoreBundleService: + (AppStoreBundleService*)appStoreBundleService { + CHECK(appStoreBundleService); + if ((self = [super init])) { + _appStoreBundleService = appStoreBundleService; + self.config = [[AppBundlePromoConfig alloc] init]; + self.config.audience = self; + } + return self; +} + +- (void)disconnect { + self.config = nil; +} + +- (void)removeModuleWithCompletion:(ProceduralBlock)completion { + [self.delegate removeAppBundlePromoModuleWithCompletion:completion]; +} + +- (void)didSelectAppBundlePromo { + [self.presentationAudience didSelectAppBundlePromo]; +} + +- (void)presentAppStoreBundlePage:(UIViewController*)baseViewController + withCompletion:(ProceduralBlock)completion { + CHECK(_appStoreBundleService); + _appStoreBundleService->PresentAppStoreBundlePromo(baseViewController, + completion); +} + +@end
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/BUILD.gn new file mode 100644 index 0000000..6079b22 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/BUILD.gn
@@ -0,0 +1,29 @@ +# 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. + +source_set("ui") { + sources = [ + "app_bundle_promo_audience.h", + "app_bundle_promo_config.h", + "app_bundle_promo_config.mm", + "app_bundle_promo_view.h", + "app_bundle_promo_view.mm", + ] + + deps = [ + "//ios/chrome/app/strings", + "//ios/chrome/browser/content_suggestions/ui_bundled:constants", + "//ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources", + "//ios/chrome/browser/content_suggestions/ui_bundled/cells", + "//ios/chrome/browser/content_suggestions/ui_bundled/magic_stack:constants", + "//ios/chrome/browser/content_suggestions/ui_bundled/magic_stack:public", + "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/common/ui/colors", + "//ios/chrome/common/ui/util", + "//ui/base", + ] + + frameworks = [ "UIKit.framework" ] +}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_audience.h b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_audience.h new file mode 100644 index 0000000..85d116d --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_audience.h
@@ -0,0 +1,16 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_AUDIENCE_H_ +#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_AUDIENCE_H_ + +// Interface to handle App Bundle promo card user events. +@protocol AppBundlePromoAudience + +// Called when the promo is selected by the user. +- (void)didSelectAppBundlePromo; + +@end + +#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_AUDIENCE_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h new file mode 100644 index 0000000..62c02bf --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h
@@ -0,0 +1,20 @@ +// 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. + +#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_CONFIG_H_ +#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_CONFIG_H_ + +#import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module.h" + +@protocol AppBundlePromoAudience; + +// Config object for the App Bundle promo module. +@interface AppBundlePromoConfig : MagicStackModule + +// The object that should handle user events. +@property(nonatomic, weak) id<AppBundlePromoAudience> audience; + +@end + +#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_CONFIG_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.mm b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.mm new file mode 100644 index 0000000..4db97b3e --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.mm
@@ -0,0 +1,17 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h" + +#import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h" + +@implementation AppBundlePromoConfig + +#pragma mark - MagicStackModule + +- (ContentSuggestionsModuleType)type { + return ContentSuggestionsModuleType::kAppBundlePromo; +} + +@end
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.h b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.h new file mode 100644 index 0000000..e811230 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.h
@@ -0,0 +1,24 @@ +// 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. + +#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_VIEW_H_ +#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_VIEW_H_ + +#import <UIKit/UIKit.h> + +#import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_audience.h" + +@class AppBundlePromoConfig; + +@interface AppBundlePromoView : UIView + +// Default initializer. +- (instancetype)initWithConfig:(AppBundlePromoConfig*)config; + +// The object that should handle user events. +@property(nonatomic, weak) id<AppBundlePromoAudience> audience; + +@end + +#endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_APP_BUNDLE_PROMO_UI_APP_BUNDLE_PROMO_VIEW_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.mm b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.mm new file mode 100644 index 0000000..ae648c2d --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.mm
@@ -0,0 +1,176 @@ +// 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. + +#import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.h" + +#import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/icon_view.h" +#import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_constants.h" +#import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" +#import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/common/ui/util/constraints_ui_util.h" +#import "ios/chrome/grit/ios_strings.h" +#import "ui/base/device_form_factor.h" +#import "ui/base/l10n/l10n_util.h" + +namespace { + +// `AppBundlePromoView` accessibility ID. +NSString* const kAppBundlePromoViewID = @"kAppBundlePromoViewID"; + +// The spacing between the title and description. +constexpr CGFloat kTitleDescriptionSpacing = 2; + +// The spacing between elements within the item. +constexpr CGFloat kContentStackSpacing = 14; + +// Constants related to the icon container view. +constexpr CGFloat kIconSize = 40; +constexpr CGFloat kIconContainerSize = 56; +constexpr CGFloat kIconContainerCornerRadius = 12; + +} // namespace + +@implementation AppBundlePromoView { + // UI tap gesture recognizer. + UITapGestureRecognizer* _tapGestureRecognizer; + AppBundlePromoConfig* _config; +} + +- (instancetype)initWithConfig:(AppBundlePromoConfig*)config { + if ((self = [super init])) { + _config = config; + } + return self; +} + +#pragma mark - UIView + +- (void)willMoveToSuperview:(UIView*)newSuperview { + [super willMoveToSuperview:newSuperview]; + [self createSubviews]; +} + +#pragma mark - Private + +- (void)createSubviews { + if (!(self.subviews.count == 0)) { + return; + } + + NSString* title = + l10n_util::GetNSString(IDS_IOS_MAGIC_STACK_APP_BUNDLE_PROMO_CARD_TITLE); + NSString* description = + (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) + ? l10n_util::GetNSString( + IDS_IOS_MAGIC_STACK_APP_BUNDLE_PROMO_CARD_IPAD_DESCRIPTION) + : l10n_util::GetNSString( + IDS_IOS_MAGIC_STACK_APP_BUNDLE_PROMO_CARD_IPHONE_DESCRIPTION); + + self.translatesAutoresizingMaskIntoConstraints = NO; + self.accessibilityIdentifier = kAppBundlePromoViewID; + self.isAccessibilityElement = YES; + self.accessibilityTraits = UIAccessibilityTraitButton; + self.accessibilityLabel = + [NSString stringWithFormat:@"%@, %@", title, description]; + + NSMutableArray* arrangedSubviews = [[NSMutableArray alloc] init]; + + UIView* imageContainerView = [self imageInContainer]; + [arrangedSubviews addObject:imageContainerView]; + + UILabel* titleLabel = [self createTitleLabel:title]; + [titleLabel + setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + forAxis:UILayoutConstraintAxisVertical]; + UILabel* descriptionLabel = [self createDescriptionLabel:description]; + [descriptionLabel + setContentCompressionResistancePriority:UILayoutPriorityDefaultLow + forAxis:UILayoutConstraintAxisVertical]; + + UIStackView* textStack = [[UIStackView alloc] + initWithArrangedSubviews:@[ titleLabel, descriptionLabel ]]; + textStack.axis = UILayoutConstraintAxisVertical; + textStack.translatesAutoresizingMaskIntoConstraints = NO; + textStack.spacing = kTitleDescriptionSpacing; + [textStack setContentHuggingPriority:UILayoutPriorityDefaultLow + forAxis:UILayoutConstraintAxisHorizontal]; + + [arrangedSubviews addObject:textStack]; + + UIStackView* contentStack = + [[UIStackView alloc] initWithArrangedSubviews:arrangedSubviews]; + contentStack.translatesAutoresizingMaskIntoConstraints = NO; + contentStack.axis = UILayoutConstraintAxisHorizontal; + contentStack.alignment = UIStackViewAlignmentCenter; + contentStack.spacing = kContentStackSpacing; + + [self addSubview:contentStack]; + AddSameConstraints(contentStack, self); + + _tapGestureRecognizer = + [[UITapGestureRecognizer alloc] initWithTarget:self + action:@selector(handleTap:)]; + [self addGestureRecognizer:_tapGestureRecognizer]; +} + +- (void)handleTap:(UITapGestureRecognizer*)sender { + if (sender.state == UIGestureRecognizerStateEnded) { + [self.audience didSelectAppBundlePromo]; + } +} + +- (UIView*)imageInContainer { + UIView* iconContainer = [[UIView alloc] init]; + + iconContainer.backgroundColor = [UIColor colorNamed:kGrey100Color]; + iconContainer.layer.cornerRadius = kIconContainerCornerRadius; + + UIImageView* imageView = + [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"app_bundle"]]; + imageView.contentMode = UIViewContentModeScaleAspectFit; + imageView.translatesAutoresizingMaskIntoConstraints = NO; + [NSLayoutConstraint activateConstraints:@[ + [imageView.heightAnchor constraintEqualToConstant:kIconSize], + [imageView.widthAnchor constraintEqualToConstant:kIconSize], + ]]; + [iconContainer addSubview:imageView]; + AddSameCenterConstraints(imageView, iconContainer); + + [NSLayoutConstraint activateConstraints:@[ + [iconContainer.widthAnchor constraintEqualToConstant:kIconContainerSize], + [iconContainer.widthAnchor + constraintEqualToAnchor:iconContainer.heightAnchor], + ]]; + + return iconContainer; +} + +- (UILabel*)createTitleLabel:(NSString*)title { + UILabel* label = [[UILabel alloc] init]; + label.text = title; + label.translatesAutoresizingMaskIntoConstraints = NO; + label.numberOfLines = 0; + label.lineBreakMode = NSLineBreakByWordWrapping; + label.font = + PreferredFontForTextStyle(UIFontTextStyleFootnote, UIFontWeightSemibold, + kMaxTextSizeForStyleFootnote); + label.adjustsFontForContentSizeCategory = YES; + label.textColor = [UIColor colorNamed:kTextPrimaryColor]; + return label; +} + +- (UILabel*)createDescriptionLabel:(NSString*)description { + UILabel* label = [[UILabel alloc] init]; + label.text = description; + label.numberOfLines = 2; + label.lineBreakMode = NSLineBreakByTruncatingTail; + label.font = PreferredFontForTextStyle(UIFontTextStyleFootnote, std::nullopt, + kMaxTextSizeForStyleFootnote); + label.adjustsFontForContentSizeCategory = YES; + label.textColor = [UIColor colorNamed:kTextSecondaryColor]; + return label; +} + +@end
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/Contents.json b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/Contents.json b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/Contents.json new file mode 100644 index 0000000..e228655 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/Contents.json
@@ -0,0 +1,18 @@ +{ + "images": [ + { + "idiom": "universal", + "scale": "2x", + "filename": "app_bundle@2x.png" + }, + { + "idiom": "universal", + "scale": "3x", + "filename": "app_bundle@3x.png" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/app_bundle@2x.png b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/app_bundle@2x.png new file mode 100644 index 0000000..21de1cc --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/app_bundle@2x.png Binary files differ
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/app_bundle@3x.png b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/app_bundle@3x.png new file mode 100644 index 0000000..f389980c --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/Assets.xcassets/app_bundle.imageset/app_bundle@3x.png Binary files differ
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/BUILD.gn new file mode 100644 index 0000000..7ddf586 --- /dev/null +++ b/ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/resources/BUILD.gn
@@ -0,0 +1,15 @@ +# Copyright 2025 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/ios/rules.gni") + +bundle_data_xcassets("resources") { + catalog = "Assets.xcassets" + sources = [ + "Assets.xcassets/Contents.json", + "Assets.xcassets/app_bundle.imageset/Contents.json", + "Assets.xcassets/app_bundle.imageset/app_bundle@2x.png", + "Assets.xcassets/app_bundle.imageset/app_bundle@3x.png", + ] +}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm index 1edee03..4ca97d2a6 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm
@@ -641,6 +641,16 @@ [_tipsMediator removeModuleWithCompletion:completion]; } +- (void)didSelectAppBundlePromo { + // Note: The promo modal only works when the `kAppBundlePromoEphemeralCard` + // feature is enabled. If this card is forced in the + // #ios-segmentation-ephemeral-card-ranker, tapping the card does NOT do + // anything. This is because the creation of the AppStorePromoService is gated + // behind the feature flag. + // TODO(crbug.com/441731330): Link user interaction handling and implement + // once App Bundle promo module is integrated with Magic Stack ranking. +} + - (void)openTipDestination:(segmentation_platform::TipIdentifier)tip { CHECK(IsTipsMagicStackEnabled()); CHECK(_tipsMediator);
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.h b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.h index 757feea..3a8e8ed 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.h +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.h
@@ -55,6 +55,7 @@ extern const char kMagicStackModuleEngagementShopCardIndexHistogram[]; extern const char kMagicStackModuleEngagementSendTabPromoIndexHistogram[]; extern const char kMagicStackModuleEngagementTipsIndexHistogram[]; +extern const char kMagicStackModuleEngagementAppBundlePromoIndexHistogram[]; extern const char kMagicStackModuleDisabledHistogram[]; extern const char kContentNotificationSnackbarEventHistogram[]; extern const char kIOSSafetyCheckMagicStackHiddenReason[];
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.mm index 88249f5..0777455 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_constants.mm
@@ -64,6 +64,8 @@ "IOS.MagicStack.Module.Click.SendTabPromo"; const char kMagicStackModuleEngagementTipsIndexHistogram[] = "IOS.MagicStack.Module.Click.Tips"; +const char kMagicStackModuleEngagementAppBundlePromoIndexHistogram[] = + "IOS.MagicStack.Module.Click.AppBundlePromo"; const char kMagicStackModuleDisabledHistogram[] = "IOS.MagicStack.Module.Disabled"; const char kContentNotificationSnackbarEventHistogram[] =
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_recorder.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_recorder.mm index 2793a242..d4b9d01 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_recorder.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_metrics_recorder.mm
@@ -105,8 +105,10 @@ kMaxModuleEngagementIndex); break; case ContentSuggestionsModuleType::kAppBundlePromo: - // TODO(crbug.com/441721282): Add metrics collection for the app bundle - // promo. + UMA_HISTOGRAM_EXACT_LINEAR( + kMagicStackModuleEngagementAppBundlePromoIndexHistogram, index, + kMaxModuleEngagementIndex); + break; case ContentSuggestionsModuleType::kPlaceholder: case ContentSuggestionsModuleType::kInvalid: break;
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller_audience.h b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller_audience.h index e61e461..ef01b38 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller_audience.h +++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller_audience.h
@@ -30,6 +30,9 @@ // Indicates that the user has tapped the given `tip`. - (void)didSelectTip:(segmentation_platform::TipIdentifier)tip; +// Indicates that the user has tapped the App Bundle promo. +- (void)didSelectAppBundlePromo; + @end #endif // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_CONTENT_SUGGESTIONS_VIEW_CONTROLLER_AUDIENCE_H_
diff --git a/ios/chrome/browser/flags/BUILD.gn b/ios/chrome/browser/flags/BUILD.gn index c77d467..48da4ac 100644 --- a/ios/chrome/browser/flags/BUILD.gn +++ b/ios/chrome/browser/flags/BUILD.gn
@@ -60,9 +60,11 @@ "//components/sharing_message", "//components/signin/core/browser", "//components/signin/ios/browser", + "//components/strike_database:features", "//components/strings:components_strings", "//components/supervised_user/core/common:features", "//components/sync/service", + "//components/sync_preferences:features", "//components/translate/core/browser", "//components/translate/core/common", "//components/unified_consent",
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 867be80..6e5e99e 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -79,11 +79,13 @@ #import "components/signin/core/browser/account_reconcilor.h" #import "components/signin/ios/browser/features.h" #import "components/signin/public/base/signin_switches.h" +#import "components/strike_database/strike_database_features.h" #import "components/strings/grit/components_strings.h" #import "components/supervised_user/core/common/features.h" #import "components/sync/base/command_line_switches.h" #import "components/sync/base/features.h" #import "components/sync/base/pref_names.h" +#import "components/sync_preferences/features.h" #import "components/translate/core/browser/translate_prefs.h" #import "components/translate/core/common/translate_util.h" #import "components/variations/net/variations_command_line.h" @@ -2728,7 +2730,7 @@ flag_descriptions::kDisableAutofillStrikeSystemName, flag_descriptions::kDisableAutofillStrikeSystemDescription, flags_ui::kOsIos, - FEATURE_VALUE_TYPE(autofill::features::kDisableAutofillStrikeSystem)}, + FEATURE_VALUE_TYPE(strike_database::features::kDisableStrikeSystem)}, {"ios-default-browser-promo-propensity-model", flag_descriptions::kDefaultBrowserPromoPropensityModelName, flag_descriptions::kDefaultBrowserPromoPropensityModelDescription, @@ -2922,6 +2924,12 @@ flag_descriptions::kAutofillBottomSheetNewBlurName, flag_descriptions::kAutofillBottomSheetNewBlurDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(kAutofillBottomSheetNewBlur)}, + {"enable-cross-device-pref-tracker", + flag_descriptions::kEnableCrossDevicePrefTrackerName, + flag_descriptions::kEnableCrossDevicePrefTrackerDescription, + flags_ui::kOsIos, + FEATURE_VALUE_TYPE( + sync_preferences::features::kEnableCrossDevicePrefTracker)}, }; bool SkipConditionalFeatureEntry(const flags_ui::FeatureEntry& entry) {
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 77e7cab..fc4d24c 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -574,6 +574,12 @@ "Enable the compromised password alert mutings in Password Manager to be " "respected in the app."; +const char kEnableCrossDevicePrefTrackerName[] = + "Enable Cross-Device Pref Tracker"; +const char kEnableCrossDevicePrefTrackerDescription[] = + "Enables the tracking and sharing of select non-syncing preference values " + "across a user's signed-in devices."; + const char kEnableDiscoverFeedDiscoFeedEndpointName[] = "Enable discover feed discofeed"; const char kEnableDiscoverFeedDiscoFeedEndpointDescription[] =
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index ac35558..4306546e 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -302,6 +302,9 @@ extern const char kEnableCompromisedPasswordsMutingName[]; extern const char kEnableCompromisedPasswordsMutingDescription[]; +extern const char kEnableCrossDevicePrefTrackerName[]; +extern const char kEnableCrossDevicePrefTrackerDescription[]; + extern const char kEnableFeedHeaderSettingsName[]; extern const char kEnableFeedHeaderSettingsDescription[];
diff --git a/ios/chrome/browser/ntp/search_engine_logo/mediator/search_engine_logo_mediator.mm b/ios/chrome/browser/ntp/search_engine_logo/mediator/search_engine_logo_mediator.mm index 1970dd7..abc508a 100644 --- a/ios/chrome/browser/ntp/search_engine_logo/mediator/search_engine_logo_mediator.mm +++ b/ios/chrome/browser/ntp/search_engine_logo/mediator/search_engine_logo_mediator.mm
@@ -389,6 +389,10 @@ - (void)logoDownloaded:(const search_provider_logos::Logo*)logo callbackReason: (search_provider_logos::LogoCallbackReason)callbackReason { + if (!_logoService) { + // The mediator was disconnected. + return; + } switch (callbackReason) { case search_provider_logos::LogoCallbackReason::DETERMINED: [self updateLogo:logo animate:YES];
diff --git a/ios/chrome/browser/profile/model/BUILD.gn b/ios/chrome/browser/profile/model/BUILD.gn index b152463..bae9fe0f 100644 --- a/ios/chrome/browser/profile/model/BUILD.gn +++ b/ios/chrome/browser/profile/model/BUILD.gn
@@ -209,6 +209,7 @@ "//ios/chrome/browser/promos_manager/model:factory", "//ios/chrome/browser/push_notification/model:profile_service_factory", "//ios/chrome/browser/reading_list/model", + "//ios/chrome/browser/regional_capabilities/model", "//ios/chrome/browser/safe_browsing/model", "//ios/chrome/browser/safe_browsing/model/tailored_security", "//ios/chrome/browser/safety_check/model:factory", @@ -216,6 +217,7 @@ "//ios/chrome/browser/saved_tab_groups/model:tab_group_service", "//ios/chrome/browser/screen_time/model:buildflags", "//ios/chrome/browser/script_blocking/model:factory", + "//ios/chrome/browser/search_engine_choice/model", "//ios/chrome/browser/search_engines/model", "//ios/chrome/browser/segmentation_platform/model", "//ios/chrome/browser/sessions/model", @@ -236,6 +238,7 @@ "//ios/chrome/browser/sync/model:data_type_store_service_factory", "//ios/chrome/browser/sync/model:device_info_sync_service_factory", "//ios/chrome/browser/sync/model:sync_invalidations_service_factory", + "//ios/chrome/browser/sync/model/prefs:cross_device_pref_tracker_factory", "//ios/chrome/browser/tab_switcher/model/inactive_tabs:model", "//ios/chrome/browser/tabs_search/model:model_factory", "//ios/chrome/browser/text_selection/model",
diff --git a/ios/chrome/browser/profile/model/DEPS b/ios/chrome/browser/profile/model/DEPS index effa1ff..d86143f 100644 --- a/ios/chrome/browser/profile/model/DEPS +++ b/ios/chrome/browser/profile/model/DEPS
@@ -69,11 +69,13 @@ "+ios/chrome/browser/promos_manager/model", "+ios/chrome/browser/push_notification/model", "+ios/chrome/browser/reading_list/model", + "+ios/chrome/browser/regional_capabilities/model", "+ios/chrome/browser/safe_browsing/model", "+ios/chrome/browser/safety_check/model", "+ios/chrome/browser/saved_tab_groups/model", "+ios/chrome/browser/screen_time/model", "+ios/chrome/browser/script_blocking/model", + "+ios/chrome/browser/search_engine_choice/model", "+ios/chrome/browser/search_engines/model", "+ios/chrome/browser/segmentation_platform/model", "+ios/chrome/browser/sessions/model", @@ -81,6 +83,7 @@ "+ios/chrome/browser/share_kit/model", "+ios/chrome/browser/sharing_message/model", "+ios/chrome/browser/sync/model", + "+ios/chrome/browser/sync/model/prefs", "+ios/chrome/browser/tab_switcher/model", "+ios/chrome/browser/tabs_search/model", "+ios/chrome/browser/text_selection/model",
diff --git a/ios/chrome/browser/profile/model/keyed_service_factories.mm b/ios/chrome/browser/profile/model/keyed_service_factories.mm index 3a039ddb..f4243d2 100644 --- a/ios/chrome/browser/profile/model/keyed_service_factories.mm +++ b/ios/chrome/browser/profile/model/keyed_service_factories.mm
@@ -120,6 +120,7 @@ #import "ios/chrome/browser/push_notification/model/push_notification_profile_service_factory.h" #import "ios/chrome/browser/reading_list/model/reading_list_download_service_factory.h" #import "ios/chrome/browser/reading_list/model/reading_list_model_factory.h" +#import "ios/chrome/browser/regional_capabilities/model/regional_capabilities_service_factory.h" #import "ios/chrome/browser/safe_browsing/model/chrome_enterprise_url_lookup_service_factory.h" #import "ios/chrome/browser/safe_browsing/model/chrome_password_protection_service_factory.h" #import "ios/chrome/browser/safe_browsing/model/hash_realtime_service_factory.h" @@ -135,6 +136,7 @@ #import "ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h" #import "ios/chrome/browser/screen_time/model/screen_time_buildflags.h" #import "ios/chrome/browser/script_blocking/model/script_blocking_rule_applier_service_factory.h" +#import "ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.h" #import "ios/chrome/browser/search_engines/model/search_engine_choice_service_factory.h" #import "ios/chrome/browser/search_engines/model/template_url_fetcher_factory.h" #import "ios/chrome/browser/search_engines/model/template_url_prepopulate_data_resolver_factory.h" @@ -169,6 +171,7 @@ #import "ios/chrome/browser/sync/model/data_type_store_service_factory.h" #import "ios/chrome/browser/sync/model/device_info_sync_service_factory.h" #import "ios/chrome/browser/sync/model/ios_user_event_service_factory.h" +#import "ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.h" #import "ios/chrome/browser/sync/model/send_tab_to_self_sync_service_factory.h" #import "ios/chrome/browser/sync/model/session_sync_service_factory.h" #import "ios/chrome/browser/sync/model/sync_invalidations_service_factory.h" @@ -246,8 +249,10 @@ ios::PasswordManagerLogRouterFactory::GetInstance(); ios::PlaceholderServiceFactory::GetInstance(); ios::ProviderStateServiceFactory::GetInstance(); + ios::RegionalCapabilitiesServiceFactory::GetInstance(); ios::SearchEngineChoiceServiceFactory::GetInstance(); ios::ShortcutsBackendFactory::GetInstance(); + ios::SearchEngineChoiceTriggeringServiceFactory::GetInstance(); ios::SigninErrorControllerFactory::GetInstance(); ios::TemplateURLFetcherFactory::GetInstance(); ios::TemplateURLPrepopulateDataResolverFactory::GetInstance(); @@ -280,6 +285,7 @@ ContentNotificationServiceFactory::GetInstance(); ContextualPanelModelServiceFactory::GetInstance(); CredentialsCleanerRunnerFactory::GetInstance(); + CrossDevicePrefTrackerFactory::GetInstance(); DataTypeStoreServiceFactory::GetInstance(); DeviceAuthenticatorProxyFactory::GetInstance(); DeviceInfoSyncServiceFactory::GetInstance();
diff --git a/ios/chrome/browser/profile/model/profile_manager_ios_impl.h b/ios/chrome/browser/profile/model/profile_manager_ios_impl.h index 9b743bd8..731378a9 100644 --- a/ios/chrome/browser/profile/model/profile_manager_ios_impl.h +++ b/ios/chrome/browser/profile/model/profile_manager_ios_impl.h
@@ -63,6 +63,7 @@ bool IsProfileMarkedForDeletion(std::string_view name) const override; void PurgeProfilesMarkedForDeletion(base::OnceClosure callback) override; ProfileAttributesStorageIOS* GetProfileAttributesStorage() override; + base::FilePath GetProfilePath(std::string_view name) override; // ProfileIOS::Delegate: void OnProfileCreationStarted(ProfileIOS* profile,
diff --git a/ios/chrome/browser/profile/model/profile_manager_ios_impl.mm b/ios/chrome/browser/profile/model/profile_manager_ios_impl.mm index 8c702b9..2b4a963 100644 --- a/ios/chrome/browser/profile/model/profile_manager_ios_impl.mm +++ b/ios/chrome/browser/profile/model/profile_manager_ios_impl.mm
@@ -372,6 +372,12 @@ return &profile_attributes_storage_; } +base::FilePath ProfileManagerIOSImpl::GetProfilePath(std::string_view name) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + CHECK(profile_attributes_storage_.HasProfileWithName(name)); + return profile_data_dir_.Append(name); +} + void ProfileManagerIOSImpl::OnProfileCreationStarted( ProfileIOS* profile, CreationMode creation_mode) {
diff --git a/ios/chrome/browser/profile/model/profile_manager_ios_impl_unittest.mm b/ios/chrome/browser/profile/model/profile_manager_ios_impl_unittest.mm index f40f3f8..3df27dd 100644 --- a/ios/chrome/browser/profile/model/profile_manager_ios_impl_unittest.mm +++ b/ios/chrome/browser/profile/model/profile_manager_ios_impl_unittest.mm
@@ -712,3 +712,23 @@ EXPECT_FALSE(profile_manager().HasProfileWithName(profile2)); EXPECT_TRUE(profile_manager().HasProfileWithName(profile3)); } + +// Tests that GetProfilePath() works for both loaded and non-loaded profiles. +TEST_F(ProfileManagerIOSImplTest, GetProfilePath) { + // Create a few profiles synchronously. + ScopedProfileKeepAliveIOS keep_alive1 = CreateProfile(kProfileName1); + ScopedProfileKeepAliveIOS keep_alive2 = CreateProfile(kProfileName2); + + keep_alive2.Reset(); + + ASSERT_TRUE(profile_manager().HasProfileWithName(kProfileName1)); + ASSERT_TRUE(profile_manager().HasProfileWithName(kProfileName2)); + + ASSERT_TRUE(profile_manager().GetProfileWithName(kProfileName1)); + ASSERT_FALSE(profile_manager().GetProfileWithName(kProfileName2)); + + EXPECT_EQ(base::FilePath::FromASCII(kProfileName1), + profile_manager().GetProfilePath(kProfileName1).BaseName()); + EXPECT_EQ(base::FilePath::FromASCII(kProfileName2), + profile_manager().GetProfilePath(kProfileName2).BaseName()); +}
diff --git a/ios/chrome/browser/search_engine_choice/model/BUILD.gn b/ios/chrome/browser/search_engine_choice/model/BUILD.gn index da893cd..4717128 100644 --- a/ios/chrome/browser/search_engine_choice/model/BUILD.gn +++ b/ios/chrome/browser/search_engine_choice/model/BUILD.gn
@@ -4,11 +4,17 @@ source_set("model") { sources = [ + "search_engine_choice_triggering_service.h", + "search_engine_choice_triggering_service.mm", + "search_engine_choice_triggering_service_factory.h", + "search_engine_choice_triggering_service_factory.mm", "search_engine_choice_util.h", "search_engine_choice_util.mm", ] deps = [ "//base", + "//components/keyed_service/core", + "//components/keyed_service/ios", "//components/search_engines", "//ios/chrome/app:tests_hook", "//ios/chrome/browser/policy/model", @@ -16,8 +22,10 @@ "//ios/chrome/browser/search_engines/model", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/profile", + "//ios/chrome/browser/shared/model/profile:profile_keyed_service_factory", "//ios/chrome/browser/shared/public/features:system_flags", "//ios/public/provider/chrome/browser/signin:choice_api", + "//ios/web/public", ] frameworks = [ "UIKit.framework" ] }
diff --git a/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.h b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.h new file mode 100644 index 0000000..cee9a586 --- /dev/null +++ b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.h
@@ -0,0 +1,55 @@ +// 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. + +#ifndef IOS_CHROME_BROWSER_SEARCH_ENGINE_CHOICE_MODEL_SEARCH_ENGINE_CHOICE_TRIGGERING_SERVICE_H_ +#define IOS_CHROME_BROWSER_SEARCH_ENGINE_CHOICE_MODEL_SEARCH_ENGINE_CHOICE_TRIGGERING_SERVICE_H_ + +#import "base/memory/raw_ref.h" +#import "components/keyed_service/core/keyed_service.h" + +namespace search_engines { +class SearchEngineChoiceService; +enum class SearchEngineChoiceScreenConditions; +} // namespace search_engines +namespace policy { +class PolicyService; +} +class TemplateURLService; +class PrefService; + +namespace ios { + +// Service that is responsible for running dynamic checks to see if the search +// engine choice screen should be shown. +// More or less equivalent to `SearchEngineChoiceDialogService` on desktop. +class SearchEngineChoiceTriggeringService : public KeyedService { + public: + SearchEngineChoiceTriggeringService( + PrefService& profile_prefs, + const policy::PolicyService& policy_service, + search_engines::SearchEngineChoiceService& search_engine_choice_service, + const TemplateURLService& template_url_service); + ~SearchEngineChoiceTriggeringService() override; + + SearchEngineChoiceTriggeringService( + const SearchEngineChoiceTriggeringService&) = delete; + SearchEngineChoiceTriggeringService& operator=( + const SearchEngineChoiceTriggeringService&) = delete; + + // Returns eligibility status for newly triggering a choice screen. + search_engines::SearchEngineChoiceScreenConditions + EvaluateTriggeringConditions(bool is_first_run_entrypoint, + bool app_started_via_external_intent); + + private: + const raw_ref<PrefService> profile_prefs_; + const raw_ref<const policy::PolicyService> policy_service_; + const raw_ref<search_engines::SearchEngineChoiceService> + search_engine_choice_service_; + const raw_ref<const TemplateURLService> template_url_service_; +}; + +} // namespace ios + +#endif // IOS_CHROME_BROWSER_SEARCH_ENGINE_CHOICE_MODEL_SEARCH_ENGINE_CHOICE_TRIGGERING_SERVICE_H_
diff --git a/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.mm b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.mm new file mode 100644 index 0000000..8be3726 --- /dev/null +++ b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.mm
@@ -0,0 +1,69 @@ +// 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. + +#import "ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.h" + +#import "components/policy/core/common/policy_service.h" +#import "components/prefs/pref_service.h" +#import "components/search_engines/search_engine_choice/search_engine_choice_service.h" +#import "components/search_engines/search_engines_pref_names.h" +#import "components/search_engines/template_url_service.h" +#import "ios/chrome/browser/search_engine_choice/model/search_engine_choice_util.h" +#import "ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_ui_util.h" +#import "ios/chrome/browser/shared/model/profile/profile_ios.h" + +namespace ios { + +SearchEngineChoiceTriggeringService::SearchEngineChoiceTriggeringService( + PrefService& profile_prefs, + const policy::PolicyService& policy_service, + search_engines::SearchEngineChoiceService& search_engine_choice_service, + const TemplateURLService& template_url_service) + : profile_prefs_(profile_prefs), + policy_service_(policy_service), + search_engine_choice_service_(search_engine_choice_service), + template_url_service_(template_url_service) {} + +SearchEngineChoiceTriggeringService::~SearchEngineChoiceTriggeringService() = + default; + +search_engines::SearchEngineChoiceScreenConditions +SearchEngineChoiceTriggeringService::EvaluateTriggeringConditions( + bool is_first_run_entrypoint, + bool app_started_via_external_intent) { + if (auto conditions = + search_engine_choice_service_->GetStaticChoiceScreenConditions( + policy_service_.get(), template_url_service_.get()); + conditions != + search_engines::SearchEngineChoiceScreenConditions::kEligible) { + return conditions; + } + + if (auto conditions = + search_engine_choice_service_->GetDynamicChoiceScreenConditions( + template_url_service_.get()); + conditions != + search_engines::SearchEngineChoiceScreenConditions::kEligible) { + return conditions; + } + + // If the app has been started via an external intent, skip the Dialog + // promo up to `kSearchEngineChoiceMaximumSkipCount` times. + if (app_started_via_external_intent && !is_first_run_entrypoint) { + const int count = profile_prefs_->GetInteger( + prefs::kDefaultSearchProviderChoiceScreenSkippedCount); + + if (count < kSearchEngineChoiceMaximumSkipCount) { + profile_prefs_->SetInteger( + prefs::kDefaultSearchProviderChoiceScreenSkippedCount, count + 1); + + return search_engines::SearchEngineChoiceScreenConditions:: + kAppStartedByExternalIntent; + } + } + + return search_engines::SearchEngineChoiceScreenConditions::kEligible; +} + +} // namespace ios
diff --git a/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.h b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.h new file mode 100644 index 0000000..237b2df --- /dev/null +++ b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.h
@@ -0,0 +1,38 @@ +// 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. + +#ifndef IOS_CHROME_BROWSER_SEARCH_ENGINE_CHOICE_MODEL_SEARCH_ENGINE_CHOICE_TRIGGERING_SERVICE_FACTORY_H_ +#define IOS_CHROME_BROWSER_SEARCH_ENGINE_CHOICE_MODEL_SEARCH_ENGINE_CHOICE_TRIGGERING_SERVICE_FACTORY_H_ + +#import "base/no_destructor.h" +#import "ios/chrome/browser/shared/model/profile/profile_keyed_service_factory_ios.h" + +class ProfileIOS; + +namespace ios { + +class SearchEngineChoiceTriggeringService; + +// Singleton that owns all SearchEngineChoiceTriggeringService and associates +// them with ChromeBrowserState. +class SearchEngineChoiceTriggeringServiceFactory + : public ProfileKeyedServiceFactoryIOS { + public: + static SearchEngineChoiceTriggeringServiceFactory* GetInstance(); + static SearchEngineChoiceTriggeringService* GetForProfile( + ProfileIOS* profile); + + private: + friend class base::NoDestructor<SearchEngineChoiceTriggeringServiceFactory>; + + SearchEngineChoiceTriggeringServiceFactory(); + ~SearchEngineChoiceTriggeringServiceFactory() override; + + // BrowserStateKeyedServiceFactory implementation. + std::unique_ptr<KeyedService> BuildServiceInstanceFor( + web::BrowserState* context) const override; +}; + +} // namespace ios +#endif // IOS_CHROME_BROWSER_SEARCH_ENGINE_CHOICE_MODEL_SEARCH_ENGINE_CHOICE_TRIGGERING_SERVICE_FACTORY_H_
diff --git a/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.mm b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.mm new file mode 100644 index 0000000..b56d89c --- /dev/null +++ b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.mm
@@ -0,0 +1,75 @@ +// 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. + +#import "ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.h" + +#import "base/check_deref.h" +#import "components/keyed_service/core/keyed_service.h" +#import "components/keyed_service/ios/browser_state_dependency_manager.h" +#import "components/prefs/pref_service.h" +#import "components/search_engines/search_engine_choice/search_engine_choice_service.h" +#import "components/search_engines/search_engine_choice/search_engine_choice_utils.h" +#import "ios/chrome/browser/policy/model/profile_policy_connector.h" +#import "ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.h" +#import "ios/chrome/browser/search_engines/model/search_engine_choice_service_factory.h" +#import "ios/chrome/browser/search_engines/model/template_url_service_factory.h" +#import "ios/chrome/browser/shared/model/profile/profile_ios.h" +#import "ios/web/public/browser_state.h" + +namespace ios { + +// static +SearchEngineChoiceTriggeringServiceFactory* +SearchEngineChoiceTriggeringServiceFactory::GetInstance() { + static base::NoDestructor<SearchEngineChoiceTriggeringServiceFactory> + instance; + return instance.get(); +} + +// static +SearchEngineChoiceTriggeringService* +SearchEngineChoiceTriggeringServiceFactory::GetForProfile(ProfileIOS* profile) { + return GetInstance() + ->GetServiceForProfileAs<SearchEngineChoiceTriggeringService>( + profile, + /*create=*/true); +} + +SearchEngineChoiceTriggeringServiceFactory:: + SearchEngineChoiceTriggeringServiceFactory() + : ProfileKeyedServiceFactoryIOS("SearchEngineChoiceTriggeringService", + ProfileSelection::kRedirectedInIncognito) { + DependsOn(ios::SearchEngineChoiceServiceFactory::GetInstance()); + DependsOn(ios::TemplateURLServiceFactory::GetInstance()); +} + +SearchEngineChoiceTriggeringServiceFactory:: + ~SearchEngineChoiceTriggeringServiceFactory() = default; + +std::unique_ptr<KeyedService> +SearchEngineChoiceTriggeringServiceFactory::BuildServiceInstanceFor( + web::BrowserState* context) const { + ProfileIOS* profile = ProfileIOS::FromBrowserState(context); + CHECK_EQ(profile, profile->GetOriginalProfile()); + + search_engines::SearchEngineChoiceService& search_engine_choice_service = + CHECK_DEREF( + ios::SearchEngineChoiceServiceFactory::GetForProfile(profile)); + const policy::PolicyService& policy_service = + CHECK_DEREF(profile->GetPolicyConnector()->GetPolicyService()); + const TemplateURLService& template_url_service = + CHECK_DEREF(ios::TemplateURLServiceFactory::GetForProfile(profile)); + auto condition = search_engine_choice_service.GetStaticChoiceScreenConditions( + policy_service, template_url_service); + if (condition != + search_engines::SearchEngineChoiceScreenConditions::kEligible) { + return nullptr; + } + + return std::make_unique<SearchEngineChoiceTriggeringService>( + CHECK_DEREF(profile->GetPrefs()), policy_service, + search_engine_choice_service, template_url_service); +} + +} // namespace ios
diff --git a/ios/chrome/browser/search_engine_choice/model/search_engine_choice_util.mm b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_util.mm index 6fe7a62..85c9019 100644 --- a/ios/chrome/browser/search_engine_choice/model/search_engine_choice_util.mm +++ b/ios/chrome/browser/search_engine_choice/model/search_engine_choice_util.mm
@@ -6,17 +6,14 @@ #import "base/check_deref.h" #import "base/command_line.h" -#import "components/prefs/pref_service.h" #import "components/search_engines/search_engine_choice/search_engine_choice_service.h" -#import "components/search_engines/search_engine_choice/search_engine_choice_utils.h" -#import "components/search_engines/search_engines_pref_names.h" #import "components/search_engines/search_engines_switches.h" #import "ios/chrome/app/tests_hook.h" #import "ios/chrome/browser/policy/model/profile_policy_connector.h" -#import "ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_ui_util.h" +#import "ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service.h" +#import "ios/chrome/browser/search_engine_choice/model/search_engine_choice_triggering_service_factory.h" #import "ios/chrome/browser/search_engines/model/search_engine_choice_service_factory.h" #import "ios/chrome/browser/search_engines/model/template_url_service_factory.h" -#import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/public/provider/chrome/browser/signin/choice_api.h" @@ -50,41 +47,31 @@ return false; } ProfileIOS* original_profile = profile.GetOriginalProfile(); - // Getting data needed to check condition. search_engines::SearchEngineChoiceService* search_engine_choice_service = ios::SearchEngineChoiceServiceFactory::GetForProfile(original_profile); - ProfilePolicyConnector* policy_connector = - original_profile->GetPolicyConnector(); - const policy::PolicyService& policy_service = - *policy_connector->GetPolicyService(); - TemplateURLService* template_url_service = - ios::TemplateURLServiceFactory::GetForProfile(original_profile); + ios::SearchEngineChoiceTriggeringService* triggering_service = + ios::SearchEngineChoiceTriggeringServiceFactory::GetForProfile(&profile); - // Checking whether the user is eligible for the screen. - auto condition = - search_engine_choice_service->GetStaticChoiceScreenConditions( - policy_service, CHECK_DEREF(template_url_service)); - if (condition == - search_engines::SearchEngineChoiceScreenConditions::kEligible) { - condition = search_engine_choice_service->GetDynamicChoiceScreenConditions( - *template_url_service); - } - - // If the app has been started via an external intent, skip the Dialog - // promo up to kSearchEngineChoiceMaximumSkipCount times. - if (app_started_via_external_intent && !is_first_run_entrypoint && - condition == - search_engines::SearchEngineChoiceScreenConditions::kEligible) { - PrefService* pref_service = original_profile->GetPrefs(); - const int count = pref_service->GetInteger( - prefs::kDefaultSearchProviderChoiceScreenSkippedCount); - - if (count < kSearchEngineChoiceMaximumSkipCount) { - pref_service->SetInteger( - prefs::kDefaultSearchProviderChoiceScreenSkippedCount, count + 1); - + search_engines::SearchEngineChoiceScreenConditions condition; + if (triggering_service) { + condition = triggering_service->EvaluateTriggeringConditions( + is_first_run_entrypoint, app_started_via_external_intent); + } else { + // TODO(crbug.com/438717568): This branch is added only to record the legacy + // histograms. Investigate whether we need to keep it, or if we're fine with + // updating the record timing of these old histogram. + const policy::PolicyService& policy_service = + *original_profile->GetPolicyConnector()->GetPolicyService(); + TemplateURLService* template_url_service = + ios::TemplateURLServiceFactory::GetForProfile(original_profile); + condition = search_engine_choice_service->GetStaticChoiceScreenConditions( + policy_service, CHECK_DEREF(template_url_service)); + if (condition == + search_engines::SearchEngineChoiceScreenConditions::kEligible) { + // If we didn't get a `triggering_service`, the search engine should not + // be eligible for choice screens either. condition = search_engines::SearchEngineChoiceScreenConditions:: - kAppStartedByExternalIntent; + kUnsupportedBrowserType; } }
diff --git a/ios/chrome/browser/sessions/model/BUILD.gn b/ios/chrome/browser/sessions/model/BUILD.gn index 8ef6ee9..3ecd88ec 100644 --- a/ios/chrome/browser/sessions/model/BUILD.gn +++ b/ios/chrome/browser/sessions/model/BUILD.gn
@@ -243,6 +243,7 @@ "//base", "//ios/chrome/browser/shared/model/profile", "//ios/chrome/browser/shared/model/web_state_list", + "//ios/chrome/browser/tabs/model:features", "//ios/web/public", "//ios/web/public/session", "//ios/web/public/session/proto",
diff --git a/ios/chrome/browser/sessions/model/legacy_session_restoration_service.h b/ios/chrome/browser/sessions/model/legacy_session_restoration_service.h index ffee865..bbc22d0 100644 --- a/ios/chrome/browser/sessions/model/legacy_session_restoration_service.h +++ b/ios/chrome/browser/sessions/model/legacy_session_restoration_service.h
@@ -12,10 +12,12 @@ #include "base/files/file_path.h" #include "base/observer_list.h" +#include "base/scoped_multi_source_observation.h" #include "base/sequence_checker.h" #include "ios/chrome/browser/sessions/model/session_restoration_observer.h" #include "ios/chrome/browser/sessions/model/session_restoration_service.h" #include "ios/chrome/browser/shared/model/web_state_list/web_state_list_observer.h" +#include "ios/web/public/web_state_observer.h" @class SessionServiceIOS; @class WebSessionStateCache; @@ -27,7 +29,8 @@ // TODO(crbug.com/40245950): Remove when the feature is fully launched. class LegacySessionRestorationService final : public SessionRestorationService, public SessionRestorationObserver, - public WebStateListObserver { + public WebStateListObserver, + public web::WebStateObserver { public: LegacySessionRestorationService( bool enable_pinned_tabs, @@ -76,9 +79,17 @@ const WebStateListChange& change, const WebStateListStatus& status) final; + // web::WebStateObserver implementation. + void WebStateRealized(web::WebState* web_state) final; + void WebStateDestroyed(web::WebState* web_state) final; + private: SEQUENCE_CHECKER(sequence_checker_); + // Invoked when a WebState is inserted/removed from a WebStateList. + void WebStateInserted(web::WebState* web_state); + void WebStateDetached(web::WebState* web_state); + // Observer list. base::ObserverList<SessionRestorationObserver, true> observers_; @@ -102,6 +113,10 @@ // Bi-directional mapping of observed Browser and their backup. std::map<Browser*, Browser*> browsers_to_backup_; std::map<Browser*, Browser*> backups_to_browser_; + + // Used to observe unrealized WebStates. + base::ScopedMultiSourceObservation<web::WebState, web::WebStateObserver> + web_state_observations_{this}; }; #endif // IOS_CHROME_BROWSER_SESSIONS_MODEL_LEGACY_SESSION_RESTORATION_SERVICE_H_
diff --git a/ios/chrome/browser/sessions/model/legacy_session_restoration_service.mm b/ios/chrome/browser/sessions/model/legacy_session_restoration_service.mm index af4db0fc..d4fdbff 100644 --- a/ios/chrome/browser/sessions/model/legacy_session_restoration_service.mm +++ b/ios/chrome/browser/sessions/model/legacy_session_restoration_service.mm
@@ -14,6 +14,7 @@ #import "ios/chrome/browser/sessions/model/web_session_state_tab_helper.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" +#import "ios/chrome/browser/tabs/model/features.h" #import "ios/web/public/session/crw_session_storage.h" #import "ios/web/public/session/proto/storage.pb.h" #import "ios/web/public/web_state.h" @@ -206,6 +207,16 @@ // Destroy the SessionRestorationBrowserAgent for browser. SessionRestorationBrowserAgent::RemoveFromBrowser(browser); + // Stop observing the WebStates for realization is needed. + if (CreateTabHelperOnlyForRealizedWebStates()) { + WebStateList* list = browser->GetWebStateList(); + const int list_count = list->count(); + for (int index = 0; index < list_count; ++index) { + web::WebState* web_state = list->GetWebStateAt(index); + WebStateDetached(web_state); + } + } + browser->GetWebStateList()->RemoveObserver(this); } @@ -310,15 +321,20 @@ switch (change.type()) { case WebStateListChange::Type::kInsert: { const auto& typed_change = change.As<WebStateListChangeInsert>(); - WebSessionStateTabHelper::CreateForWebState( - typed_change.inserted_web_state()); + WebStateInserted(typed_change.inserted_web_state()); break; } case WebStateListChange::Type::kReplace: { const auto& typed_change = change.As<WebStateListChangeReplace>(); - WebSessionStateTabHelper::CreateForWebState( - typed_change.inserted_web_state()); + WebStateInserted(typed_change.inserted_web_state()); + WebStateDetached(typed_change.replaced_web_state()); + break; + } + + case WebStateListChange::Type::kDetach: { + const auto& typed_change = change.As<WebStateListChangeDetach>(); + WebStateDetached(typed_change.detached_web_state()); break; } @@ -326,3 +342,44 @@ break; } } + +void LegacySessionRestorationService::WebStateRealized( + web::WebState* web_state) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + CHECK(CreateTabHelperOnlyForRealizedWebStates()); + web_state_observations_.RemoveObservation(web_state); + WebStateInserted(web_state); +} + +void LegacySessionRestorationService::WebStateDestroyed( + web::WebState* web_state) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + CHECK(CreateTabHelperOnlyForRealizedWebStates()); + web_state_observations_.RemoveObservation(web_state); +} + +void LegacySessionRestorationService::WebStateInserted( + web::WebState* web_state) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (CreateTabHelperOnlyForRealizedWebStates()) { + if (!web_state->IsRealized()) { + web_state_observations_.AddObservation(web_state); + return; + } + } + + WebSessionStateTabHelper::CreateForWebState(web_state); +} + +void LegacySessionRestorationService::WebStateDetached( + web::WebState* web_state) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (CreateTabHelperOnlyForRealizedWebStates()) { + if (!web_state->IsRealized()) { + web_state_observations_.RemoveObservation(web_state); + return; + } + } + + // Nothing to do. +}
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm index 7358d92..05639ac 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm
@@ -1734,7 +1734,13 @@ // storing just about enough passwords to ensure filling more than one page on // any device. To limit the effect of (2), custom large scrolling steps are // added to the usual scrolling actions. -- (void)testManyPasswords { +// TODO(crbug.com/442382530): Re-enable this test once it has been fixed. +#if !TARGET_OS_SIMULATOR +#define MAYBE_testManyPasswords FLAKY_testManyPasswords +#else +#define MAYBE_testManyPasswords testManyPasswords +#endif +- (void)MAYBE_testManyPasswords { // Enough just to ensure filling more than one page on all devices. constexpr int kPasswordsCount = 15;
diff --git a/ios/chrome/browser/shared/model/profile/profile_manager_ios.h b/ios/chrome/browser/shared/model/profile/profile_manager_ios.h index d514a9d..dbe2b44 100644 --- a/ios/chrome/browser/shared/model/profile/profile_manager_ios.h +++ b/ios/chrome/browser/shared/model/profile/profile_manager_ios.h
@@ -115,6 +115,10 @@ // Returns the ProfileAttributesStorageIOS associated with this manager. virtual ProfileAttributesStorageIOS* GetProfileAttributesStorage() = 0; + // Returns the path to a given profile's data on disk. It is an error to call + // this method for a non-existent profile. + virtual base::FilePath GetProfilePath(std::string_view name) = 0; + protected: ProfileManagerIOS() {}
diff --git a/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.h b/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.h index 8aa010a1..fe0bde86 100644 --- a/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.h +++ b/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.h
@@ -50,6 +50,7 @@ bool IsProfileMarkedForDeletion(std::string_view name) const override; void PurgeProfilesMarkedForDeletion(base::OnceClosure callback) override; ProfileAttributesStorageIOS* GetProfileAttributesStorage() override; + base::FilePath GetProfilePath(std::string_view name) override; // Builds and adds a TestProfileIOS using `builder`. Asserts that no Profile // share the same name. Returns a pointer to the new object.
diff --git a/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.mm b/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.mm index 4f8d75ce..54ddff36 100644 --- a/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.mm +++ b/ios/chrome/browser/shared/model/profile/test/test_profile_manager_ios.mm
@@ -164,6 +164,11 @@ return &profile_attributes_storage_; } +base::FilePath TestProfileManagerIOS::GetProfilePath(std::string_view name) { + CHECK(profile_attributes_storage_.HasProfileWithName(name)); + return profile_data_dir_.Append(name); +} + TestProfileIOS* TestProfileManagerIOS::AddProfileWithBuilder( TestProfileIOS::Builder builder) { const std::string profile_name = builder.GetEffectiveName();
diff --git a/ios/chrome/browser/signin/model/account_profile_mapper_unittest.mm b/ios/chrome/browser/signin/model/account_profile_mapper_unittest.mm index ff5a469f..adb3b13e 100644 --- a/ios/chrome/browser/signin/model/account_profile_mapper_unittest.mm +++ b/ios/chrome/browser/signin/model/account_profile_mapper_unittest.mm
@@ -298,6 +298,10 @@ return &profile_attributes_storage_; } + base::FilePath GetProfilePath(std::string_view name) override { + NOTREACHED(); + } + private: ScopedProfileKeepAliveIOS CreateScopedProfileKeepAlive(ProfileIOS* profile) { return ScopedProfileKeepAliveIOS(CreatePassKey(), profile, {});
diff --git a/ios/chrome/browser/sync/model/prefs/BUILD.gn b/ios/chrome/browser/sync/model/prefs/BUILD.gn index ca3cafe..a45012c 100644 --- a/ios/chrome/browser/sync/model/prefs/BUILD.gn +++ b/ios/chrome/browser/sync/model/prefs/BUILD.gn
@@ -2,6 +2,25 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +source_set("cross_device_pref_tracker_factory") { + sources = [ + "cross_device_pref_tracker_factory.h", + "cross_device_pref_tracker_factory.mm", + ] + public_deps = [ + "//base", + "//ios/chrome/browser/shared/model/profile:profile_keyed_service_factory", + ] + deps = [ + "//components/keyed_service/core", + "//components/sync_preferences:cross_device_pref_tracker", + "//components/sync_preferences:features", + "//ios/chrome/browser/shared/model/application_context", + "//ios/chrome/browser/shared/model/profile", + "//ios/chrome/browser/sync/model:device_info_sync_service_factory", + ] +} + source_set("prefs") { sources = [ "ios_chrome_syncable_prefs_database.cc",
diff --git a/ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.h b/ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.h new file mode 100644 index 0000000..b8d967b --- /dev/null +++ b/ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.h
@@ -0,0 +1,52 @@ +// 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. + +#ifndef IOS_CHROME_BROWSER_SYNC_MODEL_PREFS_CROSS_DEVICE_PREF_TRACKER_FACTORY_H_ +#define IOS_CHROME_BROWSER_SYNC_MODEL_PREFS_CROSS_DEVICE_PREF_TRACKER_FACTORY_H_ + +#import <memory> + +#import "base/no_destructor.h" +#import "ios/chrome/browser/shared/model/profile/profile_keyed_service_factory_ios.h" + +class KeyedService; +class ProfileIOS; + +namespace web { +class BrowserState; +} // namespace web + +namespace sync_preferences { +class CrossDevicePrefTracker; +} // namespace sync_preferences + +// Singleton factory that creates and manages one `CrossDevicePrefTracker` +// instance per `ProfileIOS`. The `CrossDevicePrefTracker` is responsible for +// observing and sharing select non-syncing preference values across a user's +// devices. +class CrossDevicePrefTrackerFactory : public ProfileKeyedServiceFactoryIOS { + public: + static CrossDevicePrefTrackerFactory* GetInstance(); + + // Returns the `CrossDevicePrefTracker` associated with `profile`. + // If no instance exists, one will be created. + static sync_preferences::CrossDevicePrefTracker* GetForProfile( + ProfileIOS* profile); + + CrossDevicePrefTrackerFactory(const CrossDevicePrefTrackerFactory&) = delete; + CrossDevicePrefTrackerFactory& operator=( + const CrossDevicePrefTrackerFactory&) = delete; + + private: + friend class base::NoDestructor<CrossDevicePrefTrackerFactory>; + + CrossDevicePrefTrackerFactory(); + ~CrossDevicePrefTrackerFactory() override; + + // `BrowserStateKeyedServiceFactory` implementation. + std::unique_ptr<KeyedService> BuildServiceInstanceFor( + web::BrowserState* context) const override; +}; + +#endif // IOS_CHROME_BROWSER_SYNC_MODEL_PREFS_CROSS_DEVICE_PREF_TRACKER_FACTORY_H_
diff --git a/ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.mm b/ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.mm new file mode 100644 index 0000000..153e29d --- /dev/null +++ b/ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.mm
@@ -0,0 +1,58 @@ +// 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. + +#import "ios/chrome/browser/sync/model/prefs/cross_device_pref_tracker_factory.h" + +#import "base/check.h" +#import "base/feature_list.h" +#import "components/keyed_service/core/keyed_service.h" +#import "components/sync_preferences/cross_device_pref_tracker.h" +#import "components/sync_preferences/cross_device_pref_tracker_impl.h" +#import "components/sync_preferences/features.h" +#import "ios/chrome/browser/shared/model/application_context/application_context.h" +#import "ios/chrome/browser/shared/model/profile/profile_ios.h" +#import "ios/chrome/browser/sync/model/device_info_sync_service_factory.h" + +// static +sync_preferences::CrossDevicePrefTracker* +CrossDevicePrefTrackerFactory::GetForProfile(ProfileIOS* profile) { + // The factory configuration ensures this is only called for the original + // profile. + CHECK(!profile->IsOffTheRecord()); + + return GetInstance() + ->GetServiceForProfileAs<sync_preferences::CrossDevicePrefTracker>( + profile, /*create=*/true); +} + +// static +CrossDevicePrefTrackerFactory* CrossDevicePrefTrackerFactory::GetInstance() { + static base::NoDestructor<CrossDevicePrefTrackerFactory> instance; + return instance.get(); +} + +CrossDevicePrefTrackerFactory::CrossDevicePrefTrackerFactory() + : ProfileKeyedServiceFactoryIOS("CrossDevicePrefTracker", + ServiceCreation::kCreateWithProfile, + TestingCreation::kNoServiceForTests) { + DependsOn(DeviceInfoSyncServiceFactory::GetInstance()); +} + +CrossDevicePrefTrackerFactory::~CrossDevicePrefTrackerFactory() = default; + +std::unique_ptr<KeyedService> +CrossDevicePrefTrackerFactory::BuildServiceInstanceFor( + web::BrowserState* context) const { + if (!base::FeatureList::IsEnabled( + sync_preferences::features::kEnableCrossDevicePrefTracker)) { + return nullptr; + } + + ProfileIOS* profile = ProfileIOS::FromBrowserState(context); + + // The implementation in `components/sync_preferences` is platform-agnostic. + return std::make_unique<sync_preferences::CrossDevicePrefTrackerImpl>( + profile->GetPrefs(), GetApplicationContext()->GetLocalState(), + DeviceInfoSyncServiceFactory::GetForProfile(profile)); +}
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm index df0b066..d91592c 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm
@@ -1348,7 +1348,7 @@ _searchText = searchText; searchBar.searchTextField.accessibilityIdentifier = [kTabGridSearchTextFieldIdentifierPrefix - stringByAppendingString:searchText]; + stringByAppendingString:searchText ?: @""]; [self updateScrimVisibilityForText:searchText]; switch (self.currentPage) { case TabGridPageIncognitoTabs:
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm index 8d27646..fee1dec 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm
@@ -966,7 +966,8 @@ } // Ensures new tab is added when moving the last tab of a shared group. -- (void)testMoveLastTabInSharedGroup { +// TODO(crbug.com/442448866): Re-enable this test. +- (void)FLAKY_testMoveLastTabInSharedGroup { // Create 2 groups, one shared and one local. [ChromeEarlGreyUI openNewTab]; [ChromeEarlGrey loadURL:GetQueryTitleURL(self.testServer, kTab2Title)];
diff --git a/ios/chrome/browser/variations/model/variations_safe_mode_seedfile_egtest.mm b/ios/chrome/browser/variations/model/variations_safe_mode_seedfile_egtest.mm index 416145c2..c204126 100644 --- a/ios/chrome/browser/variations/model/variations_safe_mode_seedfile_egtest.mm +++ b/ios/chrome/browser/variations/model/variations_safe_mode_seedfile_egtest.mm
@@ -44,7 +44,7 @@ config.additional_args = {"--disable-field-trial-config", "--disable-variations-seed-fetch", "--force-fieldtrials=SeedFileTrial/SeedFiles_V7", - "--fake-variations-channel=stable"}; + "--fake-variations-channel=dev"}; return config; } @@ -62,7 +62,7 @@ config.additional_args = {"--disable-field-trial-config", "--disable-variations-seed-fetch", "--force-fieldtrials=SeedFileTrial/SeedFiles_V7", - "--fake-variations-channel=stable"}; + "--fake-variations-channel=dev"}; return config; }
diff --git a/ios/chrome/browser/youtube_incognito/coordinator/youtube_incognito_coordinator.mm b/ios/chrome/browser/youtube_incognito/coordinator/youtube_incognito_coordinator.mm index f591a1b..d03b1341 100644 --- a/ios/chrome/browser/youtube_incognito/coordinator/youtube_incognito_coordinator.mm +++ b/ios/chrome/browser/youtube_incognito/coordinator/youtube_incognito_coordinator.mm
@@ -132,8 +132,8 @@ // Presents the YoutubeIncognitoCoordinator's view controller. - (void)presentViewController { _viewController = [[YoutubeIncognitoSheet alloc] init]; - _viewController.delegate = self; _viewController.URLLoaderDelegate = self; + _viewController.delegate = self; _viewController.sheetPresentationController.detents = @[ [UISheetPresentationControllerDetent mediumDetent], [UISheetPresentationControllerDetent largeDetent]
diff --git a/ios/chrome/browser/youtube_incognito/ui/BUILD.gn b/ios/chrome/browser/youtube_incognito/ui/BUILD.gn index bf80901a..26c0365 100644 --- a/ios/chrome/browser/youtube_incognito/ui/BUILD.gn +++ b/ios/chrome/browser/youtube_incognito/ui/BUILD.gn
@@ -11,9 +11,13 @@ "youtube_incognito_sheet_delegate.h", ] deps = [ + "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/ntp/ui_bundled", "//ios/chrome/browser/ntp/ui_bundled/incognito", + "//ios/chrome/browser/ntp/ui_bundled/incognito:util", "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/common:string_util", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/confirmation_alert", "//ios/chrome/common/ui/util",
diff --git a/ios/chrome/browser/youtube_incognito/ui/DEPS b/ios/chrome/browser/youtube_incognito/ui/DEPS index 9001004..61809af 100644 --- a/ios/chrome/browser/youtube_incognito/ui/DEPS +++ b/ios/chrome/browser/youtube_incognito/ui/DEPS
@@ -1,3 +1,4 @@ include_rules = [ - "+ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.h", + "+ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view_util.h", + "+ios/chrome/browser/ntp/ui_bundled/new_tab_page_url_loader_delegate.h", ]
diff --git a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.h b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.h index 7404746..e8551fc 100644 --- a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.h +++ b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.h
@@ -5,16 +5,14 @@ #ifndef IOS_CHROME_BROWSER_YOUTUBE_INCOGNITO_UI_YOUTUBE_INCOGNITO_SHEET_H_ #define IOS_CHROME_BROWSER_YOUTUBE_INCOGNITO_UI_YOUTUBE_INCOGNITO_SHEET_H_ -#import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_action_handler.h" -#import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h" +#import <UIKit/UIKit.h> @protocol YoutubeIncognitoSheetDelegate; @protocol NewTabPageURLLoaderDelegate; -// A `ConfirmationAlertViewController` for the Youtube Incognito interstitial, -// to be managed by the associated `YoutubeIncognitoCoordinator`. -@interface YoutubeIncognitoSheet - : ConfirmationAlertViewController <ConfirmationAlertActionHandler> +// A `view controller for the Youtube Incognito interstitial, to be managed by +// the associated `YoutubeIncognitoCoordinator`. +@interface YoutubeIncognitoSheet : UIViewController // The delegate for interactions in this View Controller. @property(nonatomic, weak) id<YoutubeIncognitoSheetDelegate> delegate; @@ -23,8 +21,6 @@ @property(nonatomic, weak) id<NewTabPageURLLoaderDelegate> URLLoaderDelegate; - (instancetype)init NS_DESIGNATED_INITIALIZER; - -- (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE; - (instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE; - (instancetype)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm index cd663d19..df0ecb1 100644 --- a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm +++ b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm
@@ -6,10 +6,16 @@ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.h" +#import "base/ios/ns_range.h" +#import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view_util.h" +#import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_url_loader_delegate.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet_delegate.h" +#import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/common/ui/util/button_util.h" +#import "ios/chrome/common/ui/util/chrome_button.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" @@ -17,7 +23,6 @@ namespace { -CGFloat const kUnderTitleViewHeightPadding = 50; CGFloat const kVerticalSpacing = 20; CGFloat const kTitleContainerCornerRadius = 15; CGFloat const kTitleContainerTopPadding = 33; @@ -30,6 +35,57 @@ CGFloat const kAnimationScalFactor = 0.5; CGFloat const kHalfSheetCornerRadius = 20; CGFloat const kHalfSheetFullHeightProportion = 0.9; +CGFloat const kIncognitoStackWidthOffset = 32.0; +CGFloat const kHorizontalPadding = 20.0; +CGFloat const kButtonHeight = 50; + +NSString* const kPrimaryActionAccessibilityIdentifier = + @"PrimaryActionAccessibilityIdentifier"; + +NSString* const kTitleAccessibilityIdentifier = @"TitleAccessibilityIdentifier"; + +// Helpers copied from IncognitoView.mm +// TODO(crbug.com/442531250): Merge the common utils between +// `YoutubeIncognitoSheet` and `IncognitoView`. +UIFont* BodyFont() { + return [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; +} + +UIFont* BoldBodyFont() { + UIFontDescriptor* baseDescriptor = [UIFontDescriptor + preferredFontDescriptorWithTextStyle:UIFontTextStyleSubheadline]; + UIFontDescriptor* styleDescriptor = [baseDescriptor + fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold]; + return [UIFont fontWithDescriptor:styleDescriptor size:0.0]; +} + +NSAttributedString* FormatHTMLListForUILabel(NSString* listString) { + listString = [listString stringByReplacingOccurrencesOfString:@"<ul>" + withString:@""]; + listString = [listString stringByReplacingOccurrencesOfString:@"</ul>" + withString:@""]; + listString = [listString + stringByReplacingOccurrencesOfString:@"\n *<li>" + withString:@"\n\u2022 " + options:NSRegularExpressionSearch + range:NSMakeRange(0, [listString length])]; + listString = [listString + stringByTrimmingCharactersInSet:[NSCharacterSet + whitespaceAndNewlineCharacterSet]]; + const StringWithTag parsedString = + ParseStringWithTag(listString, @"<em>", @"</em>"); + NSMutableAttributedString* attributedText = + [[NSMutableAttributedString alloc] initWithString:parsedString.string]; + [attributedText addAttribute:NSFontAttributeName + value:BodyFont() + range:NSMakeRange(0, attributedText.length)]; + if (parsedString.range.location != NSNotFound) { + [attributedText addAttribute:NSFontAttributeName + value:BoldBodyFont() + range:parsedString.range]; + } + return attributedText; +} } // namespace @@ -38,61 +94,142 @@ } - (instancetype)init { - self = [super init]; - return self; + return [super initWithNibName:nil bundle:nil]; } - (void)viewDidLoad { - self.actionHandler = self; - self.topAlignedLayout = YES; - self.showDismissBarButton = NO; + [super viewDidLoad]; self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; - self.aboveTitleView = [self animatedTitleView]; + self.view.backgroundColor = [UIColor systemBackgroundColor]; - self.titleString = - l10n_util::GetNSString(IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE); - self.primaryActionString = l10n_util::GetNSString( - IDS_IOS_YOUTUBE_INCOGNITO_SHEET_PRIMARY_BUTTON_TITLE); + UIScrollView* scrollView = [[UIScrollView alloc] init]; + scrollView.translatesAutoresizingMaskIntoConstraints = NO; + [self.view addSubview:scrollView]; - self.titleTextStyle = UIFontTextStyleTitle3; - self.scrollEnabled = YES; - self.customSpacing = kVerticalSpacing; - [self displayGradientView:YES]; + UIStackView* mainStackView = [[UIStackView alloc] init]; + mainStackView.axis = UILayoutConstraintAxisVertical; + mainStackView.spacing = kVerticalSpacing; + mainStackView.alignment = UIStackViewAlignmentCenter; + mainStackView.translatesAutoresizingMaskIntoConstraints = NO; + [scrollView addSubview:mainStackView]; - UIView* underTitleView = [[UIView alloc] init]; - underTitleView.translatesAutoresizingMaskIntoConstraints = NO; + UIView* animatedTitleView = [self animatedTitleView]; + [mainStackView addArrangedSubview:animatedTitleView]; - IncognitoView* incognitoView = - [[IncognitoView alloc] initWithFrame:CGRectZero - showTopIncognitoImageAndTitle:NO - stackViewHorizontalMargin:0 - stackViewMaxWidth:CGFLOAT_MAX]; - incognitoView.bounces = NO; - incognitoView.URLLoaderDelegate = self.URLLoaderDelegate; - incognitoView.showsHorizontalScrollIndicator = NO; - incognitoView.translatesAutoresizingMaskIntoConstraints = NO; - [underTitleView addSubview:incognitoView]; + UILabel* titleLabel = [self createTitleLabel]; + [mainStackView addArrangedSubview:titleLabel]; + [mainStackView setCustomSpacing:kVerticalSpacing afterView:titleLabel]; - self.underTitleView = underTitleView; + // Manually recreated IncognitoView content + UIStackView* incognitoContentStackView = [[UIStackView alloc] init]; + incognitoContentStackView.axis = UILayoutConstraintAxisVertical; + incognitoContentStackView.spacing = kVerticalSpacing; + incognitoContentStackView.alignment = UIStackViewAlignmentLeading; + [mainStackView addArrangedSubview:incognitoContentStackView]; + + UIColor* bodyTextColor = [UIColor colorNamed:kTextSecondaryColor]; + UIColor* linkTextColor = [UIColor colorNamed:kBlueColor]; + + UILabel* subtitleLabel = [[UILabel alloc] init]; + subtitleLabel.font = BodyFont(); + subtitleLabel.textColor = bodyTextColor; + subtitleLabel.numberOfLines = 0; + subtitleLabel.text = + l10n_util::GetNSString(IDS_NEW_TAB_OTR_SUBTITLE_WITH_READING_LIST); + subtitleLabel.adjustsFontForContentSizeCategory = YES; + + UIButton* learnMoreButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [learnMoreButton + setTitle:l10n_util::GetNSString(IDS_NEW_TAB_OTR_LEARN_MORE_LINK) + forState:UIControlStateNormal]; + [learnMoreButton setTitleColor:linkTextColor forState:UIControlStateNormal]; + learnMoreButton.titleLabel.font = BodyFont(); + learnMoreButton.titleLabel.adjustsFontForContentSizeCategory = YES; + [learnMoreButton addTarget:self + action:@selector(learnMoreButtonPressed) + forControlEvents:UIControlEventTouchUpInside]; + + UIStackView* subtitleStackView = [[UIStackView alloc] + initWithArrangedSubviews:@[ subtitleLabel, learnMoreButton ]]; + subtitleStackView.axis = UILayoutConstraintAxisVertical; + subtitleStackView.spacing = 0; + subtitleStackView.alignment = UIStackViewAlignmentLeading; + [incognitoContentStackView addArrangedSubview:subtitleStackView]; + + NSAttributedString* notSavedText = FormatHTMLListForUILabel( + l10n_util::GetNSString(IDS_NEW_TAB_OTR_NOT_SAVED)); + UILabel* notSavedLabel = [[UILabel alloc] init]; + notSavedLabel.numberOfLines = 0; + notSavedLabel.attributedText = notSavedText; + notSavedLabel.textColor = bodyTextColor; + [incognitoContentStackView addArrangedSubview:notSavedLabel]; + + NSAttributedString* visibleDataText = + FormatHTMLListForUILabel(l10n_util::GetNSString(IDS_NEW_TAB_OTR_VISIBLE)); + UILabel* visibleDataLabel = [[UILabel alloc] init]; + visibleDataLabel.numberOfLines = 0; + visibleDataLabel.attributedText = visibleDataText; + visibleDataLabel.textColor = bodyTextColor; + [incognitoContentStackView addArrangedSubview:visibleDataLabel]; + // End of recreated content + + UIButton* primaryButton = [self createPrimaryActionButton]; + + [self.view addSubview:primaryButton]; + + UIUserInterfaceIdiom idiom = [[UIDevice currentDevice] userInterfaceIdiom]; + + // Only apply a width offset if the device is Ipad. + CGFloat incognitoStackWidthOffset = + (idiom == UIUserInterfaceIdiomPad) ? kIncognitoStackWidthOffset : 0; + [NSLayoutConstraint activateConstraints:@[ - [underTitleView.heightAnchor - constraintEqualToAnchor:incognitoView.contentLayoutGuide.heightAnchor - constant:-kUnderTitleViewHeightPadding], - [incognitoView.heightAnchor - constraintEqualToAnchor:incognitoView.contentLayoutGuide.heightAnchor], - [incognitoView.centerYAnchor - constraintEqualToAnchor:underTitleView.centerYAnchor], - [incognitoView.centerXAnchor - constraintEqualToAnchor:underTitleView.centerXAnchor], - [incognitoView.widthAnchor - constraintEqualToAnchor:underTitleView.widthAnchor], + [scrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor], + [scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [scrollView.trailingAnchor + constraintEqualToAnchor:self.view.trailingAnchor], + [scrollView.bottomAnchor constraintEqualToAnchor:primaryButton.topAnchor + constant:-kVerticalSpacing], + + [mainStackView.topAnchor + constraintEqualToAnchor:scrollView.contentLayoutGuide.topAnchor], + [mainStackView.bottomAnchor + constraintEqualToAnchor:scrollView.contentLayoutGuide.bottomAnchor], + [mainStackView.leadingAnchor + constraintEqualToAnchor:scrollView.frameLayoutGuide.leadingAnchor + constant:kHorizontalPadding], + [mainStackView.trailingAnchor + constraintEqualToAnchor:scrollView.frameLayoutGuide.trailingAnchor + constant:-kHorizontalPadding], + + [incognitoContentStackView.widthAnchor + constraintEqualToAnchor:mainStackView.widthAnchor + constant:-incognitoStackWidthOffset], + + [primaryButton.leadingAnchor + constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor + constant:kHorizontalPadding], + [primaryButton.trailingAnchor + constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor + constant:-kHorizontalPadding], + [primaryButton.bottomAnchor + constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor + constant:-kVerticalSpacing], + [primaryButton.heightAnchor constraintEqualToConstant:kButtonHeight] ]]; - [super viewDidLoad]; [self setUpBottomSheetPresentationController]; [self setUpBottomSheetDetents]; } +- (void)primaryButtonTapped { + [self.delegate didTapPrimaryActionButton]; +} + +- (void)learnMoreButtonPressed { + [self.URLLoaderDelegate loadURLInTab:GetLearnMoreIncognitoUrl()]; +} + - (void)viewDidAppear:(BOOL)animated { __weak __typeof(self) weakSelf = self; [super viewDidAppear:animated]; @@ -105,20 +242,6 @@ completion:nil]; } -- (void)customizeSubtitle:(UITextView*)subtitle { - subtitle.textAlignment = NSTextAlignmentNatural; - subtitle.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; -} - -#pragma mark - ConfirmationAlertActionHandler - -- (void)confirmationAlertPrimaryAction { - // `Got it` button was clicked. - [self.delegate didTapPrimaryActionButton]; -} - -#pragma mark - Private - // Configures the bottom sheet's presentation controller appearance. - (void)setUpBottomSheetPresentationController { self.modalPresentationStyle = UIModalPresentationFormSheet; @@ -206,4 +329,39 @@ CGAffineTransformMakeTranslation(translationX, translationY)); } +- (ChromeButton*)createPrimaryActionButton { + ChromeButton* primaryActionButton = PrimaryActionButton(); + [primaryActionButton addTarget:self + action:@selector(primaryButtonTapped) + forControlEvents:UIControlEventTouchUpInside]; + SetConfigurationTitle( + primaryActionButton, + l10n_util::GetNSString( + IDS_IOS_YOUTUBE_INCOGNITO_SHEET_PRIMARY_BUTTON_TITLE)); + primaryActionButton.accessibilityIdentifier = + kPrimaryActionAccessibilityIdentifier; + + return primaryActionButton; +} + +- (UILabel*)createTitleLabel { + UILabel* title = [[UILabel alloc] init]; + title.numberOfLines = 0; + UIFontDescriptor* descriptor = [UIFontDescriptor + preferredFontDescriptorWithTextStyle:UIFontTextStyleTitle3]; + UIFont* font = [UIFont systemFontOfSize:descriptor.pointSize + weight:UIFontWeightBold]; + UIFontMetrics* fontMetrics = + [UIFontMetrics metricsForTextStyle:UIFontTextStyleTitle3]; + title.font = [fontMetrics scaledFontForFont:font]; + title.textColor = [UIColor colorNamed:kTextPrimaryColor]; + title.text = l10n_util::GetNSString(IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE); + title.textAlignment = NSTextAlignmentCenter; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.adjustsFontForContentSizeCategory = YES; + title.accessibilityIdentifier = kTitleAccessibilityIdentifier; + title.accessibilityTraits = UIAccessibilityTraitHeader; + return title; +} + @end
diff --git a/ios_internal b/ios_internal index 3feaf40..6842118 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit 3feaf40d64066b385cb8b00b672e1aafe6d83978 +Subproject commit 684211821a75efa2da3fad3310385a55308a3da6
diff --git a/media/audio/apple/glitch_helper.cc b/media/audio/apple/glitch_helper.cc index f115809..8205038 100644 --- a/media/audio/apple/glitch_helper.cc +++ b/media/audio/apple/glitch_helper.cc
@@ -47,7 +47,13 @@ return; } - if (last_sample_time_) { + // mSampleTime can get reset, e.g. if the sample rate is changed on the + // speaker in the macOS settings, while capturing loopback. If the current + // mSampleTime is lower than the last sample time, we know it was reset + // and skip the glitch calculation. The current mSampleTime will still be + // saved, so we can restart the glitch calculations on the next call to + // `OnFramesReceived()`. + if (last_sample_time_ && timestamp.mSampleTime > last_sample_time_) { DCHECK_NE(0U, last_number_of_frames_); UInt32 sample_time_diff = static_cast<UInt32>(timestamp.mSampleTime - last_sample_time_);
diff --git a/remoting/host/desktop_resizer_win.cc b/remoting/host/desktop_resizer_win.cc index db4f5723..5cffca9 100644 --- a/remoting/host/desktop_resizer_win.cc +++ b/remoting/host/desktop_resizer_win.cc
@@ -256,12 +256,10 @@ bool DesktopResizerWin::GetPrimaryDisplayMode(DWORD mode_number, DWORD flags, DEVMODE* mode) { - UNSAFE_TODO(memset(mode, 0, sizeof(DEVMODE))); - mode->dmSize = sizeof(DEVMODE); - if (!EnumDisplaySettingsEx(nullptr, mode_number, mode, flags)) { - return false; - } - return true; + *mode = { + .dmSize = sizeof(DEVMODE), + }; + return EnumDisplaySettingsEx(nullptr, mode_number, mode, flags); } // static
diff --git a/remoting/protocol/validating_authenticator_unittest.cc b/remoting/protocol/validating_authenticator_unittest.cc index 836f69f..9bb3689e 100644 --- a/remoting/protocol/validating_authenticator_unittest.cc +++ b/remoting/protocol/validating_authenticator_unittest.cc
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "remoting/protocol/validating_authenticator.h" + #include <memory> #include <string> #include <tuple> @@ -12,11 +14,11 @@ #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/run_loop.h" +#include "base/test/gmock_callback_support.h" #include "base/test/mock_callback.h" #include "base/test/task_environment.h" #include "remoting/protocol/authenticator.h" #include "remoting/protocol/protocol_mock_objects.h" -#include "remoting/protocol/validating_authenticator.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/libjingle_xmpp/xmllite/xmlelement.h" @@ -28,30 +30,21 @@ using testing::_; using testing::Return; -typedef ValidatingAuthenticator::Result ValidationResult; +using ValidationResult = ValidatingAuthenticator::Result; constexpr char kRemoteTestJid[] = "ficticious_jid_for_testing"; -// testing::InvokeArgument<N> does not work with base::OnceCallback, fortunately -// gmock makes it simple to create action templates that do for the various -// possible numbers of arguments. -ACTION_TEMPLATE(InvokeCallbackArgument, - HAS_1_TEMPLATE_PARAMS(int, k), - AND_0_VALUE_PARAMS()) { - std::move(const_cast<base::OnceClosure&>(std::get<k>(args))).Run(); -} - } // namespace class ValidatingAuthenticatorTest : public testing::Test { public: - ValidatingAuthenticatorTest(); + ValidatingAuthenticatorTest() = default; ValidatingAuthenticatorTest(const ValidatingAuthenticatorTest&) = delete; ValidatingAuthenticatorTest& operator=(const ValidatingAuthenticatorTest&) = delete; - ~ValidatingAuthenticatorTest() override; + ~ValidatingAuthenticatorTest() override = default; void ValidateCallback(const std::string& remote_jid, ValidatingAuthenticator::ResultCallback callback); @@ -85,10 +78,6 @@ base::test::SingleThreadTaskEnvironment task_environment_; }; -ValidatingAuthenticatorTest::ValidatingAuthenticatorTest() = default; - -ValidatingAuthenticatorTest::~ValidatingAuthenticatorTest() = default; - void ValidatingAuthenticatorTest::ValidateCallback( const std::string& remote_jid, ValidatingAuthenticator::ResultCallback callback) { @@ -118,8 +107,7 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnection_SingleMessage) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::ACCEPTED)); @@ -134,7 +122,7 @@ // like it is waiting for a second message. EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) .Times(2) - .WillRepeatedly(InvokeCallbackArgument<1>()); + .WillRepeatedly(base::test::RunOnceCallbackRepeatedly<1>()); EXPECT_CALL(*mock_authenticator_, state()) .WillRepeatedly(Return(Authenticator::MESSAGE_READY)); @@ -153,7 +141,6 @@ std::unique_ptr<jingle_xmpp::XmlElement> next_message( Authenticator::CreateEmptyAuthenticatorMessage()); EXPECT_CALL(*mock_authenticator_, GetNextMessagePtr()) - .Times(1) .WillOnce(Return(next_message.release())); validating_authenticator_->GetNextMessage(); @@ -172,8 +159,7 @@ // This test simulates an authenticator which needs to send a message before // transitioning to the ACCEPTED state. EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillRepeatedly(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); EXPECT_CALL(*mock_authenticator_, state()) .WillOnce(Return(Authenticator::MESSAGE_READY)) @@ -185,7 +171,6 @@ std::unique_ptr<jingle_xmpp::XmlElement> next_message( Authenticator::CreateEmptyAuthenticatorMessage()); EXPECT_CALL(*mock_authenticator_, GetNextMessagePtr()) - .Times(1) .WillOnce(Return(next_message.release())); SendMessageAndWaitForCallback(); @@ -199,8 +184,7 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnection_ErrorInvalidCredentials) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::ACCEPTED)); @@ -216,8 +200,7 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnection_ErrorRejectedByUser) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::ACCEPTED)); @@ -234,8 +217,7 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnectionMessageWaiting_ErrorRejectedByUser) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); EXPECT_CALL(*mock_authenticator_, state()) .WillOnce(Return(Authenticator::MESSAGE_READY)) @@ -260,8 +242,7 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnection_ErrorTooManyConnections) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::ACCEPTED)); @@ -277,8 +258,7 @@ TEST_F(ValidatingAuthenticatorTest, InvalidConnection_InvalidCredentials) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::REJECTED)); @@ -297,8 +277,7 @@ TEST_F(ValidatingAuthenticatorTest, InvalidConnection_InvalidAccount) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::REJECTED)); @@ -317,8 +296,7 @@ TEST_F(ValidatingAuthenticatorTest, InvalidConnection_InvalidState) { EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .Times(1) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::REJECTED)); @@ -339,7 +317,7 @@ validating_authenticator_->set_state_change_after_accepted_callback( state_changed_after_accepted.Get()); EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) - .WillOnce(InvokeCallbackArgument<1>()); + .WillOnce(base::test::RunOnceCallback<1>()); ON_CALL(*mock_authenticator_, state()) .WillByDefault(Return(Authenticator::ACCEPTED));
diff --git a/services/viz/public/cpp/gpu/context_provider_command_buffer.cc b/services/viz/public/cpp/gpu/context_provider_command_buffer.cc index 5c1e7ed..8a1ed9c 100644 --- a/services/viz/public/cpp/gpu/context_provider_command_buffer.cc +++ b/services/viz/public/cpp/gpu/context_provider_command_buffer.cc
@@ -258,7 +258,6 @@ // gpu::ContextSupport interface. auto gles2_impl = std::make_unique<gpu::gles2::GLES2Implementation>( gles2_helper.get(), /*share_group=*/nullptr, transfer_buffer.get(), - /*bind_generates_resource=*/false, attributes_.lose_context_when_out_of_memory, command_buffer_.get()); bind_result_ = gles2_impl->Initialize(memory_limits_); if (bind_result_ != gpu::ContextResult::kSuccess) {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 55485ba..c0688a0 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -10791,24 +10791,6 @@ ] } ], - "FeedHeaderRemoval": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledWithNoHeader", - "params": { - "treatment": "none" - }, - "enable_features": [ - "FeedHeaderRemoval" - ] - } - ] - } - ], "FeedLoadingPlaceholder": [ { "platforms": [ @@ -26856,21 +26838,6 @@ ] } ], - "WebFeedDeprecation": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebFeedKillSwitch" - ] - } - ] - } - ], "WebGPU": [ { "platforms": [
diff --git a/third_party/androidx/build.gradle b/third_party/androidx/build.gradle index ff59e04a..d855140 100644 --- a/third_party/androidx/build.gradle +++ b/third_party/androidx/build.gradle
@@ -310,7 +310,7 @@ google() maven { // This URL is generated by the fetch_all_androidx.py script. - url 'https://androidx.dev/snapshots/builds/14028295/artifacts/repository' + url 'https://androidx.dev/snapshots/builds/14030484/artifacts/repository' } mavenCentral() }
diff --git a/third_party/angle b/third_party/angle index d82a582..2d28e33 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit d82a5821d42ff564e2e45f69ad99bcb997f5ef4e +Subproject commit 2d28e33f7a654e8e0553c13bac09fa688b6c1acb
diff --git a/third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom b/third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom index 0defc810..437d65c 100644 --- a/third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom +++ b/third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom
@@ -50,15 +50,6 @@ int32? receive_buffer_size; network.mojom.DnsQueryType? dns_query_type; - - // Controls how far your multicast packets can travel across a network. - // If value is not specified, 1 will be used. - uint8? multicast_time_to_live; - - // Sets whether multicast packets sent from the host to - // the multicast group will be looped back to the host. - // If value is not specified, true will be used. - bool? multicast_loopback; }; struct DirectBoundUDPSocketOptions { @@ -79,20 +70,6 @@ // IPv4/IPv6 connections. Leaving this value unset results in platform default // being applied (|true| on Windows, |false| on Posix). bool? ipv6_only; - - // Allows reusing port and address for multicast sockets. - // SO_REUSEADDR / SO_REUSEPORT in unix. - // If value is not specified, false will be used. - bool? multicast_allow_address_sharing; - - // Controls how far your multicast packets can travel across a network. - // If value is not specified, 1 will be used. - uint8? multicast_time_to_live; - - // Sets whether multicast packets sent from the host to - // the multicast group will be looped back to the host. - // If value is not specified, true will be used. - bool? multicast_loopback; }; struct DirectTCPServerSocketOptions {
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom index c1ee0c11..78a548d 100644 --- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom +++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -4962,6 +4962,7 @@ kV8WasmCustomDescriptors = 5651, kSRIIntegrityAttributeOnInlineScript = 5652, kCredentialsGetImmediateMediationWithPasswordsOnly = 5653, + kCSSAtRuleRoute = 5654, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots. Also don't add extra
diff --git a/third_party/blink/renderer/DEPS b/third_party/blink/renderer/DEPS index 5c82f95..122cdc8 100644 --- a/third_party/blink/renderer/DEPS +++ b/third_party/blink/renderer/DEPS
@@ -15,6 +15,8 @@ "+base/containers/contains.h", "+base/containers/cxx20_erase.h", "+base/containers/enum_set.h", + "+base/containers/fixed_flat_map.h", + "+base/containers/fixed_flat_set.h", "+base/containers/heap_array.h", "+base/containers/lru_cache.h", "+base/containers/span.h",
diff --git a/third_party/blink/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni index a908e15..15cf0298 100644 --- a/third_party/blink/renderer/bindings/generated_in_core.gni +++ b/third_party/blink/renderer/bindings/generated_in_core.gni
@@ -882,6 +882,8 @@ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_rgb.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_rotate.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_rotate.h", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_route_rule.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_route_rule.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_rule.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_rule.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_rule_list.cc",
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni index acfbbcdb..81570df 100644 --- a/third_party/blink/renderer/bindings/generated_in_modules.gni +++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -3393,8 +3393,6 @@ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_tcp_socket.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_udp_socket.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_udp_socket.h", - "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_multicast_controller.cc", - "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_multicast_controller.h", ] generated_enumeration_sources_in_modules += [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_socket_dns_query_type.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_core.gni b/third_party/blink/renderer/bindings/idl_in_core.gni index 2d7b1e6..9ce0137 100644 --- a/third_party/blink/renderer/bindings/idl_in_core.gni +++ b/third_party/blink/renderer/bindings/idl_in_core.gni
@@ -62,6 +62,7 @@ "//third_party/blink/renderer/core/css/css_position_try_descriptors.idl", "//third_party/blink/renderer/core/css/css_position_try_rule.idl", "//third_party/blink/renderer/core/css/css_property_rule.idl", + "//third_party/blink/renderer/core/css/css_route_rule.idl", "//third_party/blink/renderer/core/css/css_rule.idl", "//third_party/blink/renderer/core/css/css_rule_list.idl", "//third_party/blink/renderer/core/css/css_scope_rule.idl",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni index 6681097..f989217e 100644 --- a/third_party/blink/renderer/bindings/idl_in_modules.gni +++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -1294,7 +1294,6 @@ "//third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl", "//third_party/blink/renderer/modules/direct_sockets/udp_message.idl", "//third_party/blink/renderer/modules/direct_sockets/udp_socket.idl", - "//third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl", ] }
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc index 7dbb455..1c2fcec5 100644 --- a/third_party/blink/renderer/core/animation/animation.cc +++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -86,6 +86,7 @@ #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" #include "third_party/blink/renderer/platform/scheduler/public/event_loop.h" #include "third_party/blink/renderer/platform/wtf/math_extras.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -787,8 +788,9 @@ DCHECK_EQ(V8AnimationPlayState::Enum::kRunning, CalculateAnimationPlayState()); - TRACE_EVENT_NESTABLE_ASYNC_INSTANT1( - AnimationTraceCategories(), "Animation", this, "data", + TRACE_EVENT_INSTANT( + AnimationTraceCategories(), "Animation", + perfetto::Track::FromPointer(this), "data", [&](perfetto::TracedValue context) { inspector_animation_compositor_event::Data( std::move(context), failure_reasons, @@ -3384,23 +3386,25 @@ new_play_state == V8AnimationPlayState::Enum::kRunning; if (!was_active && is_active) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - AnimationTraceCategories(), "Animation", this, "data", - [&](perfetto::TracedValue context) { - inspector_animation_event::Data(std::move(context), *this); - }); + TRACE_EVENT_BEGIN(AnimationTraceCategories(), "Animation", + perfetto::Track::FromPointer(this), "data", + [&](perfetto::TracedValue context) { + inspector_animation_event::Data(std::move(context), + *this); + }); } else if (was_active && !is_active) { - TRACE_EVENT_NESTABLE_ASYNC_END1( - AnimationTraceCategories(), "Animation", this, "endData", - [&](perfetto::TracedValue context) { + TRACE_EVENT_END( + AnimationTraceCategories(), perfetto::Track::FromPointer(this), + "endData", [&](perfetto::TracedValue context) { inspector_animation_state_event::Data(std::move(context), *this); }); } else { - TRACE_EVENT_NESTABLE_ASYNC_INSTANT1( - AnimationTraceCategories(), "Animation", this, "data", - [&](perfetto::TracedValue context) { - inspector_animation_state_event::Data(std::move(context), *this); - }); + TRACE_EVENT_INSTANT(AnimationTraceCategories(), "Animation", + perfetto::Track::FromPointer(this), "data", + [&](perfetto::TracedValue context) { + inspector_animation_state_event::Data( + std::move(context), *this); + }); } } }
diff --git a/third_party/blink/renderer/core/css/DEPS b/third_party/blink/renderer/core/css/DEPS index 10d88aeb..1bf345b 100644 --- a/third_party/blink/renderer/core/css/DEPS +++ b/third_party/blink/renderer/core/css/DEPS
@@ -1,5 +1,4 @@ include_rules = [ - "+base/containers/fixed_flat_map.h", "+base/cpu.h", "+ui/base/mojom/window_show_state.mojom-blink.h", "+ui/base/mojom/window_show_state.mojom-blink-forward.h",
diff --git a/third_party/blink/renderer/core/css/build.gni b/third_party/blink/renderer/core/css/build.gni index 86f262a..ae986c5 100644 --- a/third_party/blink/renderer/core/css/build.gni +++ b/third_party/blink/renderer/core/css/build.gni
@@ -290,6 +290,8 @@ "css_revert_rule_value.h", "css_revert_value.cc", "css_revert_value.h", + "css_route_rule.cc", + "css_route_rule.h", "css_rule.cc", "css_rule.h", "css_rule_list.h",
diff --git a/third_party/blink/renderer/core/css/css_grouping_rule.h b/third_party/blink/renderer/core/css/css_grouping_rule.h index ecaec88..1b7d783 100644 --- a/third_party/blink/renderer/core/css/css_grouping_rule.h +++ b/third_party/blink/renderer/core/css/css_grouping_rule.h
@@ -136,6 +136,7 @@ case CSSRule::kLayerBlockRule: case CSSRule::kMixinRule: case CSSRule::kPageRule: + case CSSRule::kRouteRule: case CSSRule::kScopeRule: case CSSRule::kStartingStyleRule: return true;
diff --git a/third_party/blink/renderer/core/css/css_route_rule.cc b/third_party/blink/renderer/core/css/css_route_rule.cc new file mode 100644 index 0000000..ce91770 --- /dev/null +++ b/third_party/blink/renderer/core/css/css_route_rule.cc
@@ -0,0 +1,32 @@ +// 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. + +#include "third_party/blink/renderer/core/css/css_route_rule.h" + +#include "third_party/blink/renderer/core/css/style_rule.h" + +namespace blink { + +CSSRouteRule::CSSRouteRule(StyleRuleRoute* route_rule, CSSStyleSheet* parent) + : CSSConditionRule(route_rule, parent), route_rule_(route_rule) {} + +CSSRouteRule::~CSSRouteRule() = default; + +String CSSRouteRule::cssText() const { + // TODO(crbug.com/436805487): Implement this. + NOTREACHED() << "Not yet implemented."; +} + +void CSSRouteRule::Reattach(StyleRuleBase* rule) { + DCHECK(rule); + route_rule_ = To<StyleRuleRoute>(rule); + CSSConditionRule::Reattach(rule); +} + +void CSSRouteRule::Trace(Visitor* visitor) const { + visitor->Trace(route_rule_); + CSSConditionRule::Trace(visitor); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/css/css_route_rule.h b/third_party/blink/renderer/core/css/css_route_rule.h new file mode 100644 index 0000000..b1cd62b --- /dev/null +++ b/third_party/blink/renderer/core/css/css_route_rule.h
@@ -0,0 +1,44 @@ +// 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. + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_ROUTE_RULE_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_ROUTE_RULE_H_ + +#include "third_party/blink/renderer/core/css/css_condition_rule.h" +#include "third_party/blink/renderer/platform/heap/member.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" + +namespace blink { + +class CSSStyleSheet; +class StyleRuleRoute; + +class CORE_EXPORT CSSRouteRule final : public CSSConditionRule { + DEFINE_WRAPPERTYPEINFO(); + + public: + CSSRouteRule(StyleRuleRoute*, CSSStyleSheet*); + ~CSSRouteRule() override; + + String cssText() const override; + void Reattach(StyleRuleBase*) override; + + void Trace(Visitor*) const override; + + private: + CSSRule::Type GetType() const override { return kRouteRule; } + + Member<StyleRuleRoute> route_rule_; +}; + +template <> +struct DowncastTraits<CSSRouteRule> { + static bool AllowFrom(const CSSRule& rule) { + return rule.GetType() == CSSRule::kRouteRule; + } +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_ROUTE_RULE_H_
diff --git a/third_party/blink/renderer/core/css/css_route_rule.idl b/third_party/blink/renderer/core/css/css_route_rule.idl new file mode 100644 index 0000000..fc18fb1 --- /dev/null +++ b/third_party/blink/renderer/core/css/css_route_rule.idl
@@ -0,0 +1,8 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// TODO(crbug.com/436805487): Link to spec, once it surfaces. + +[Exposed=Window, RuntimeEnabled=RouteMatching] +interface CSSRouteRule : CSSConditionRule {};
diff --git a/third_party/blink/renderer/core/css/css_rule.h b/third_party/blink/renderer/core/css/css_rule.h index a1c4117..1cfadcc 100644 --- a/third_party/blink/renderer/core/css/css_rule.h +++ b/third_party/blink/renderer/core/css/css_rule.h
@@ -86,6 +86,7 @@ kNestedDeclarationsRule, kPositionTryRule, kPropertyRule, + kRouteRule, kScopeRule, kStartingStyleRule, kViewTransitionRule,
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.cc b/third_party/blink/renderer/core/css/media_query_evaluator.cc index c95fc0e..8634b6b 100644 --- a/third_party/blink/renderer/core/css/media_query_evaluator.cc +++ b/third_party/blink/renderer/core/css/media_query_evaluator.cc
@@ -137,6 +137,13 @@ visitor->Trace(media_values_); } +const Document* MediaQueryEvaluator::GetDocument() const { + if (!media_values_) { + return nullptr; + } + return media_values_->GetDocument(); +} + const String MediaQueryEvaluator::MediaType() const { // If a static mediaType was given by the constructor, we use it here. if (!media_type_.empty()) {
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.h b/third_party/blink/renderer/core/css/media_query_evaluator.h index e0bdbeb1..8bad8862 100644 --- a/third_party/blink/renderer/core/css/media_query_evaluator.h +++ b/third_party/blink/renderer/core/css/media_query_evaluator.h
@@ -39,6 +39,7 @@ namespace blink { class CSSValue; +class Document; class LocalFrame; class MediaQuery; class MediaQueryExpNode; @@ -85,6 +86,8 @@ const MediaValues& GetMediaValues() const { return *media_values_; } + const Document* GetDocument() const; + bool MediaTypeMatch(const String& media_type_to_match) const; // Evaluates a list of media queries.
diff --git a/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc b/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc index e84398a..050b7df 100644 --- a/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc +++ b/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc
@@ -296,6 +296,7 @@ case StyleRule::kMedia: case StyleRule::kPage: case StyleRule::kPageMargin: + case StyleRule::kRoute: case StyleRule::kKeyframes: case StyleRule::kKeyframe: case StyleRule::kFontFeatureValues:
diff --git a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc index 9b7694cf..e5f1c0f4 100644 --- a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc +++ b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc
@@ -71,6 +71,9 @@ if (EqualIgnoringASCIICase(name, "property")) { return CSSAtRuleID::kCSSAtRuleProperty; } + if (EqualIgnoringASCIICase(name, "route")) { + return CSSAtRuleID::kCSSAtRuleRoute; + } if (EqualIgnoringASCIICase(name, "container")) { return CSSAtRuleID::kCSSAtRuleContainer; } @@ -191,6 +194,8 @@ return "@position-try"; case CSSAtRuleID::kCSSAtRuleProperty: return "@property"; + case CSSAtRuleID::kCSSAtRuleRoute: + return "@route"; case CSSAtRuleID::kCSSAtRuleContainer: return "@container"; case CSSAtRuleID::kCSSAtRuleCounterStyle: @@ -314,6 +319,8 @@ return WebFeature::kCSSAtRulePageMargin; case CSSAtRuleID::kCSSAtRuleProperty: return WebFeature::kCSSAtRuleProperty; + case CSSAtRuleID::kCSSAtRuleRoute: + return WebFeature::kCSSAtRuleRoute; case CSSAtRuleID::kCSSAtRuleContainer: return WebFeature::kCSSAtRuleContainer; case CSSAtRuleID::kCSSAtRuleCounterStyle:
diff --git a/third_party/blink/renderer/core/css/parser/css_at_rule_id.h b/third_party/blink/renderer/core/css/parser/css_at_rule_id.h index d630fbe..ac9892ce 100644 --- a/third_party/blink/renderer/core/css/parser/css_at_rule_id.h +++ b/third_party/blink/renderer/core/css/parser/css_at_rule_id.h
@@ -25,6 +25,7 @@ kCSSAtRulePage, kCSSAtRulePositionTry, kCSSAtRuleProperty, + kCSSAtRuleRoute, kCSSAtRuleContainer, kCSSAtRuleCounterStyle, kCSSAtRuleScope,
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc index 91ff67f..1fd11d7 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc +++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
@@ -898,6 +898,8 @@ return ConsumePageRule(stream); case CSSAtRuleID::kCSSAtRuleProperty: return ConsumePropertyRule(stream); + case CSSAtRuleID::kCSSAtRuleRoute: + return ConsumeRouteRule(stream, nesting_type, parent_rule_for_nesting); case CSSAtRuleID::kCSSAtRuleScope: return ConsumeScopeRule(stream, nesting_type, parent_rule_for_nesting); case CSSAtRuleID::kCSSAtRuleCounterStyle: @@ -1891,6 +1893,40 @@ return rule; } +StyleRuleRoute* CSSParserImpl::ConsumeRouteRule( + CSSParserTokenStream& stream, + CSSNestingType nesting_type, + StyleRule* parent_rule_for_nesting) { + // Parse the prelude. + wtf_size_t prelude_offset_start = stream.LookAheadOffset(); + const CSSParserToken& name_token = stream.Peek(); + String name = name_token.Value().ToString(); + stream.ConsumeIncludingWhitespace(); + wtf_size_t prelude_offset_end = stream.LookAheadOffset(); + if (!ConsumeEndOfPreludeForAtRuleWithBlock(stream, + CSSAtRuleID::kCSSAtRuleRoute)) { + return nullptr; + } + + // Parse the body. + CSSParserTokenStream::BlockGuard guard(stream); + if (observer_) { + observer_->StartRuleHeader(StyleRule::kRoute, prelude_offset_start); + observer_->EndRuleHeader(prelude_offset_end); + observer_->StartRuleBody(stream.Offset()); + } + + HeapVector<Member<StyleRuleBase>, 4> rules; + ConsumeRuleListOrNestedDeclarationList(stream, nesting_type, + parent_rule_for_nesting, &rules); + + if (observer_) { + observer_->EndRuleBody(stream.Offset()); + } + + return MakeGarbageCollected<StyleRuleRoute>(name, std::move(rules)); +} + StyleRuleCounterStyle* CSSParserImpl::ConsumeCounterStyleRule( CSSParserTokenStream& stream) { // Parse the prelude.
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.h b/third_party/blink/renderer/core/css/parser/css_parser_impl.h index 2b8639d..a78df3c 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_impl.h +++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.h
@@ -48,6 +48,7 @@ class StyleRulePage; class StyleRulePositionTry; class StyleRuleProperty; +class StyleRuleRoute; class StyleRuleSupports; class StyleSheetContents; class Element; @@ -80,6 +81,7 @@ CSSAtRuleID::kCSSAtRulePage, CSSAtRuleID::kCSSAtRulePositionTry, CSSAtRuleID::kCSSAtRuleProperty, + CSSAtRuleID::kCSSAtRuleRoute, CSSAtRuleID::kCSSAtRuleContainer, CSSAtRuleID::kCSSAtRuleCounterStyle, CSSAtRuleID::kCSSAtRuleScope, @@ -143,6 +145,7 @@ CSSAtRuleID::kCSSAtRuleMedia, CSSAtRuleID::kCSSAtRuleSupports, CSSAtRuleID::kCSSAtRuleContainer, + CSSAtRuleID::kCSSAtRuleRoute, }; // Rules that are valid when nested within a style rule. @@ -314,6 +317,9 @@ CSSParserTokenStream&); StyleRulePage* ConsumePageRule(CSSParserTokenStream&); StyleRuleProperty* ConsumePropertyRule(CSSParserTokenStream&); + StyleRuleRoute* ConsumeRouteRule(CSSParserTokenStream&, + CSSNestingType, + StyleRule* parent_rule_for_nesting); StyleRuleCounterStyle* ConsumeCounterStyleRule(CSSParserTokenStream&); StyleRuleBase* ConsumeScopeRule(CSSParserTokenStream&, CSSNestingType,
diff --git a/third_party/blink/renderer/core/css/parser/css_supports_parser.cc b/third_party/blink/renderer/core/css/parser/css_supports_parser.cc index 90c7d82..f25123c0 100644 --- a/third_party/blink/renderer/core/css/parser/css_supports_parser.cc +++ b/third_party/blink/renderer/core/css/parser/css_supports_parser.cc
@@ -259,6 +259,9 @@ case CSSAtRuleID::kCSSAtRuleProperty: rule_type = StyleRule::kProperty; break; + case CSSAtRuleID::kCSSAtRuleRoute: + rule_type = StyleRule::kRoute; + break; case CSSAtRuleID::kCSSAtRuleScope: rule_type = StyleRule::kScope; break;
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc index bfe98f2..c3fb81c 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -2021,6 +2021,10 @@ FlattenFunctionBody(*container_rule, function_tree_scope, result, locals); } + } else if (auto* route_rule = DynamicTo<StyleRuleRoute>(child.Get())) { + // TODO(crbug.com/431374376): Implement + (void)route_rule; + NOTREACHED() << "Not yet implemented."; } } }
diff --git a/third_party/blink/renderer/core/css/rule_set.cc b/third_party/blink/renderer/core/css/rule_set.cc index 9d1a3ea..dd56fe0 100644 --- a/third_party/blink/renderer/core/css/rule_set.cc +++ b/third_party/blink/renderer/core/css/rule_set.cc
@@ -41,6 +41,7 @@ #include "third_party/blink/renderer/core/css/css_font_selector.h" #include "third_party/blink/renderer/core/css/css_selector.h" #include "third_party/blink/renderer/core/css/css_selector_list.h" +#include "third_party/blink/renderer/core/css/media_values.h" #include "third_party/blink/renderer/core/css/robin_hood_map-inl.h" #include "third_party/blink/renderer/core/css/seeker.h" #include "third_party/blink/renderer/core/css/selector_checker-inl.h" @@ -49,11 +50,13 @@ #include "third_party/blink/renderer/core/css/style_rule_import.h" #include "third_party/blink/renderer/core/css/style_rule_nested_declarations.h" #include "third_party/blink/renderer/core/css/style_sheet_contents.h" +#include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/html/shadow/shadow_element_names.h" #include "third_party/blink/renderer/core/html/shadow/shadow_element_utils.h" #include "third_party/blink/renderer/core/html/track/text_track_cue.h" #include "third_party/blink/renderer/core/html_names.h" #include "third_party/blink/renderer/core/inspector/invalidation_set_to_selector_map.h" +#include "third_party/blink/renderer/core/route_matching/route_map.h" #include "third_party/blink/renderer/core/style/computed_style_constants.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" @@ -880,6 +883,11 @@ page_rules_.push_back(rule); } +void RuleSet::AddRouteRule(StyleRuleRoute* rule) { + need_compaction_ = true; + route_rules_.push_back(rule); +} + void RuleSet::AddFontFaceRule(StyleRuleFontFace* rule) { need_compaction_ = true; font_face_rules_.push_back(rule); @@ -942,6 +950,15 @@ } else if (auto* page_rule = DynamicTo<StyleRulePage>(rule)) { page_rule->SetCascadeLayer(cascade_layer); AddPageRule(page_rule); + } else if (auto* route_rule = DynamicTo<StyleRuleRoute>(rule)) { + const Document* document = medium.GetMediaValues().GetDocument(); + if (const RouteMap* route_map = RouteMap::Get(document)) { + if (route_map->MatchesRoute(document->Url(), route_rule->GetName())) { + AddChildRules(parent_rule, route_rule->ChildRules(), medium, mixins, + add_rule_flags, container_query, cascade_layer, + style_scope, apply_mixins_stack); + } + } } else if (auto* media_rule = DynamicTo<StyleRuleMedia>(rule)) { if (MatchMediaForAddRules(medium, media_rule->MediaQueries())) { AddChildRules(parent_rule, media_rule->ChildRules(), medium, mixins, @@ -1133,6 +1150,14 @@ } } + const Document* document = medium.GetDocument(); + if (const RouteMap* route_map = RouteMap::Get(document)) { + // In case there are multiple style sheets, we only need to do this once: + if (active_routes_.empty()) { + active_routes_ = route_map->GetActiveRoutes(document->Url()); + } + } + InvalidationSetToSelectorMap::StyleSheetContentsScope contents_scope(sheet); ApplyMixinsStack apply_mixins_stack; AddChildRules(/*parent_rule=*/nullptr, sheet->ChildRules(), medium, mixins, @@ -1669,6 +1694,20 @@ return evaluator.DidResultsChange(media_query_set_results_); } +bool RuleSet::DidRoutesChange(const Document* document) const { + if (!document) { + return false; + } + if (const RouteMap* route_map = RouteMap::Get(document)) { + HashSet<String> current_routes = + route_map->GetActiveRoutes(document->Url()); + if (current_routes != active_routes_) { + return true; + } + } + return false; +} + const CascadeLayer* RuleSet::GetLayerForTest(const RuleData& rule) const { if (!layer_intervals_.size() || layer_intervals_[0].start_position > rule.GetPosition()) { @@ -1715,6 +1754,7 @@ visitor->Trace(view_transition_rules_); visitor->Trace(keyframes_rules_); visitor->Trace(property_rules_); + visitor->Trace(route_rules_); visitor->Trace(counter_style_rules_); visitor->Trace(position_try_rules_); visitor->Trace(function_rules_);
diff --git a/third_party/blink/renderer/core/css/rule_set.h b/third_party/blink/renderer/core/css/rule_set.h index 3612aaa..4e44942 100644 --- a/third_party/blink/renderer/core/css/rule_set.h +++ b/third_party/blink/renderer/core/css/rule_set.h
@@ -500,6 +500,9 @@ const HeapVector<Member<StyleRulePage>>& PageRules() const { return page_rules_; } + const HeapVector<Member<StyleRuleRoute>>& RouteRules() const { + return route_rules_; + } const HeapVector<Member<StyleRuleFontFace>>& FontFaceRules() const { return font_face_rules_; } @@ -593,6 +596,8 @@ based_on_mixin_generation_ != current_mixin_generation; } + bool DidRoutesChange(const Document*) const; + // We use a vector of Interval<T> to represent that rules with positions // between start_position (inclusive) and the next Interval<T>'s // start_position (exclusive) share some property: @@ -652,6 +657,7 @@ void AddToRuleSet(const AtomicString& key, RuleMap&, const RuleData&); void AddToRuleSet(HeapVector<RuleData>&, const RuleData&); void AddPageRule(StyleRulePage*); + void AddRouteRule(StyleRuleRoute*); void AddFontFaceRule(StyleRuleFontFace*); void AddKeyframesRule(StyleRuleKeyframes*); void AddPropertyRule(StyleRuleProperty*); @@ -776,6 +782,7 @@ HeapVector<RuleData> root_element_rules_; RuleFeatureSet features_; HeapVector<Member<StyleRulePage>> page_rules_; + HeapVector<Member<StyleRuleRoute>> route_rules_; HeapVector<Member<StyleRuleFontFace>> font_face_rules_; HeapVector<Member<StyleRuleFontPaletteValues>> font_palette_values_rules_; HeapVector<Member<StyleRuleFontFeatureValues>> font_feature_values_rules_; @@ -786,6 +793,7 @@ HeapVector<Member<StyleRulePositionTry>> position_try_rules_; HeapVector<MediaQuerySetResult> media_query_set_results_; HeapVector<Member<StyleRuleFunction>> function_rules_; + HashSet<String> active_routes_; // Whether there is a ruleset bucket for rules with a selector on // the style attribute (which is rare, but allowed). If so, the caller
diff --git a/third_party/blink/renderer/core/css/style_engine.h b/third_party/blink/renderer/core/css/style_engine.h index 123d5d3..24fbf29 100644 --- a/third_party/blink/renderer/core/css/style_engine.h +++ b/third_party/blink/renderer/core/css/style_engine.h
@@ -770,6 +770,10 @@ void RevisitStyleSheetForInspector(StyleSheetContents* contents, const RuleFeatureSet* features) const; + // Call when @route rules may need to be re-evaluated, because the current URL + // has changed. + void RoutesMayHaveChanged() { SetNeedsActiveStyleUpdate(GetDocument()); } + private: void UpdateCounters(const Element& element, CountersAttachmentContext& context);
diff --git a/third_party/blink/renderer/core/css/style_rule.cc b/third_party/blink/renderer/core/css/style_rule.cc index c33d22d6..00b5b08 100644 --- a/third_party/blink/renderer/core/css/style_rule.cc +++ b/third_party/blink/renderer/core/css/style_rule.cc
@@ -47,6 +47,7 @@ #include "third_party/blink/renderer/core/css/css_page_rule.h" #include "third_party/blink/renderer/core/css/css_position_try_rule.h" #include "third_party/blink/renderer/core/css/css_property_rule.h" +#include "third_party/blink/renderer/core/css/css_route_rule.h" #include "third_party/blink/renderer/core/css/css_scope_rule.h" #include "third_party/blink/renderer/core/css/css_starting_style_rule.h" #include "third_party/blink/renderer/core/css/css_style_rule.h" @@ -118,6 +119,9 @@ case kProperty: To<StyleRuleProperty>(this)->TraceAfterDispatch(visitor); return; + case kRoute: + To<StyleRuleRoute>(this)->TraceAfterDispatch(visitor); + return; case kFontFace: To<StyleRuleFontFace>(this)->TraceAfterDispatch(visitor); return; @@ -214,6 +218,9 @@ case kProperty: To<StyleRuleProperty>(this)->~StyleRuleProperty(); return; + case kRoute: + To<StyleRuleRoute>(this)->~StyleRuleRoute(); + return; case kFontFace: To<StyleRuleFontFace>(this)->~StyleRuleFontFace(); return; @@ -303,6 +310,8 @@ return To<StyleRulePageMargin>(this)->Copy(); case kProperty: return To<StyleRuleProperty>(this)->Copy(); + case kRoute: + return To<StyleRuleRoute>(this)->Copy(); case kFontFace: return To<StyleRuleFontFace>(this)->Copy(); case kFontPaletteValues: @@ -378,6 +387,10 @@ rule = MakeGarbageCollected<CSSMarginRule>(To<StyleRulePageMargin>(self), parent_sheet); break; + case kRoute: + rule = MakeGarbageCollected<CSSRouteRule>(To<StyleRuleRoute>(self), + parent_sheet); + break; case kProperty: rule = MakeGarbageCollected<CSSPropertyRule>(To<StyleRuleProperty>(self), parent_sheet); @@ -675,6 +688,8 @@ return RenestGroupRule(To<StyleRuleContainer>(this), new_parent); case kMedia: return RenestGroupRule(To<StyleRuleMedia>(this), new_parent); + case kRoute: + return RenestGroupRule(To<StyleRuleRoute>(this), new_parent); case kSupports: return RenestGroupRule(To<StyleRuleSupports>(this), new_parent); case kStartingStyle: { @@ -1049,6 +1064,14 @@ StyleRuleCondition::TraceAfterDispatch(visitor); } +StyleRuleRoute::StyleRuleRoute(const String& name, + HeapVector<Member<StyleRuleBase>> child_rules) + : StyleRuleCondition(kRoute, std::move(child_rules)), name_(name) {} + +StyleRuleRoute::StyleRuleRoute(const StyleRuleRoute& other, + HeapVector<Member<StyleRuleBase>> child_rules) + : StyleRuleCondition(kRoute, std::move(child_rules)), name_(other.name_) {} + StyleRuleStartingStyle::StyleRuleStartingStyle( HeapVector<Member<StyleRuleBase>> rules) : StyleRuleGroup(kStartingStyle, std::move(rules)) {}
diff --git a/third_party/blink/renderer/core/css/style_rule.h b/third_party/blink/renderer/core/css/style_rule.h index b289c7a5..48673fa 100644 --- a/third_party/blink/renderer/core/css/style_rule.h +++ b/third_party/blink/renderer/core/css/style_rule.h
@@ -63,6 +63,7 @@ kPage, kPageMargin, kProperty, + kRoute, kKeyframes, kKeyframe, kLayerBlock, @@ -118,6 +119,7 @@ bool IsPageRule() const { return GetType() == kPage; } bool IsPageRuleMargin() const { return GetType() == kPageMargin; } bool IsPropertyRule() const { return GetType() == kProperty; } + bool IsRouteRule() const { return GetType() == kRoute; } bool IsStyleRule() const { return GetType() == kStyle; } bool IsScopeRule() const { return GetType() == kScope; } bool IsSupportsRule() const { return GetType() == kSupports; } @@ -600,6 +602,27 @@ Member<ContainerQuery> container_query_; }; +class StyleRuleRoute : public StyleRuleCondition { + public: + StyleRuleRoute(const String& name, + HeapVector<Member<StyleRuleBase>> child_rules); + StyleRuleRoute(const StyleRuleRoute&) = default; + StyleRuleRoute(const StyleRuleRoute&, HeapVector<Member<StyleRuleBase>>); + + StyleRuleRoute* Copy() const { + return MakeGarbageCollected<StyleRuleRoute>(*this); + } + + const String& GetName() const { return name_; } + + void TraceAfterDispatch(Visitor* v) const { + StyleRuleCondition::TraceAfterDispatch(v); + } + + private: + String name_; +}; + class StyleRuleStartingStyle : public StyleRuleGroup { public: explicit StyleRuleStartingStyle(HeapVector<Member<StyleRuleBase>> rules); @@ -819,6 +842,13 @@ }; template <> +struct DowncastTraits<StyleRuleRoute> { + static bool AllowFrom(const StyleRuleBase& rule) { + return rule.IsRouteRule(); + } +}; + +template <> struct DowncastTraits<StyleRuleScope> { static bool AllowFrom(const StyleRuleBase& rule) { return rule.IsScopeRule();
diff --git a/third_party/blink/renderer/core/css/style_sheet_contents.cc b/third_party/blink/renderer/core/css/style_sheet_contents.cc index 8e3af708..0f9e6434 100644 --- a/third_party/blink/renderer/core/css/style_sheet_contents.cc +++ b/third_party/blink/renderer/core/css/style_sheet_contents.cc
@@ -671,6 +671,7 @@ case StyleRuleBase::kContainer: case StyleRuleBase::kMedia: case StyleRuleBase::kLayerBlock: + case StyleRuleBase::kRoute: case StyleRuleBase::kScope: case StyleRuleBase::kStartingStyle: if (ChildRulesHaveFailedOrCanceledSubresources( @@ -913,7 +914,8 @@ rule_set_diff_->MarkUnrepresentable(); } } - if (rule_set_ && rule_set_->DidMediaQueryResultsChange(medium)) { + if (rule_set_ && (rule_set_->DidMediaQueryResultsChange(medium) || + rule_set_->DidRoutesChange(medium.GetDocument()))) { rule_set_ = nullptr; } if (rule_set_diff_) {
diff --git a/third_party/blink/renderer/core/editing/finder/find_task_controller.cc b/third_party/blink/renderer/core/editing/finder/find_task_controller.cc index 44fe911..b9432b99 100644 --- a/third_party/blink/renderer/core/editing/finder/find_task_controller.cc +++ b/third_party/blink/renderer/core/editing/finder/find_task_controller.cc
@@ -19,6 +19,7 @@ #include "third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/instrumentation/histogram.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -217,9 +218,6 @@ int identifier, const String& search_text, const mojom::blink::FindOptions& options) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - "blink", "FindInPageRequest", - TRACE_ID_WITH_SCOPE("FindInPageRequest", identifier)); DCHECK(!finding_in_progress_); DCHECK_EQ(current_find_identifier_, kInvalidFindIdentifier); // This is a brand new search, so we need to reset everything.
diff --git a/third_party/blink/renderer/core/frame/DEPS b/third_party/blink/renderer/core/frame/DEPS index 9a5ea87..3345352 100644 --- a/third_party/blink/renderer/core/frame/DEPS +++ b/third_party/blink/renderer/core/frame/DEPS
@@ -24,9 +24,6 @@ "dom_timer_test\.cc": [ "+base/test/scoped_command_line.h", ], - "dom_window\.cc" : [ - "+base/containers/fixed_flat_map.h" - ], "frame_view\.cc": [ "+ui/gfx/transform.h" ],
diff --git a/third_party/blink/renderer/core/frame/frame_serializer.cc b/third_party/blink/renderer/core/frame/frame_serializer.cc index 3034f8a..e2c35cc 100644 --- a/third_party/blink/renderer/core/frame/frame_serializer.cc +++ b/third_party/blink/renderer/core/frame/frame_serializer.cc
@@ -1215,6 +1215,7 @@ case CSSRule::kNestedDeclarationsRule: case CSSRule::kMediaRule: case CSSRule::kMixinRule: + case CSSRule::kRouteRule: case CSSRule::kSupportsRule: case CSSRule::kContainerRule: case CSSRule::kLayerBlockRule:
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc index bfdbe2e..fd838577 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -159,6 +159,7 @@ #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" #include "third_party/blink/renderer/platform/wtf/functional.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" #include "ui/base/dragdrop/mojom/drag_drop_types.mojom-blink.h" #include "ui/base/mojom/menu_source_type.mojom-blink-forward.h" #include "ui/base/mojom/window_show_state.mojom-blink.h" @@ -1055,8 +1056,8 @@ html_element->IsPluginElement()) { mouse_capture_element_ = To<HTMLPlugInElement>(hit_node); SetMouseCapture(true); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("input", "capturing mouse", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("input", "capturing mouse", + perfetto::Track::FromPointer(this)); } } @@ -3244,8 +3245,7 @@ } void WebFrameWidgetImpl::MouseCaptureLost() { - TRACE_EVENT_NESTABLE_ASYNC_END0("input", "capturing mouse", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("input", perfetto::Track::FromPointer(this)); mouse_capture_element_ = nullptr; }
diff --git a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc index 8df9909..6421fb111 100644 --- a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc
@@ -37,6 +37,7 @@ #include "third_party/blink/renderer/platform/scheduler/public/thread_cpu_throttler.h" #include "third_party/blink/renderer/platform/scheduler/public/virtual_time_controller.h" #include "third_party/blink/renderer/platform/theme/web_theme_engine_helper.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace { enum DataSaverOverride { @@ -587,9 +588,9 @@ virtual_time_controller_.EnableVirtualTime(initial_time); virtual_time_controller_.SetVirtualTimePolicy(scheduler_policy); if (virtual_time_budget_ms.value_or(0) > 0) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("renderer.scheduler", "VirtualTimeBudget", - TRACE_ID_LOCAL(this), "budget", - virtual_time_budget_ms.value()); + TRACE_EVENT_BEGIN("renderer.scheduler", "VirtualTimeBudget", + perfetto::Track::FromPointer(this), "budget", + virtual_time_budget_ms.value()); const base::TimeDelta budget_amount = base::Milliseconds(virtual_time_budget_ms.value()); virtual_time_controller_.GrantVirtualTimeBudget( @@ -671,8 +672,7 @@ } void InspectorEmulationAgent::VirtualTimeBudgetExpired() { - TRACE_EVENT_NESTABLE_ASYNC_END0("renderer.scheduler", "VirtualTimeBudget", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("renderer.scheduler", perfetto::Track::FromPointer(this)); // Disregard the event if the agent is disabled. Another agent may take care // of pausing the time in case of an in-process frame swap. if (!enabled_) {
diff --git a/third_party/blink/renderer/core/layout/layout_theme_mac.mm b/third_party/blink/renderer/core/layout/layout_theme_mac.mm index 1371ae2..05c95c2 100644 --- a/third_party/blink/renderer/core/layout/layout_theme_mac.mm +++ b/third_party/blink/renderer/core/layout/layout_theme_mac.mm
@@ -35,12 +35,6 @@ namespace blink { namespace { -// For light mode the focus ring base color is #0067f47f and dark mode -// #1aa9ff7f. These can be obtained through -// `GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator, color_scheme)`, -// which gets it from NSColor::keyboardFocusIndicatorColor. -constexpr SkColor4f kFocusRingBaseColorLight = {0, 0.403922, 0.956863, 1}; -constexpr SkColor4f kFocusRingBaseColorDark = {0.101961, 0.662745, 1, 1}; // The focus ring colors used in web tests for light and dark mode. constexpr Color kDefaultFocusRingColorForTestsLight = @@ -151,36 +145,23 @@ return Color::FromRGBA(0x10, 0x10, 0x10, 0xFF); } - if (RuntimeEnabledFeatures::SystemDefaultAccentColorsEnabled()) { - // If a custom focus ring color has been set, use that one. - if (HasCustomFocusRingColor()) { - return GetCustomFocusRingColor(color_scheme); - } - // Otherwise, use the system-default color based on the color scheme. - auto focus_ring_base_color = - color_scheme == mojom::blink::ColorScheme::kDark - ? kFocusRingBaseColorDark - : kFocusRingBaseColorLight; - return Color::FromSkColor4f( - ui::NativeTheme::GetInstanceForWeb()->FocusRingColorForBaseColor( - focus_ring_base_color)); - } - - SkColor4f keyboard_focus_indicator = - GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator, color_scheme) - .toSkColor4f(); - Color focus_ring = Color::FromSkColor4f( - ui::NativeTheme::GetInstanceForWeb()->FocusRingColorForBaseColor( - keyboard_focus_indicator)); - - if (!HasCustomFocusRingColor()) { - return focus_ring; - } - // Use the custom focus ring color when the system accent color wasn't - // changed. - if (!IsAccentColorCustomized(color_scheme)) { + if (HasCustomFocusRingColor() && + (RuntimeEnabledFeatures::SystemDefaultAccentColorsEnabled() || + !IsAccentColorCustomized(color_scheme))) { return GetCustomFocusRingColor(color_scheme); } + + Color focus_ring; + if (RuntimeEnabledFeatures::SystemDefaultAccentColorsEnabled()) { + focus_ring = + Color::FromSkColor(color_scheme == mojom::blink::ColorScheme::kDark + ? SkColorSetRGB(0x1A, 0xA9, 0xFF) + : SkColorSetRGB(0x00, 0x67, 0xF4)); + } else { + focus_ring = + GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator, color_scheme); + } + focus_ring.SetAlpha(166 / 255.0f); return focus_ring; }
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc index f4b965f..ac6666c 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc
@@ -167,6 +167,16 @@ scaled_font_ = ComputeNewScaledFontForStyle(*this, scaling_factor_); } +float LayoutSVGInlineText::ComputeFontScale(const LayoutObject& layout_object) { + const ComputedStyle& style = layout_object.StyleRef(); + if (style.GetFontDescription().TextRendering() == kGeometricPrecision) { + return 1; + } + const float scaling_factor = + SVGLayoutSupport::CalculateScreenFontSizeScalingFactor(&layout_object); + return !scaling_factor ? 1 : scaling_factor; +} + const Font* LayoutSVGInlineText::ComputeNewScaledFontForStyle( const LayoutObject& layout_object, float& scaling_factor) { @@ -174,28 +184,19 @@ // Alter font-size to the right on-screen value to avoid scaling the glyphs // themselves, except when GeometricPrecision is specified. - scaling_factor = - SVGLayoutSupport::CalculateScreenFontSizeScalingFactor(&layout_object); - if (!scaling_factor) { - scaling_factor = 1; - // This is a hack. TextDecorationInfo's constructor wants to compare - // Font objects _by pointer_ to verify that it's a true override; - // otherwise, it sets the underline the wrong place. So we need to - // give it a pointer that is distinct from style.GetFont(), even though - // it contains the same information. - return MakeGarbageCollected<Font>(*style.GetFont()); - } + scaling_factor = ComputeFontScale(layout_object); const FontDescription& unscaled_font_description = style.GetFontDescription(); - if (unscaled_font_description.TextRendering() == kGeometricPrecision) - scaling_factor = 1; - Document& document = layout_object.GetDocument(); float scaled_font_size = FontSizeFunctions::GetComputedSizeFromSpecifiedSize( &document, scaling_factor, unscaled_font_description.IsAbsoluteSize(), unscaled_font_description.SpecifiedSize(), kDoNotApplyMinimumForFontSize); if (scaled_font_size == unscaled_font_description.ComputedSize()) { - // See above. + // This is a hack. TextDecorationInfo's constructor wants to compare + // Font objects _by pointer_ to verify that it's a true override; + // otherwise, it sets the underline the wrong place. So we need to + // give it a pointer that is distinct from style.GetFont(), even though + // it contains the same information. return MakeGarbageCollected<Font>(*style.GetFont()); }
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.h b/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.h index c6ffd8a..943cd3c3 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.h +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.h
@@ -47,6 +47,7 @@ return *scaled_font_; } void UpdateScaledFont(); + static float ComputeFontScale(const LayoutObject&); static const Font* ComputeNewScaledFontForStyle(const LayoutObject&, float& scaling_factor);
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc index 24ca17c..70c03c9 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -80,6 +80,7 @@ #include "third_party/blink/public/web/blink.h" #include "third_party/blink/public/web/web_navigation_type.h" #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" +#include "third_party/blink/renderer/core/css/style_engine.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/document_init.h" #include "third_party/blink/renderer/core/dom/document_parser.h" @@ -136,6 +137,7 @@ #include "third_party/blink/renderer/core/performance_entry_names.h" #include "third_party/blink/renderer/core/permissions_policy/document_policy_parser.h" #include "third_party/blink/renderer/core/probe/core_probes.h" +#include "third_party/blink/renderer/core/route_matching/route_map.h" #include "third_party/blink/renderer/core/speculation_rules/auto_speculation_rules_config.h" #include "third_party/blink/renderer/core/speculation_rules/document_speculation_rules.h" #include "third_party/blink/renderer/core/speculation_rules/speculation_rule_set.h" @@ -1194,6 +1196,19 @@ heuristics->SameDocumentNavigationCommitted(new_url, soft_navigation_context); } + + // Notify the style engine that routes may have changed because of the URL + // change. The `frame_` check is needed, even though there's a check further + // up -- it may be reset after that check. + // + // See + // https://github.com/WICG/declarative-partial-updates#part-2-route-matching + if (frame_) { + Document* document = frame_->GetDocument(); + if (document && RouteMap::Get(document)) { + document->GetStyleEngine().RoutesMayHaveChanged(); + } + } } const KURL& DocumentLoader::UrlForHistory() const {
diff --git a/third_party/blink/renderer/core/loader/interactive_detector.cc b/third_party/blink/renderer/core/loader/interactive_detector.cc index 44b835bf..c82e8ba 100644 --- a/third_party/blink/renderer/core/loader/interactive_detector.cc +++ b/third_party/blink/renderer/core/loader/interactive_detector.cc
@@ -17,6 +17,7 @@ #include "third_party/blink/renderer/core/probe/core_probes.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -253,28 +254,26 @@ if (delay > kFirstInputDelayTraceEventThreshold) { // Emit a trace event to highlight long first input delays. - TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0( - "latency", "Long First Input Delay", - TRACE_ID_WITH_SCOPE("Long First Input Delay", - g_num_long_input_events), - event_timestamp); - TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP0( - "latency", "Long First Input Delay", - TRACE_ID_WITH_SCOPE("Long First Input Delay", - g_num_long_input_events), - event_timestamp + delay); + TRACE_EVENT_BEGIN("latency", "Long First Input Delay", + perfetto::NamedTrack("Long First Input Delay", + g_num_long_input_events), + event_timestamp); + TRACE_EVENT_END("latency", + perfetto::NamedTrack("Long First Input Delay", + g_num_long_input_events), + event_timestamp + delay); g_num_long_input_events++; } } else if (delay > kInputDelayTraceEventThreshold) { // Emit a trace event to highlight long input delays from second input and // onwards. - TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0( + TRACE_EVENT_BEGIN( "latency", "Long Input Delay", - TRACE_ID_WITH_SCOPE("Long Input Delay", g_num_long_input_events), + perfetto::NamedTrack("Long Input Delay", g_num_long_input_events), event_timestamp); - TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP0( - "latency", "Long Input Delay", - TRACE_ID_WITH_SCOPE("Long Input Delay", g_num_long_input_events), + TRACE_EVENT_END( + "latency", + perfetto::NamedTrack("Long Input Delay", g_num_long_input_events), event_timestamp + delay); // Apply metadata on stack samples. base::ApplyMetadataToPastSamples(
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc index b9331e7..acb8857 100644 --- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc +++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
@@ -46,6 +46,7 @@ #include "third_party/blink/renderer/platform/wtf/text/string_hash.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/vector.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -59,9 +60,9 @@ : request_(request), task_runner_(std::move(task_runner)), throttles_(std::move(throttles)) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("loading", - "PrefetchedSignedExchangeLoader", this, - "url", request_.url.spec()); + TRACE_EVENT_BEGIN("loading", "PrefetchedSignedExchangeLoader", + perfetto::Track::FromPointer(this), "url", + request_.url.spec()); } PrefetchedSignedExchangeLoader(const PrefetchedSignedExchangeLoader&) = @@ -70,8 +71,7 @@ const PrefetchedSignedExchangeLoader&) = delete; ~PrefetchedSignedExchangeLoader() override { - TRACE_EVENT_NESTABLE_ASYNC_END0("loading", "PrefetchedSignedExchangeLoader", - this); + TRACE_EVENT_END("loading", perfetto::Track::FromPointer(this)); } base::WeakPtr<PrefetchedSignedExchangeLoader> GetWeakPtr() { @@ -226,8 +226,8 @@ : frame_(frame), alternative_resources_(std::move(alternative_resources)), prefetched_exchanges_map_(std::move(prefetched_exchanges_map)) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("loading", - "PrefetchedSignedExchangeManager", this); + TRACE_EVENT_BEGIN("loading", "PrefetchedSignedExchangeManager", + perfetto::Track::FromPointer(this)); } PrefetchedSignedExchangeManager::~PrefetchedSignedExchangeManager() {} @@ -360,9 +360,8 @@ loader->SetURLLoader( CreateDefaultURLLoader(loader->request(), loader->TakeThrottles())); } - TRACE_EVENT_NESTABLE_ASYNC_END2( - "loading", "PrefetchedSignedExchangeManager", this, "match_result", - "failure", "reason", failure_reason); + TRACE_EVENT_END("loading", perfetto::Track::FromPointer(this), + "match_result", "failure", "reason", failure_reason); return; } for (wtf_size_t i = 0; i < loaders_.size(); ++i) { @@ -381,8 +380,8 @@ loader->SetURLLoader(CreatePrefetchedSignedExchangeURLLoader( loader->request(), loader->TakeThrottles(), loader_factory.Unbind())); } - TRACE_EVENT_NESTABLE_ASYNC_END1("loading", "PrefetchedSignedExchangeManager", - this, "match_result", "success"); + TRACE_EVENT_END("loading", perfetto::Track::FromPointer(this), "match_result", + "success"); } } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/text_painter.cc b/third_party/blink/renderer/core/paint/text_painter.cc index 8719aa2..6d86ef0 100644 --- a/third_party/blink/renderer/core/paint/text_painter.cc +++ b/third_party/blink/renderer/core/paint/text_painter.cc
@@ -173,12 +173,11 @@ case SvgPaintMode::kText: stroke_scale_factor = state.InlineText().ScalingFactor(); break; - case SvgPaintMode::kTextDecoration: { - LayoutSVGInlineText::ComputeNewScaledFontForStyle(layout_parent, - stroke_scale_factor); + case SvgPaintMode::kTextDecoration: + stroke_scale_factor = + LayoutSVGInlineText::ComputeFontScale(layout_parent); DCHECK(stroke_scale_factor); break; - } } }
diff --git a/third_party/blink/renderer/core/paint/theme_painter_default.cc b/third_party/blink/renderer/core/paint/theme_painter_default.cc index 4acf573..abd38ab 100644 --- a/third_party/blink/renderer/core/paint/theme_painter_default.cc +++ b/third_party/blink/renderer/core/paint/theme_painter_default.cc
@@ -26,10 +26,12 @@ #include <variant> +#include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h" #include "third_party/blink/public/platform/web_theme_engine.h" #include "third_party/blink/public/resources/grit/blink_image_resources.h" #include "third_party/blink/renderer/core/dom/shadow_root.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" +#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/html/forms/html_input_element.h" #include "third_party/blink/renderer/core/html/forms/slider_thumb_element.h" #include "third_party/blink/renderer/core/html/forms/spin_button_element.h" @@ -69,12 +71,21 @@ } WebThemeEngine::State GetWebThemeState(const Element& element) { - if (element.IsDisabledFormControl()) + if (element.IsDisabledFormControl()) { return WebThemeEngine::kStateDisabled; - if (element.IsActive()) + } + if (element.IsActive()) { return WebThemeEngine::kStatePressed; - if (element.IsHovered()) - return WebThemeEngine::kStateHover; + } + if (element.IsHovered()) { + // Don't draw a hovered state when the device does not have hover available. + if (const Settings* const settings = element.GetDocument().GetSettings(); + !settings || + (settings->GetAvailableHoverTypes() & + static_cast<int>(mojom::blink::HoverType::kHoverHoverType))) { + return WebThemeEngine::kStateHover; + } + } return WebThemeEngine::kStateNormal; }
diff --git a/third_party/blink/renderer/core/route_matching/route_map.cc b/third_party/blink/renderer/core/route_matching/route_map.cc index a28e42c..579bacc6 100644 --- a/third_party/blink/renderer/core/route_matching/route_map.cc +++ b/third_party/blink/renderer/core/route_matching/route_map.cc
@@ -17,16 +17,22 @@ const char RouteMap::kSupplementName[] = "RouteMap"; -const RouteMap* RouteMap::Get(const Document& document) { - return Supplement<Document>::From<RouteMap>(document); +const RouteMap* RouteMap::Get(const Document* document) { + if (!document) { + return nullptr; + } + return Supplement<Document>::From<RouteMap>(*document); } -RouteMap* RouteMap::Get(Document& document) { - return Supplement<Document>::From<RouteMap>(document); +RouteMap* RouteMap::Get(Document* document) { + if (!document) { + return nullptr; + } + return Supplement<Document>::From<RouteMap>(*document); } RouteMap& RouteMap::Ensure(Document& document) { - RouteMap* route_map = Get(document); + RouteMap* route_map = Get(&document); if (!route_map) { route_map = MakeGarbageCollected<RouteMap>(document); Supplement<Document>::ProvideTo<RouteMap>(document, route_map);
diff --git a/third_party/blink/renderer/core/route_matching/route_map.h b/third_party/blink/renderer/core/route_matching/route_map.h index a0f5314..ac77ae9 100644 --- a/third_party/blink/renderer/core/route_matching/route_map.h +++ b/third_party/blink/renderer/core/route_matching/route_map.h
@@ -62,9 +62,10 @@ // For testing only. RouteMap(); - // Supplement support: - static const RouteMap* Get(const Document&); - static RouteMap* Get(Document&); + // Supplement support. Document pointers may be null (in which case null will + // be returned). + static const RouteMap* Get(const Document*); + static RouteMap* Get(Document*); static RouteMap& Ensure(Document&); ParseResult ParseAndApplyRoutes(const String& route_map_text);
diff --git a/third_party/blink/renderer/core/scroll/scrollbar.cc b/third_party/blink/renderer/core/scroll/scrollbar.cc index c363d0c9..9c7ec30 100644 --- a/third_party/blink/renderer/core/scroll/scrollbar.cc +++ b/third_party/blink/renderer/core/scroll/scrollbar.cc
@@ -33,6 +33,8 @@ #include "third_party/blink/public/common/input/web_mouse_event.h" #include "third_party/blink/public/common/input/web_pointer_event.h" #include "third_party/blink/public/common/input/web_pointer_properties.h" +#include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h" +#include "third_party/blink/public/platform/web_theme_engine.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/settings.h" @@ -151,6 +153,27 @@ return orientation_ == kHorizontalScrollbar ? max_offset.x() : max_offset.y(); } +WebThemeEngine::State Scrollbar::GetStateForPart(ScrollbarPart part) const { + if (!enabled_) { + return WebThemeEngine::kStateDisabled; + } + if (part == pressed_part_) { + return WebThemeEngine::kStatePressed; + } + if (part == hovered_part_) { + // Don't draw a hovered state when the device does not have hover available. + if (const Settings* const settings = + style_source_ ? style_source_->GetDocument().GetSettings() + : nullptr; + !settings || + (settings->GetAvailableHoverTypes() & + static_cast<int>(mojom::blink::HoverType::kHoverHoverType))) { + return WebThemeEngine::kStateHover; + } + } + return WebThemeEngine::kStateNormal; +} + void Scrollbar::OffsetDidChange(mojom::blink::ScrollType scroll_type) { DCHECK(scrollable_area_); pending_injected_delta_ = ScrollOffset();
diff --git a/third_party/blink/renderer/core/scroll/scrollbar.h b/third_party/blink/renderer/core/scroll/scrollbar.h index c4edab23..08a9a28 100644 --- a/third_party/blink/renderer/core/scroll/scrollbar.h +++ b/third_party/blink/renderer/core/scroll/scrollbar.h
@@ -28,6 +28,7 @@ #include "third_party/blink/public/common/input/web_input_event.h" #include "third_party/blink/public/mojom/frame/color_scheme.mojom-blink-forward.h" +#include "third_party/blink/public/platform/web_theme_engine.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/scroll/scroll_types.h" #include "third_party/blink/renderer/core/style/computed_style_constants.h" @@ -99,6 +100,7 @@ ScrollbarPart PressedPart() const { return pressed_part_; } ScrollbarPart HoveredPart() const { return hovered_part_; } + WebThemeEngine::State GetStateForPart(ScrollbarPart) const; virtual void StyleChanged() {} void SetScrollbarsHiddenFromExternalAnimator(bool);
diff --git a/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc b/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc index 883dfdc..28046c45 100644 --- a/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc +++ b/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
@@ -91,40 +91,20 @@ PartPaintingParams ButtonPartPaintingParams(const Scrollbar& scrollbar, float position, ScrollbarPart part) { - WebThemeEngine::Part paint_part; - WebThemeEngine::State state = WebThemeEngine::kStateNormal; - bool check_min = false; - bool check_max = false; - - if (scrollbar.Orientation() == kHorizontalScrollbar) { - if (part == kBackButtonStartPart) { - paint_part = WebThemeEngine::kPartScrollbarLeftArrow; - check_min = true; - } else { - paint_part = WebThemeEngine::kPartScrollbarRightArrow; - check_max = true; - } - } else { - if (part == kBackButtonStartPart) { - paint_part = WebThemeEngine::kPartScrollbarUpArrow; - check_min = true; - } else { - paint_part = WebThemeEngine::kPartScrollbarDownArrow; - check_max = true; - } + const WebThemeEngine::State state = scrollbar.GetStateForPart(part); + if (part == kBackButtonStartPart) { + return PartPaintingParams( + (scrollbar.Orientation() == kHorizontalScrollbar) + ? WebThemeEngine::kPartScrollbarLeftArrow + : WebThemeEngine::kPartScrollbarUpArrow, + (position <= 0) ? WebThemeEngine::kStateDisabled : state); } - - if ((check_min && (position <= 0)) || - (check_max && position >= scrollbar.Maximum())) { - state = WebThemeEngine::kStateDisabled; - } else { - if (part == scrollbar.PressedPart()) - state = WebThemeEngine::kStatePressed; - else if (part == scrollbar.HoveredPart()) - state = WebThemeEngine::kStateHover; - } - - return PartPaintingParams(paint_part, state); + return PartPaintingParams((scrollbar.Orientation() == kHorizontalScrollbar) + ? WebThemeEngine::kPartScrollbarRightArrow + : WebThemeEngine::kPartScrollbarDownArrow, + (position >= scrollbar.Maximum()) + ? WebThemeEngine::kStateDisabled + : state); } } // namespace @@ -363,24 +343,17 @@ DrawingRecorder recorder(gc, scrollbar, DisplayItem::kScrollbarThumb, rect); - WebThemeEngine::State state; - cc::PaintCanvas* canvas = gc.Canvas(); - if (scrollbar.PressedPart() == kThumbPart) { - state = WebThemeEngine::kStatePressed; - } else if (scrollbar.HoveredPart() == kThumbPart) { - state = WebThemeEngine::kStateHover; - } else { - state = WebThemeEngine::kStateNormal; - } + const WebThemeEngine::Part part = + (scrollbar.Orientation() == kVerticalScrollbar) + ? WebThemeEngine::kPartScrollbarVerticalThumb + : WebThemeEngine::kPartScrollbarHorizontalThumb; - mojom::blink::ColorScheme color_scheme = scrollbar.UsedColorScheme(); WebThemeEngine::ExtraParams params(BuildScrollbarThumbExtraParams(scrollbar)); + + const mojom::blink::ColorScheme color_scheme = scrollbar.UsedColorScheme(); WebThemeEngineHelper::GetNativeThemeEngine()->Paint( - canvas, - scrollbar.Orientation() == kHorizontalScrollbar - ? WebThemeEngine::kPartScrollbarHorizontalThumb - : WebThemeEngine::kPartScrollbarVerticalThumb, - state, rect, ¶ms, color_scheme, scrollbar.InForcedColorsMode(), + gc.Canvas(), part, scrollbar.GetStateForPart(kThumbPart), rect, ¶ms, + color_scheme, scrollbar.InForcedColorsMode(), scrollbar.GetColorProvider(color_scheme)); } @@ -519,17 +492,10 @@ SkColor4f ScrollbarThemeAura::ThumbColor(const Scrollbar& scrollbar) const { CHECK(UsesSolidColorThumb()); - WebThemeEngine::State state; - if (scrollbar.PressedPart() == kThumbPart) { - state = WebThemeEngine::kStatePressed; - } else if (scrollbar.HoveredPart() == kThumbPart) { - state = WebThemeEngine::kStateHover; - } else { - state = WebThemeEngine::kStateNormal; - } WebThemeEngine::ExtraParams params(BuildScrollbarThumbExtraParams(scrollbar)); return WebThemeEngineHelper::GetNativeThemeEngine()->GetScrollbarThumbColor( - state, ¶ms, scrollbar.GetColorProvider(scrollbar.UsedColorScheme())); + scrollbar.GetStateForPart(kThumbPart), ¶ms, + scrollbar.GetColorProvider(scrollbar.UsedColorScheme())); } bool ScrollbarThemeAura::UsesNinePatchTrackAndButtonsResource() const {
diff --git a/third_party/blink/renderer/core/scroll/scrollbar_theme_overlay.cc b/third_party/blink/renderer/core/scroll/scrollbar_theme_overlay.cc index 8e740616..45ffe1c 100644 --- a/third_party/blink/renderer/core/scroll/scrollbar_theme_overlay.cc +++ b/third_party/blink/renderer/core/scroll/scrollbar_theme_overlay.cc
@@ -174,34 +174,15 @@ void ScrollbarThemeOverlay::PaintThumb(GraphicsContext& context, const Scrollbar& scrollbar, const gfx::Rect& rect) { - if (DrawingRecorder::UseCachedDrawingIfPossible(context, scrollbar, - DisplayItem::kScrollbarThumb)) + if (DrawingRecorder::UseCachedDrawingIfPossible( + context, scrollbar, DisplayItem::kScrollbarThumb)) { return; + } DrawingRecorder recorder(context, scrollbar, DisplayItem::kScrollbarThumb, rect); - WebThemeEngine::State state = WebThemeEngine::kStateNormal; - - if (!scrollbar.Enabled()) - state = WebThemeEngine::kStateDisabled; - else if (scrollbar.PressedPart() == kThumbPart) - state = WebThemeEngine::kStatePressed; - else if (scrollbar.HoveredPart() == kThumbPart) - state = WebThemeEngine::kStateHover; - cc::PaintCanvas* canvas = context.Canvas(); - - WebThemeEngine::Part part = WebThemeEngine::kPartScrollbarHorizontalThumb; - if (scrollbar.Orientation() == kVerticalScrollbar) - part = WebThemeEngine::kPartScrollbarVerticalThumb; - - blink::WebThemeEngine::ScrollbarThumbExtraParams scrollbar_thumb; - if (scrollbar.ScrollbarThumbColor().has_value()) { - scrollbar_thumb.thumb_color = - scrollbar.ScrollbarThumbColor().value().toSkColor4f().toSkColor(); - } - // Horizontally flip the canvas if it is left vertical scrollbar. if (scrollbar.IsLeftSideVerticalScrollbar()) { canvas->save(); @@ -209,15 +190,27 @@ canvas->scale(-1, 1); } + const WebThemeEngine::Part part = + (scrollbar.Orientation() == kVerticalScrollbar) + ? WebThemeEngine::kPartScrollbarVerticalThumb + : WebThemeEngine::kPartScrollbarHorizontalThumb; + + blink::WebThemeEngine::ScrollbarThumbExtraParams scrollbar_thumb; + if (scrollbar.ScrollbarThumbColor().has_value()) { + scrollbar_thumb.thumb_color = + scrollbar.ScrollbarThumbColor().value().toSkColor4f().toSkColor(); + } blink::WebThemeEngine::ExtraParams params(scrollbar_thumb); - mojom::blink::ColorScheme color_scheme = scrollbar.UsedColorScheme(); + const mojom::blink::ColorScheme color_scheme = scrollbar.UsedColorScheme(); WebThemeEngineHelper::GetNativeThemeEngine()->Paint( - canvas, part, state, rect, ¶ms, color_scheme, - scrollbar.InForcedColorsMode(), scrollbar.GetColorProvider(color_scheme)); + canvas, part, scrollbar.GetStateForPart(kThumbPart), rect, ¶ms, + color_scheme, scrollbar.InForcedColorsMode(), + scrollbar.GetColorProvider(color_scheme)); - if (scrollbar.IsLeftSideVerticalScrollbar()) + if (scrollbar.IsLeftSideVerticalScrollbar()) { canvas->restore(); + } } ScrollbarPart ScrollbarThemeOverlay::HitTest(const Scrollbar& scrollbar,
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc index 1e46472..eccd5ed 100644 --- a/third_party/blink/renderer/core/timing/window_performance.cc +++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -104,6 +104,7 @@ #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" #include "third_party/blink/renderer/platform/wtf/wtf_size_t.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" static constexpr base::TimeDelta kLongTaskObserverThreshold = base::Milliseconds(50); @@ -1266,12 +1267,12 @@ // perfetto events. unsigned hash = GetHash(entry->name()); AddFloatToHash(hash, entry->startTime()); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP1( - "devtools.timeline", "EventTiming", hash, entryInfo->creation_time, - "data", entry->ToTracedValue(DomWindow()->GetFrame())); + TRACE_EVENT_BEGIN("devtools.timeline", "EventTiming", + perfetto::Track::Global(hash), entryInfo->creation_time, + "data", entry->ToTracedValue(DomWindow()->GetFrame())); - TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP0( - "devtools.timeline", "EventTiming", hash, entry->GetEndTime()); + TRACE_EVENT_END("devtools.timeline", perfetto::Track::Global(hash), + entry->GetEndTime()); } }
diff --git a/third_party/blink/renderer/core/view_transition/view_transition.cc b/third_party/blink/renderer/core/view_transition/view_transition.cc index a02f6c36..36fd4573 100644 --- a/third_party/blink/renderer/core/view_transition/view_transition.cc +++ b/third_party/blink/renderer/core/view_transition/view_transition.cc
@@ -46,6 +46,7 @@ #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/wtf_size_t.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" #include "v8-microtask-queue.h" namespace blink { @@ -999,8 +1000,8 @@ } style_tracker_->PauseRendering(); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("blink", "ViewTransition::PauseRendering", - this); + TRACE_EVENT_BEGIN("blink", "ViewTransition::PauseRendering", + perfetto::Track::FromPointer(this)); static const base::TimeDelta timeout_delay = RuntimeEnabledFeatures:: ViewTransitionLongCallbackTimeoutForTestingEnabled() @@ -1077,8 +1078,7 @@ if (!rendering_paused_scope_) return; - TRACE_EVENT_NESTABLE_ASYNC_END0("blink", "ViewTransition::PauseRendering", - this); + TRACE_EVENT_END("blink", perfetto::Track::FromPointer(this)); if (rendering_paused_scope_->ShouldThrottleRendering() && document_->View()) { document_->View()->SetThrottledForViewTransition(false); }
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc index 7449e52..a0f7858 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker.cc +++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -403,9 +403,6 @@ back_forward_cache_controller_host) { DCHECK(GetExecutionContext()->IsContextThread()); TRACE_EVENT("blink.worker", "DedicatedWorker::OnFinished"); - TRACE_EVENT_NESTABLE_ASYNC_END0("blink.worker", - "LegacyDedicatedWorker Specific Setup", - TRACE_ID_LOCAL(this)); if (classic_script_loader_->Canceled()) { // Do nothing. } else if (classic_script_loader_->Failed()) {
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc index 2fabd7a..988bc17b 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc +++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
@@ -69,6 +69,7 @@ #include "third_party/blink/renderer/platform/bindings/source_location.h" #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h" #include "third_party/blink/renderer/platform/weborigin/security_policy.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -305,8 +306,8 @@ TRACE_EVENT("blink.worker", "DedicatedWorkerGlobalScope::FetchAndRunClassicScript", "script_url", script_url); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - "blink.worker", "DedicatedWorkerGlobalScope Fetch", TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("blink.worker", "DedicatedWorkerGlobalScope Fetch", + perfetto::Track::FromPointer(this)); fetch_classic_script_start_time_ = base::TimeTicks::Now(); // TODO(crbug.com/1177199): SetPolicyContainer once we passed down policy @@ -452,8 +453,7 @@ DCHECK(IsContextThread()); TRACE_EVENT("blink.worker", "DedicatedWorkerGlobalScope::DidFetchClassicScript"); - TRACE_EVENT_NESTABLE_ASYNC_END0( - "blink.worker", "DedicatedWorkerGlobalScope Fetch", TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("blink.worker", perfetto::Track::FromPointer(this)); base::UmaHistogramTimes( "Worker.TopLevelScript.FetchClassicScriptTime", base::TimeTicks::Now() - fetch_classic_script_start_time_);
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.cc b/third_party/blink/renderer/core/workers/worker_global_scope.cc index e6bf795..4e230b9 100644 --- a/third_party/blink/renderer/core/workers/worker_global_scope.cc +++ b/third_party/blink/renderer/core/workers/worker_global_scope.cc
@@ -577,8 +577,7 @@ debugger->ExternalAsyncTaskFinished(*stack_id_); script_eval_state_ = ScriptEvalState::kEvaluated; - TRACE_EVENT_NESTABLE_ASYNC_END0("blink.worker", "WorkerGlobalScope setup", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("blink.worker", perfetto::Track::FromPointer(this)); } void WorkerGlobalScope::ReceiveMessage(BlinkTransferableMessage message) { @@ -698,8 +697,8 @@ // Workers should always maintain the default world of an isolate. CHECK(creation_params->is_default_world_of_isolate); TRACE_EVENT("blink.worker", "WorkerGlobalScope::WorkerGlobalScope"); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("blink.worker", "WorkerGlobalScope setup", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("blink.worker", "WorkerGlobalScope setup", + perfetto::Track::FromPointer(this)); InstanceCounters::IncrementCounter( InstanceCounters::kWorkerGlobalScopeCounter);
diff --git a/third_party/blink/renderer/modules/DEPS b/third_party/blink/renderer/modules/DEPS index dc6b77a8..781f92c 100644 --- a/third_party/blink/renderer/modules/DEPS +++ b/third_party/blink/renderer/modules/DEPS
@@ -65,6 +65,7 @@ "web_ax_object.cc": [ "+ui/accessibility/ax_action_data.h", ], + "tcp_writable_stream_wrapper.h": [ "+partition_alloc/partition_root.h", ], @@ -76,12 +77,8 @@ ], ".*socket.cc": [ "+base/functional/identity.h", - "+net/base/ip_endpoint.h", ], "web_printing_manager.cc": [ "+printing/buildflags/buildflags.h", - ], - "multicast_controller.*": [ - "+net/base/ip_address.h", - ], + ] }
diff --git a/third_party/blink/renderer/modules/accessibility/DEPS b/third_party/blink/renderer/modules/accessibility/DEPS index ac85986..47fdd603 100644 --- a/third_party/blink/renderer/modules/accessibility/DEPS +++ b/third_party/blink/renderer/modules/accessibility/DEPS
@@ -1,6 +1,5 @@ include_rules = [ "-third_party/blink/renderer/modules", - "+base/containers/fixed_flat_set.h", "+services/metrics/public/cpp", "+third_party/blink/renderer/modules/accessibility", "+third_party/blink/renderer/modules/media_controls",
diff --git a/third_party/blink/renderer/modules/ai/DEPS b/third_party/blink/renderer/modules/ai/DEPS index 43943ab..fd072df1 100644 --- a/third_party/blink/renderer/modules/ai/DEPS +++ b/third_party/blink/renderer/modules/ai/DEPS
@@ -1,5 +1,4 @@ include_rules = [ - "+base/containers/fixed_flat_set.h", "+base/metrics/metrics_hashes.h", "+components/language_detection/content/common/language_detection.mojom-blink.h", "+components/language_detection/content/common/language_detection.mojom-blink-forward.h",
diff --git a/third_party/blink/renderer/modules/clipboard/DEPS b/third_party/blink/renderer/modules/clipboard/DEPS index b7cfb009..907ec5db 100644 --- a/third_party/blink/renderer/modules/clipboard/DEPS +++ b/third_party/blink/renderer/modules/clipboard/DEPS
@@ -1,5 +1,4 @@ include_rules = [ - "+base/containers/fixed_flat_set.h", "+mojo/public/cpp/base/big_buffer.h", "+net/base/mime_util.h", "+third_party/blink/renderer/core/clipboard",
diff --git a/third_party/blink/renderer/modules/direct_sockets/BUILD.gn b/third_party/blink/renderer/modules/direct_sockets/BUILD.gn index fe35a3b..25328bb 100644 --- a/third_party/blink/renderer/modules/direct_sockets/BUILD.gn +++ b/third_party/blink/renderer/modules/direct_sockets/BUILD.gn
@@ -6,8 +6,6 @@ blink_modules_sources("direct_sockets") { sources = [ - "multicast_controller.cc", - "multicast_controller.h", "socket.cc", "socket.h", "stream_wrapper.cc",
diff --git a/third_party/blink/renderer/modules/direct_sockets/README.md b/third_party/blink/renderer/modules/direct_sockets/README.md index 065cd7cc..201acf5 100644 --- a/third_party/blink/renderer/modules/direct_sockets/README.md +++ b/third_party/blink/renderer/modules/direct_sockets/README.md
@@ -1,6 +1,5 @@ This directory implements the Blink side of the [Direct Sockets -API](https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md) -and [Multicast API](https://github.com/explainers-by-googlers/multicast-in-direct-sockets). +API](https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md). It will connect to a DirectSocketsService Mojo service in the browser, which performs security checks, provides dialogs, and forwards requests to
diff --git a/third_party/blink/renderer/modules/direct_sockets/multicast_controller.cc b/third_party/blink/renderer/modules/direct_sockets/multicast_controller.cc deleted file mode 100644 index 63db93d..0000000 --- a/third_party/blink/renderer/modules/direct_sockets/multicast_controller.cc +++ /dev/null
@@ -1,123 +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. - -#include "third_party/blink/renderer/modules/direct_sockets/multicast_controller.h" - -#include <optional> - -#include "net/base/ip_address.h" -#include "net/base/net_errors.h" -#include "third_party/blink/renderer/bindings/core/v8/frozen_array.h" -#include "third_party/blink/renderer/bindings/core/v8/idl_types.h" -#include "third_party/blink/renderer/bindings/core/v8/script_promise_property.h" -#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" -#include "third_party/blink/renderer/modules/direct_sockets/socket.h" -#include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/heap/persistent.h" -#include "third_party/blink/renderer/platform/wtf/forward.h" -#include "third_party/blink/renderer/platform/wtf/functional.h" -#include "third_party/blink/renderer/platform/wtf/wtf_size_t.h" - -namespace blink { - -namespace { -std::optional<net::IPAddress> CreateAndCheckIpAddress( - const String& ip_address, - ExceptionState& exception_state) { - if (!ip_address.ContainsOnlyASCIIOrEmpty()) { - exception_state.ThrowTypeError( - "ipAddress must contain only ascii characters"); - return std::nullopt; - } - - std::optional<net::IPAddress> parsed_ip_opt = - net::IPAddress::FromIPLiteral(ip_address.Ascii()); - if (!parsed_ip_opt.has_value()) { - exception_state.ThrowTypeError("ipAddress is not valid ipv4 or ipv6"); - return std::nullopt; - } else { - return parsed_ip_opt; - } -} -} // namespace - -MulticastController::MulticastController(ExecutionContext* execution_context) - : ExecutionContextClient(execution_context) {} - -MulticastController::~MulticastController() = default; - -ScriptPromise<IDLUndefined> MulticastController::joinGroup( - ScriptState* script_state, - const String& ip_address, - ExceptionState& exception_state) { - if (state_ != State::kOpen) { - exception_state.ThrowTypeError( - "Cannot join group if the socket is not opened"); - return {}; - } - - std::optional<net::IPAddress> parsed_ip_opt = - CreateAndCheckIpAddress(ip_address, exception_state); - if (!parsed_ip_opt.has_value()) { - return {}; - } - auto normalized_ip = String::FromUTF8(parsed_ip_opt->ToString()); - if (joined_groups_.Contains(normalized_ip)) { - exception_state.ThrowTypeError("Cannot join the same group again"); - return {}; - } - - auto* resolver = MakeGarbageCollected<ScriptPromiseResolver<IDLUndefined>>( - script_state, exception_state.GetContext()); - - // TODO(crbug.com/398934282): join the group. For now promise never resolves. - - return resolver->Promise(); -} - -ScriptPromise<IDLUndefined> MulticastController::leaveGroup( - ScriptState* script_state, - const String& ip_address, - ExceptionState& exception_state) { - if (state_ != State::kOpen) { - exception_state.ThrowTypeError( - "Cannot leave group if the socket is not opened"); - return {}; - } - - std::optional<net::IPAddress> parsed_ip_opt = - CreateAndCheckIpAddress(ip_address, exception_state); - if (!parsed_ip_opt.has_value()) { - return {}; - } - - auto normalized_ip = String::FromUTF8(parsed_ip_opt->ToString()); - if (!joined_groups_.Contains(normalized_ip)) { - exception_state.ThrowTypeError("Cannot leave group which is not joined"); - return {}; - } - - auto* resolver = MakeGarbageCollected<ScriptPromiseResolver<IDLUndefined>>( - script_state, exception_state.GetContext()); - - // TODO(crbug.com/398934282): join the group. For now promise never resolves. - - return resolver->Promise(); -} - -void MulticastController::Trace(Visitor* visitor) const { - ScriptWrappable::Trace(visitor); - ExecutionContextClient::Trace(visitor); -} - -bool MulticastController::HasPendingActivity() const { - return false; -} - -void MulticastController::OnCloseOrAbort() { - state_ = State::kClosed; - joined_groups_.clear(); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/direct_sockets/multicast_controller.h b/third_party/blink/renderer/modules/direct_sockets/multicast_controller.h deleted file mode 100644 index 0ec45d6..0000000 --- a/third_party/blink/renderer/modules/direct_sockets/multicast_controller.h +++ /dev/null
@@ -1,68 +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. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_DIRECT_SOCKETS_MULTICAST_CONTROLLER_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_DIRECT_SOCKETS_MULTICAST_CONTROLLER_H_ - -#include "net/base/ip_address.h" -#include "third_party/blink/renderer/bindings/core/v8/frozen_array.h" -#include "third_party/blink/renderer/bindings/core/v8/idl_types.h" -#include "third_party/blink/renderer/bindings/core/v8/script_promise_property.h" -#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" -#include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" -#include "third_party/blink/renderer/modules/modules_export.h" -#include "third_party/blink/renderer/platform/bindings/exception_state.h" -#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" -#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h" -#include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/heap/member.h" - -namespace blink { -// MulticastController interface from multicast_controller.idl -// MulticastController lives as long as UDPSocket, and extends the socket -// lifecycle to be alive while there are pending joinGroup or leaveGroup -// requests, otherwise it would not be possible to resolve returned promises. -// It is not necessary to leave multicast groups. OS will do so automatically on -// socket closure. -class MODULES_EXPORT MulticastController final : public ScriptWrappable, - public ExecutionContextClient { - DEFINE_WRAPPERTYPEINFO(); - - enum class State { kOpen, kClosed }; - - public: - explicit MulticastController(ExecutionContext*); - - ~MulticastController() override; - - // multicast_controller.idl: - ScriptPromise<IDLUndefined> joinGroup(ScriptState*, - const String& ip_address, - ExceptionState&); - - // multicast_controller.idl: - ScriptPromise<IDLUndefined> leaveGroup(ScriptState*, - const String& ip_address, - ExceptionState&); - - // ScriptWrappable: - void Trace(Visitor* visitor) const override; - - bool HasPendingActivity() const; - - void OnCloseOrAbort(); - - // multicast_controller.idl: - const Vector<String>& joinedGroups() const { return joined_groups_; } - - private: - Vector<String> joined_groups_; - - State state_ = State::kOpen; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_DIRECT_SOCKETS_MULTICAST_CONTROLLER_H_
diff --git a/third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl b/third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl deleted file mode 100644 index b54c7c0a..0000000 --- a/third_party/blink/renderer/modules/direct_sockets/multicast_controller.idl +++ /dev/null
@@ -1,16 +0,0 @@ -[ - RuntimeEnabled=MulticastInDirectSockets, - Exposed=(Window, DedicatedWorker), - SecureContext, - IsolatedContext -] -interface MulticastController { - // TODO(crbug.com/398934282): add measure annotations to all methods. - - [CallWith=ScriptState, RaisesException] - Promise<undefined> joinGroup(DOMString ipAddress); - [CallWith=ScriptState, RaisesException] - Promise<undefined> leaveGroup(DOMString ipAddress); - - readonly attribute FrozenArray<DOMString> joinedGroups; -};
diff --git a/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl b/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl index 1339ff2..f70bf1a7 100644 --- a/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl +++ b/third_party/blink/renderer/modules/direct_sockets/socket_connection.idl
@@ -11,9 +11,7 @@ dictionary TCPSocketOpenInfo : SocketOpenInfo {}; -dictionary UDPSocketOpenInfo : SocketOpenInfo { - [RuntimeEnabled=MulticastInDirectSockets] MulticastController multicastController; -}; +dictionary UDPSocketOpenInfo : SocketOpenInfo {}; dictionary TCPServerSocketOpenInfo { ReadableStream readable;
diff --git a/third_party/blink/renderer/modules/direct_sockets/socket_options.idl b/third_party/blink/renderer/modules/direct_sockets/socket_options.idl index 6985141..c9c0049 100644 --- a/third_party/blink/renderer/modules/direct_sockets/socket_options.idl +++ b/third_party/blink/renderer/modules/direct_sockets/socket_options.idl
@@ -29,11 +29,6 @@ // TODO(crbug.com/1413161): Implement ipv6Only support. boolean ipv6Only; - - [RuntimeEnabled=MulticastInDirectSockets] boolean multicastAllowAddressSharing; - - [RuntimeEnabled=MulticastInDirectSockets, EnforceRange] octet multicastTimeToLive; - [RuntimeEnabled=MulticastInDirectSockets] boolean multicastLoopback; }; dictionary TCPServerSocketOptions {
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc b/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc index d113a1c..9105c4ff 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc +++ b/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc
@@ -21,7 +21,6 @@ #include "third_party/blink/renderer/core/inspector/protocol/network.h" #include "third_party/blink/renderer/core/streams/readable_stream.h" #include "third_party/blink/renderer/core/streams/writable_stream.h" -#include "third_party/blink/renderer/modules/direct_sockets/multicast_controller.h" #include "third_party/blink/renderer/modules/direct_sockets/socket.h" #include "third_party/blink/renderer/modules/direct_sockets/stream_wrapper.h" #include "third_party/blink/renderer/modules/direct_sockets/udp_readable_stream_wrapper.h" @@ -30,7 +29,6 @@ #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h" -#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/functional.h" namespace blink { @@ -129,15 +127,6 @@ socket_options->send_buffer_size = options->sendBufferSize(); } - if (RuntimeEnabledFeatures::MulticastInDirectSocketsEnabled()) { - if (options->hasMulticastTimeToLive()) { - socket_options->multicast_time_to_live = options->multicastTimeToLive(); - } - if (options->hasMulticastLoopback()) { - socket_options->multicast_loopback = options->multicastLoopback(); - } - } - return socket_options; } @@ -191,19 +180,6 @@ socket_options->send_buffer_size = options->sendBufferSize(); } - if (RuntimeEnabledFeatures::MulticastInDirectSocketsEnabled()) { - if (options->hasMulticastAllowAddressSharing()) { - socket_options->multicast_allow_address_sharing = - options->multicastAllowAddressSharing(); - } - if (options->hasMulticastTimeToLive()) { - socket_options->multicast_time_to_live = options->multicastTimeToLive(); - } - if (options->hasMulticastLoopback()) { - socket_options->multicast_loopback = options->multicastLoopback(); - } - } - return socket_options; } @@ -454,8 +430,7 @@ if (GetState() != State::kOpen) { return false; } - return writable_stream_wrapper_->HasPendingWrite() || - multicast_controller_->HasPendingActivity(); + return writable_stream_wrapper_->HasPendingWrite(); } void UDPSocket::ContextDestroyed() { @@ -471,16 +446,10 @@ break; case Socket::State::kClosed: probe::DirectUDPSocketClosed(GetExecutionContext(), inspector_id_); - if (auto* multicast_controller = multicast_controller_.Get()) { - multicast_controller->OnCloseOrAbort(); - } break; case Socket::State::kAborted: probe::DirectUDPSocketAborted(GetExecutionContext(), inspector_id_, abort_net_error_); - if (auto* multicast_controller = multicast_controller_.Get()) { - multicast_controller->OnCloseOrAbort(); - } break; } } @@ -491,7 +460,6 @@ visitor->Trace(readable_stream_wrapper_); visitor->Trace(writable_stream_wrapper_); visitor->Trace(stream_error_); - visitor->Trace(multicast_controller_); ScriptWrappable::Trace(visitor); Socket::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_socket.h b/third_party/blink/renderer/modules/direct_sockets/udp_socket.h index 0db0c44..7e26b6c 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_socket.h +++ b/third_party/blink/renderer/modules/direct_sockets/udp_socket.h
@@ -14,7 +14,6 @@ #include "services/network/public/mojom/restricted_udp_socket.mojom-blink.h" #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_property.h" -#include "third_party/blink/renderer/modules/direct_sockets/multicast_controller.h" #include "third_party/blink/renderer/modules/direct_sockets/socket.h" #include "third_party/blink/renderer/modules/direct_sockets/udp_readable_stream_wrapper.h" #include "third_party/blink/renderer/modules/direct_sockets/udp_socket_mojo_remote.h" @@ -136,8 +135,6 @@ // Unique id for devtools inspector_network_agent. uint64_t inspector_id_ = CreateUniqueIdentifier(); - - Member<MulticastController> multicast_controller_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_request.cc b/third_party/blink/renderer/modules/indexeddb/idb_request.cc index f8ad2e1..c540fec 100644 --- a/third_party/blink/renderer/modules/indexeddb/idb_request.cc +++ b/third_party/blink/renderer/modules/indexeddb/idb_request.cc
@@ -58,6 +58,7 @@ #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/functional.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -211,8 +212,9 @@ : type_(type), start_time_(base::TimeTicks::Now()) { static std::atomic<size_t> counter(0); id_ = counter.fetch_add(1, std::memory_order_relaxed); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("IndexedDB", RequestTypeToName(type), - TRACE_ID_LOCAL(id_)); + TRACE_EVENT_BEGIN("IndexedDB", + perfetto::DynamicString(RequestTypeToName(type)), + perfetto::Track(id_)); } void IDBRequest::AsyncTraceState::WillDispatchResult(bool success) { @@ -225,8 +227,7 @@ void IDBRequest::AsyncTraceState::RecordAndReset() { if (type_) { - TRACE_EVENT_NESTABLE_ASYNC_END0("IndexedDB", RequestTypeToName(*type_), - TRACE_ID_LOCAL(id_)); + TRACE_EVENT_END("IndexedDB", perfetto::Track(id_)); type_.reset(); } }
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_request.h b/third_party/blink/renderer/modules/indexeddb/idb_request.h index d53f035e..2b6b7cd 100644 --- a/third_party/blink/renderer/modules/indexeddb/idb_request.h +++ b/third_party/blink/renderer/modules/indexeddb/idb_request.h
@@ -123,7 +123,7 @@ // to generating unique IDs in a threadsafe manner. The atomic machinery is // used when tracing is enabled. The recording problem is solved by having // instances of this class store the information needed to record async trace - // end events (via TRACE_EVENT_NESTABLE_ASYNC_END). + // end events. // // From a mechanical perspective, creating an AsyncTraceState instance records // the beginning event of an async trace. The instance is then moved into an
diff --git a/third_party/blink/renderer/modules/mediarecorder/DEPS b/third_party/blink/renderer/modules/mediarecorder/DEPS index 53e2538..1f6a4c9 100644 --- a/third_party/blink/renderer/modules/mediarecorder/DEPS +++ b/third_party/blink/renderer/modules/mediarecorder/DEPS
@@ -1,5 +1,4 @@ include_rules = [ - "+base/containers/fixed_flat_map.h", "+base/containers/queue.h", "+base/memory/read_only_shared_memory_region.h", "+base/memory/unsafe_shared_memory_region.h",
diff --git a/third_party/blink/renderer/modules/mediasource/media_source.cc b/third_party/blink/renderer/modules/mediasource/media_source.cc index 73b4a9a..5df3312 100644 --- a/third_party/blink/renderer/modules/mediasource/media_source.cc +++ b/third_party/blink/renderer/modules/mediasource/media_source.cc
@@ -57,6 +57,7 @@ #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" using blink::WebMediaSource; using blink::WebSourceBuffer; @@ -768,14 +769,10 @@ if (attachment_tracer_) { // Use of a tracer means we must be using same-thread attachment. - TRACE_EVENT_NESTABLE_ASYNC_END0( - "media", "MediaSource::StartAttachingToMediaElement", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", perfetto::Track::FromPointer(this)); } else { // Otherwise, we must be using a cross-thread MSE-in-Workers attachment. - TRACE_EVENT_NESTABLE_ASYNC_END0( - "media", "MediaSource::StartWorkerAttachingToMainThreadMediaElement", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", perfetto::Track::FromPointer(this)); } DCHECK(web_media_source); DCHECK(!web_media_source_); @@ -1403,9 +1400,8 @@ DCHECK(!context_already_destroyed_); DCHECK(IsClosed()); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("media", - "MediaSource::StartAttachingToMediaElement", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("media", "MediaSource::StartAttachingToMediaElement", + perfetto::Track::FromPointer(this)); media_source_attachment_ = attachment; attachment_tracer_ = MakeGarbageCollected<SameThreadMediaSourceTracer>(element, this); @@ -1430,9 +1426,9 @@ } DCHECK(IsClosed()); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - "media", "MediaSource::StartWorkerAttachingToMainThreadMediaElement", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("media", + "MediaSource::StartWorkerAttachingToMainThreadMediaElement", + perfetto::Track::FromPointer(this)); media_source_attachment_ = attachment; return true; }
diff --git a/third_party/blink/renderer/modules/mediasource/source_buffer.cc b/third_party/blink/renderer/modules/mediasource/source_buffer.cc index 78b18c1..ce449ae 100644 --- a/third_party/blink/renderer/modules/mediasource/source_buffer.cc +++ b/third_party/blink/renderer/modules/mediasource/source_buffer.cc
@@ -81,6 +81,7 @@ #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/math_extras.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" using blink::WebSourceBuffer; @@ -619,13 +620,13 @@ UseCounter::Count(ExecutionContext::From(script_state), WebFeature::kMediaSourceExtensionsForWebCodecs); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - "media", "SourceBuffer::appendEncodedChunks", TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("media", "SourceBuffer::appendEncodedChunks", + perfetto::Track::FromPointer(this)); if (ThrowExceptionIfRemovedOrUpdating(IsRemoved(), updating_, exception_state)) { - TRACE_EVENT_NESTABLE_ASYNC_END0( - "media", "SourceBuffer::appendEncodedChunks", TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::appendEncodedChunks*/ + perfetto::Track::FromPointer(this)); return EmptyPromise(); } @@ -732,8 +733,8 @@ double media_time = GetMediaTime(); if (!PrepareAppend(media_time, size, *exception_state)) { - TRACE_EVENT_NESTABLE_ASYNC_END0( - "media", "SourceBuffer::appendEncodedChunks", TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::appendEncodedChunks*/ + perfetto::Track::FromPointer(this)); append_encoded_chunks_resolver_ = nullptr; return; } @@ -755,8 +756,8 @@ BindOnce(&SourceBuffer::AppendEncodedChunksAsyncPart, WrapPersistent(this))); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("media", "delay", TRACE_ID_LOCAL(this), - "type", "initialDelay"); + TRACE_EVENT_BEGIN("media", "delay", perfetto::Track::FromPointer(this), + "type", "initialDelay"); } void SourceBuffer::abort(ExceptionState& exception_state) { @@ -907,8 +908,8 @@ return; } - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("media", "SourceBuffer::remove", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("media", "SourceBuffer::remove", + perfetto::Track::FromPointer(this)); // 6. If the readyState attribute of the parent media source is in the "ended" // state then run the following steps: @@ -1101,8 +1102,8 @@ ScheduleEvent(event_type_names::kUpdateend); } - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::remove", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::remove*/ + perfetto::Track::FromPointer(this)); } void SourceBuffer::AbortIfUpdating() { @@ -1139,8 +1140,8 @@ append_encoded_chunks_resolver_->GetScriptState()->GetIsolate(), DOMExceptionCode::kAbortError, "Aborted by explicit abort()")); append_encoded_chunks_resolver_ = nullptr; - TRACE_EVENT_NESTABLE_ASYNC_END0( - "media", "SourceBuffer::appendEncodedChunks", TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::appendEncodedChunks*/ + perfetto::Track::FromPointer(this)); return; } @@ -1157,8 +1158,8 @@ // SourceBuffer object. ScheduleEvent(event_type_names::kUpdateend); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::appendBuffer", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::appendBuffer*/ + perfetto::Track::FromPointer(this)); } void SourceBuffer::RemovedFromMediaSource() { @@ -1861,8 +1862,8 @@ // done by the caller. // http://w3c.github.io/media-source/#sourcebuffer-prepare-append // 3.5.4 Prepare Append Algorithm - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("media", "SourceBuffer::prepareAppend", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("media", "SourceBuffer::prepareAppend", + perfetto::Track::FromPointer(this)); // 3. If the HTMLMediaElement.error attribute is not null, then throw an // InvalidStateError exception and abort these steps. DCHECK(source_); @@ -1873,8 +1874,8 @@ MediaSource::LogAndThrowDOMException( exception_state, DOMExceptionCode::kInvalidStateError, "The HTMLMediaElement.error attribute is not null."); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::prepareAppend", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::prepareAppend*/ + perfetto::Track::FromPointer(this)); return false; } @@ -1897,13 +1898,13 @@ exception_state, "The SourceBuffer is full, and cannot free space to append additional " "buffers."); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::prepareAppend", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::prepareAppend*/ + perfetto::Track::FromPointer(this)); return false; } - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::prepareAppend", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::prepareAppend*/ + perfetto::Track::FromPointer(this)); return true; } @@ -1927,8 +1928,8 @@ void SourceBuffer::AppendBufferInternal(base::span<const unsigned char> data, ExceptionState& exception_state) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("media", "SourceBuffer::appendBuffer", - TRACE_ID_LOCAL(this), "size", data.size()); + TRACE_EVENT_BEGIN("media", "SourceBuffer::appendBuffer", + perfetto::Track::FromPointer(this), "size", data.size()); // Section 3.2 appendBuffer() // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data // @@ -1948,8 +1949,8 @@ // exception and abort these steps. if (ThrowExceptionIfRemovedOrUpdating(IsRemoved(), updating_, exception_state)) { - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::appendBuffer", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::appendBuffer*/ + perfetto::Track::FromPointer(this)); return; } @@ -1979,12 +1980,12 @@ // Finish the prepare append algorithm begun by the caller. double media_time = GetMediaTime(); if (!PrepareAppend(media_time, data.size(), *exception_state)) { - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::appendBuffer", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*SourceBuffer::appendBuffer*/ + perfetto::Track::FromPointer(this)); return; } - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("media", "prepareAsyncAppend", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("media", "prepareAsyncAppend", + perfetto::Track::FromPointer(this)); // 2. Add data to the end of the input buffer. Zero-length appends result in // just a single async segment parser loop run later, with nothing added to @@ -1993,8 +1994,8 @@ MediaSource::LogAndThrowQuotaExceededError( *exception_state, "Unable to allocate space required to buffer appended media."); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::prepareAsyncAppend", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /*prepareAsyncAppend*/ + perfetto::Track::FromPointer(this)); return; } @@ -2011,10 +2012,10 @@ FROM_HERE, BindOnce(&SourceBuffer::AppendBufferAsyncPart, WrapPersistent(this))); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "prepareAsyncAppend", - TRACE_ID_LOCAL(this)); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("media", "delay", TRACE_ID_LOCAL(this), - "type", "initialDelay"); + TRACE_EVENT_END("media", /*prepareAsyncAppend*/ + perfetto::Track::FromPointer(this)); + TRACE_EVENT_BEGIN("media", "delay", perfetto::Track::FromPointer(this), + "type", "initialDelay"); } void SourceBuffer::AppendEncodedChunksAsyncPart() { @@ -2068,10 +2069,9 @@ // TODO(crbug.com/1144908): Consider buffering |pending_chunks_to_buffer_| in // multiple async iterations if it contains many buffers. It is unclear if // this is necessary when buffering encoded chunks. - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "delay", TRACE_ID_LOCAL(this)); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("media", "appending", TRACE_ID_LOCAL(this), - "chunkCount", - pending_chunks_to_buffer_->size()); + TRACE_EVENT_END("media", /* delay */ perfetto::Track::FromPointer(this)); + TRACE_EVENT_BEGIN("media", "appending", perfetto::Track::FromPointer(this), + "chunkCount", pending_chunks_to_buffer_->size()); bool append_success = web_source_buffer_->AppendChunks( std::move(pending_chunks_to_buffer_), ×tamp_offset_); @@ -2097,9 +2097,10 @@ append_encoded_chunks_resolver_ = nullptr; } - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "appending", TRACE_ID_LOCAL(this)); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::appendEncodedChunks", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /* appending */ perfetto::Track::FromPointer(this)); + TRACE_EVENT_END("media", + /* SourceBuffer::appendEncodedChunks */ + perfetto::Track::FromPointer(this)); DVLOG(3) << __func__ << " done. this=" << this << " media_time=" << GetMediaTime() << " buffered=" @@ -2118,8 +2119,8 @@ // 1. Run the segment parser loop algorithm. // Step 2 doesn't apply since we run Step 1 synchronously here. - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "delay", TRACE_ID_LOCAL(this)); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("media", "appending", TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /* delay */ perfetto::Track::FromPointer(this)); + TRACE_EVENT_BEGIN("media", "appending", perfetto::Track::FromPointer(this)); // The segment parser loop may not consume all of the pending appended data, // and lets us know via a distinct ParseStatus result. We parse incrementally // to avoid blocking the renderer event loop for too long. Note that even in @@ -2141,10 +2142,10 @@ *GetExecutionContext()->GetTaskRunner(TaskType::kMediaElementEvent), FROM_HERE, BindOnce(&SourceBuffer::AppendBufferAsyncPart, WrapPersistent(this))); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "appending", - TRACE_ID_LOCAL(this)); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("media", "delay", TRACE_ID_LOCAL(this), - "type", "nextPieceDelay"); + TRACE_EVENT_END("media", + /* appending */ perfetto::Track::FromPointer(this)); + TRACE_EVENT_BEGIN("media", "delay", perfetto::Track::FromPointer(this), + "type", "nextPieceDelay"); return; case media::StreamParser::ParseStatus::kSuccess: // 3. Set the updating attribute to false. @@ -2162,9 +2163,9 @@ break; } - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "appending", TRACE_ID_LOCAL(this)); - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "SourceBuffer::appendBuffer", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("media", /* appending */ perfetto::Track::FromPointer(this)); + TRACE_EVENT_END("media", /*SourceBuffer::appendBuffer*/ + perfetto::Track::FromPointer(this)); double media_time = GetMediaTime(); DVLOG(3) << __func__ << " done. this=" << this << " media_time=" << media_time
diff --git a/third_party/blink/renderer/modules/mediastream/scoped_media_stream_tracer.cc b/third_party/blink/renderer/modules/mediastream/scoped_media_stream_tracer.cc index e8e7a7c..cd89e4f 100644 --- a/third_party/blink/renderer/modules/mediastream/scoped_media_stream_tracer.cc +++ b/third_party/blink/renderer/modules/mediastream/scoped_media_stream_tracer.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/modules/mediastream/scoped_media_stream_tracer.h" #include "base/trace_event/typed_macros.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -16,8 +17,9 @@ // Uses `this` as a default id as most of them can be unique. ScopedMediaStreamTracer::ScopedMediaStreamTracer(const String& event_name) : event_name_(event_name) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(kMediaStreamTraceCategory, - event_name_.Utf8().c_str(), this); + TRACE_EVENT_BEGIN(kMediaStreamTraceCategory, + perfetto::DynamicString(event_name_.Utf8().c_str()), + perfetto::Track::FromPointer(this)); } ScopedMediaStreamTracer::~ScopedMediaStreamTracer() { @@ -29,8 +31,8 @@ return; } - TRACE_EVENT_NESTABLE_ASYNC_END0(kMediaStreamTraceCategory, - event_name_.Utf8().c_str(), this); + TRACE_EVENT_END(kMediaStreamTraceCategory, + perfetto::Track::FromPointer(this)); finished_ = true; }
diff --git a/third_party/blink/renderer/modules/ml/DEPS b/third_party/blink/renderer/modules/ml/DEPS index adeb204..689bcff 100644 --- a/third_party/blink/renderer/modules/ml/DEPS +++ b/third_party/blink/renderer/modules/ml/DEPS
@@ -16,7 +16,4 @@ "+base/memory/ref_counted_memory.h", "+base/strings/stringprintf.h", ], - "ml_graph_test.cc" : [ - "+base/containers/fixed_flat_set.h", - ], } \ No newline at end of file
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc index eff817c..17860c8 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc +++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
@@ -60,6 +60,7 @@ #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -174,9 +175,9 @@ void ServiceWorkerGlobalScopeProxy::WillEvaluateScript() { DCHECK_CALLED_ON_VALID_THREAD(worker_thread_checker_); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - "ServiceWorker", "ServiceWorkerGlobalScopeProxy::EvaluateTopLevelScript", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("ServiceWorker", + "ServiceWorkerGlobalScopeProxy::EvaluateTopLevelScript", + perfetto::Track::FromPointer(this)); ScriptState::Scope scope( WorkerGlobalScope()->ScriptController()->GetScriptState()); Client().WillEvaluateScript( @@ -192,9 +193,8 @@ base::TimeTicks::Now() - top_level_script_evaluation_start_time_); WorkerGlobalScope()->DidEvaluateScript(); Client().DidEvaluateScript(success); - TRACE_EVENT_NESTABLE_ASYNC_END1( - "ServiceWorker", "ServiceWorkerGlobalScopeProxy::EvaluateTopLevelScript", - TRACE_ID_LOCAL(this), "success", success); + TRACE_EVENT_END("ServiceWorker", perfetto::Track::FromPointer(this), + "success", success); } void ServiceWorkerGlobalScopeProxy::DidCloseWorkerGlobalScope() {
diff --git a/third_party/blink/renderer/modules/webcodecs/background_readback.cc b/third_party/blink/renderer/modules/webcodecs/background_readback.cc index 1dd0834..2a8a015 100644 --- a/third_party/blink/renderer/modules/webcodecs/background_readback.cc +++ b/third_party/blink/renderer/modules/webcodecs/background_readback.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace { bool CanUseRgbReadback(media::VideoFrame& frame) { @@ -191,9 +192,9 @@ return; } - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - "media", "ReadbackRGBTextureBackedFrameToMemory", txt_frame.get(), - "timestamp", txt_frame->timestamp()); + TRACE_EVENT_BEGIN("media", "ReadbackRGBTextureBackedFrameToMemory", + perfetto::Track::FromPointer(txt_frame.get()), "timestamp", + txt_frame->timestamp()); base::span<uint8_t> dst_pixels = result->GetWritableVisiblePlaneData(media::VideoFrame::Plane::kARGB); @@ -224,9 +225,8 @@ scoped_refptr<media::VideoFrame> txt_frame, scoped_refptr<media::VideoFrame> result_frame, bool success) { - TRACE_EVENT_NESTABLE_ASYNC_END1("media", - "ReadbackRGBTextureBackedFrameToMemory", - txt_frame.get(), "success", success); + TRACE_EVENT_END("media", perfetto::Track::FromPointer(txt_frame.get()), + "success", success); if (!success) { ReadbackOnThread(std::move(txt_frame), std::move(result_cb)); return; @@ -270,9 +270,9 @@ return; } - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - "media", "ReadbackRGBTextureBackedFrameToBuffer", txt_frame.get(), - "timestamp", txt_frame->timestamp()); + TRACE_EVENT_BEGIN("media", "ReadbackRGBTextureBackedFrameToBuffer", + perfetto::Track::FromPointer(txt_frame.get()), "timestamp", + txt_frame->timestamp()); SkImageInfo info = GetImageInfoForFrame(*txt_frame, src_rect.size()); gfx::Point src_point = src_rect.origin(); @@ -299,9 +299,8 @@ base::span<uint8_t> dest_buffer, ReadbackDoneCallback done_cb, bool success) { - TRACE_EVENT_NESTABLE_ASYNC_END1("media", - "ReadbackRGBTextureBackedFrameToBuffer", - txt_frame.get(), "success", success); + TRACE_EVENT_END("media", perfetto::Track::FromPointer(txt_frame.get()), + "success", success); if (!success) { ReadbackOnThread(std::move(txt_frame), src_rect, dest_layout, dest_buffer, std::move(done_cb));
diff --git a/third_party/blink/renderer/modules/webcodecs/decoder_template.cc b/third_party/blink/renderer/modules/webcodecs/decoder_template.cc index e314147..eab6c84b 100644 --- a/third_party/blink/renderer/modules/webcodecs/decoder_template.cc +++ b/third_party/blink/renderer/modules/webcodecs/decoder_template.cc
@@ -44,6 +44,7 @@ #include "third_party/blink/renderer/platform/heap/cross_thread_handle.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" #include "third_party/blink/renderer/platform/wtf/functional.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -893,7 +894,8 @@ DCHECK(!is_tracing); is_tracing = true; #endif - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(kCategory, TraceNameFromType(), this); + TRACE_EVENT_BEGIN(kCategory, perfetto::DynamicString(TraceNameFromType()), + perfetto::Track::FromPointer(this)); } template <typename Traits> @@ -902,8 +904,8 @@ DCHECK(is_tracing); is_tracing = false; #endif - TRACE_EVENT_NESTABLE_ASYNC_END1(kCategory, TraceNameFromType(), this, - "completed", !shutting_down); + TRACE_EVENT_END(kCategory, perfetto::Track::FromPointer(this), "completed", + !shutting_down); } template <typename Traits>
diff --git a/third_party/blink/renderer/modules/webcodecs/encoder_base.cc b/third_party/blink/renderer/modules/webcodecs/encoder_base.cc index f0050eec..3e5d6b93 100644 --- a/third_party/blink/renderer/modules/webcodecs/encoder_base.cc +++ b/third_party/blink/renderer/modules/webcodecs/encoder_base.cc
@@ -480,9 +480,9 @@ DCHECK(!is_tracing); is_tracing = true; #endif - TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(kCategory, TraceNameFromType(), this, - "key_frame", is_keyframe, "timestamp", - timestamp); + TRACE_EVENT_BEGIN(kCategory, perfetto::DynamicString(TraceNameFromType()), + perfetto::Track::FromPointer(this), "key_frame", + is_keyframe, "timestamp", timestamp); } template <typename Traits> @@ -491,7 +491,8 @@ DCHECK(!is_tracing); is_tracing = true; #endif - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(kCategory, TraceNameFromType(), this); + TRACE_EVENT_BEGIN(kCategory, perfetto::DynamicString(TraceNameFromType()), + perfetto::Track::FromPointer(this)); } template <typename Traits> @@ -500,8 +501,8 @@ DCHECK(is_tracing); is_tracing = false; #endif - TRACE_EVENT_NESTABLE_ASYNC_END1(kCategory, TraceNameFromType(), this, - "aborted", aborted); + TRACE_EVENT_END(kCategory, perfetto::Track::FromPointer(this), "aborted", + aborted); } template class EncoderBase<VideoEncoderTraits>;
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc index af62186..3bcff36 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc +++ b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
@@ -978,8 +978,9 @@ CrossThreadBindOnce(metadata_fix_lambda, frame)) .Then(std::move(pool_result_cb)); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("media", "CopyRGBATextureToVideoFrame", - this, "timestamp", frame->timestamp()); + TRACE_EVENT_BEGIN("media", "CopyRGBATextureToVideoFrame", + perfetto::Track::FromPointer(this), "timestamp", + frame->timestamp()); if (accelerated_frame_pool_->CopyRGBATextureToVideoFrame( frame->coded_size(), frame->shared_image(), frame->acquire_sync_token(), gfx::ColorSpace::CreateREC709(), @@ -987,8 +988,8 @@ return true; } - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "CopyRGBATextureToVideoFrame", - this); + TRACE_EVENT_END("media", /*CopyRGBATextureToVideoFrame*/ + perfetto::Track::FromPointer(this)); // Error occurred, fall through to normal readback path below. disable_accelerated_frame_pool_ = true; @@ -1225,7 +1226,8 @@ scoped_refptr<media::VideoFrame> txt_frame, media::VideoEncoder::EncoderStatusCB done_callback, scoped_refptr<media::VideoFrame> result_frame) { - TRACE_EVENT_NESTABLE_ASYNC_END0("media", "CopyRGBATextureToVideoFrame", this); + TRACE_EVENT_END("media", /*CopyRGBATextureToVideoFrame*/ + perfetto::Track::FromPointer(this)); if (reset_count_ != request->reset_count) { return; }
diff --git a/third_party/blink/renderer/modules/xr/xr_frame_provider.cc b/third_party/blink/renderer/modules/xr/xr_frame_provider.cc index 2378703..7c60b5ce 100644 --- a/third_party/blink/renderer/modules/xr/xr_frame_provider.cc +++ b/third_party/blink/renderer/modules/xr/xr_frame_provider.cc
@@ -261,8 +261,8 @@ frame_data_time_.StartTimer(); // `this` is an okay TRACE ID here, since we are only allowed one immersive // session at a time. - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("xr", "RequestImmersiveFrame", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("xr", "RequestImmersiveFrame", + perfetto::Track::FromPointer(this)); immersive_data_provider_->GetFrameData( std::move(options), BindOnce(&XRFrameProvider::OnImmersiveFrameData, WrapWeakPersistent(this))); @@ -295,8 +295,8 @@ void XRFrameProvider::OnImmersiveFrameData( device::mojom::blink::XRFrameDataPtr data) { frame_data_time_.StopTimer(); - TRACE_EVENT_NESTABLE_ASYNC_END0("xr", "RequestImmersiveFrame", - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("xr", /*RequestImmersiveFrame*/ + perfetto::Track::FromPointer(this)); TRACE_EVENT0("gpu", "OnImmersiveFrameData"); if (data.is_null()) {
diff --git a/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.cc b/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.cc index 268187e..8450c8b 100644 --- a/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.cc +++ b/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.cc
@@ -11,6 +11,7 @@ #include "third_party/blink/renderer/modules/xr/xr_frame.h" #include "third_party/blink/renderer/modules/xr/xr_session.h" #include "third_party/blink/renderer/platform/wtf/vector.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -22,8 +23,7 @@ XRFrameRequestCallbackCollection::RegisterCallback( V8XRFrameRequestCallback* callback) { CallbackId id = ++next_callback_id_; - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("xr", "frameRequest", - TRACE_ID_LOCAL(trace_id_base_ + id)); + TRACE_EVENT_BEGIN("xr", "frameRequest", perfetto::Track(trace_id_base_ + id)); auto add_result_frame_request = callback_frame_requests_.Set(id, callback); auto add_result_async_task = callback_async_tasks_.Set( id, std::make_unique<probe::AsyncTaskContext>()); @@ -39,9 +39,8 @@ void XRFrameRequestCallbackCollection::CancelCallback(CallbackId id) { if (IsValidCallbackId(id)) { - TRACE_EVENT_NESTABLE_ASYNC_END1("xr", "frameRequest", - TRACE_ID_LOCAL(trace_id_base_ + id), - "Cancelled", true); + TRACE_EVENT_END("xr", perfetto::Track(trace_id_base_ + id), "Cancelled", + true); callback_frame_requests_.erase(id); callback_async_tasks_.erase(id); current_callback_frame_requests_.erase(id); @@ -86,8 +85,7 @@ } CHECK_NE(current_callback_async_tasks_.end(), it_async_task); - TRACE_EVENT_NESTABLE_ASYNC_END0("xr", "frameRequest", - TRACE_ID_LOCAL(trace_id_base_ + id)); + TRACE_EVENT_END("xr", perfetto::Track(trace_id_base_ + id)); probe::AsyncTask async_task(context_, it_async_task->value.get()); it_frame_request->value->InvokeAndReportException(session, timestamp, frame);
diff --git a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc index ae1e036..621804d9 100644 --- a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc +++ b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc
@@ -26,6 +26,7 @@ #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_std.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" #include "third_party/blink/renderer/platform/wtf/wtf.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -199,9 +200,8 @@ DCHECK(host_queue_->BelongsToCurrentThread()); on_async_mutation_complete_ = std::move(done_callback); int next_async_mutation_id = GetNextAsyncMutationId(); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - "cc", "AnimationWorkletMutatorDispatcherImpl::MutateAsync", - TRACE_ID_LOCAL(next_async_mutation_id)); + TRACE_EVENT_BEGIN("cc", "AnimationWorkletMutatorDispatcherImpl::MutateAsync", + perfetto::Track(next_async_mutation_id)); CrossThreadOnceClosure on_done = CrossThreadBindOnce( [](scoped_refptr<base::SingleThreadTaskRunner> host_queue, @@ -239,9 +239,8 @@ } // The trace event deos not include queuing time. It covers the interval // between dispatching the request and retrieving the results. - TRACE_EVENT_NESTABLE_ASYNC_END0( - "cc", "AnimationWorkletMutatorDispatcherImpl::MutateAsync", - TRACE_ID_LOCAL(async_mutation_id)); + TRACE_EVENT_END("cc", /*AnimationWorkletMutatorDispatcherImpl::MutateAsync*/ + perfetto::Track(async_mutation_id)); // The Async mutation duration is the total time between request and // completion, and thus includes queuing time. UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
diff --git a/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc b/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc index 7783861..9a3b4e3 100644 --- a/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc +++ b/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc
@@ -37,6 +37,7 @@ #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/platform/graphics/canvas_resource.h" #include "third_party/blink/renderer/platform/graphics/video_frame_sink_bundle.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" #include "ui/gfx/presentation_feedback.h" namespace blink { @@ -442,10 +443,9 @@ } } - TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP0( - "media", "VideoFrameSubmitter", - TRACE_ID_WITH_SCOPE("VideoFrameSubmitter", frame_token), - feedback.timestamp); + TRACE_EVENT_END("media", + perfetto::NamedTrack("VideoFrameSubmitter", frame_token), + feedback.timestamp); } base::TimeTicks deadline_min = args.frame_time + args.interval; @@ -882,15 +882,14 @@ if (video_frame && video_frame->metadata().decode_end_time.has_value()) { base::TimeTicks value = *video_frame->metadata().decode_end_time; - TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0( - "media", "VideoFrameSubmitter", - TRACE_ID_WITH_SCOPE("VideoFrameSubmitter", frame_token), value); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0( - "media", "Pre-submit buffering", - TRACE_ID_WITH_SCOPE("VideoFrameSubmitter", frame_token), value); - TRACE_EVENT_NESTABLE_ASYNC_END0( - "media", "Pre-submit buffering", - TRACE_ID_WITH_SCOPE("VideoFrameSubmitter", frame_token)); + TRACE_EVENT_BEGIN("media", "VideoFrameSubmitter", + perfetto::NamedTrack("VideoFrameSubmitter", frame_token), + value); + TRACE_EVENT_BEGIN("media", "Pre-submit buffering", + perfetto::NamedTrack("VideoFrameSubmitter", frame_token), + value); + TRACE_EVENT_END("media", /*Pre-submit buffering*/ + perfetto::NamedTrack("VideoFrameSubmitter", frame_token)); if (begin_frame_ack.frame_id.source_id == viz::BeginFrameArgs::kManualSourceId) { @@ -902,10 +901,9 @@ RecordUmaPreSubmitBufferingDelay(is_media_stream_, base::TimeTicks::Now() - value); } else { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - "media", "VideoFrameSubmitter", - TRACE_ID_WITH_SCOPE("VideoFrameSubmitter", frame_token), - "empty video frame?", !video_frame); + TRACE_EVENT_BEGIN("media", "VideoFrameSubmitter", + perfetto::NamedTrack("VideoFrameSubmitter", frame_token), + "empty video frame?", !video_frame); } // We don't assume that the ack is marked as having damage. However, we're
diff --git a/third_party/blink/renderer/platform/loader/fetch/DEPS b/third_party/blink/renderer/platform/loader/fetch/DEPS index 921a727..ec8c35f0 100644 --- a/third_party/blink/renderer/platform/loader/fetch/DEPS +++ b/third_party/blink/renderer/platform/loader/fetch/DEPS
@@ -1,5 +1,4 @@ include_rules = [ - "+base/containers/fixed_flat_set.h", "+base/containers/flat_set.h", "+components/subresource_filter/core/common/scoped_rule.h", "+net/base/auth.h",
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc index 7baf145..343a63f 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -108,6 +108,7 @@ #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/wtf.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -1267,10 +1268,8 @@ resource_request.SetInspectorId(identifier); resource_request.SetFromOriginDirtyStyleSheet( params.IsFromOriginDirtyStyleSheet()); - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - TRACE_DISABLED_BY_DEFAULT("network"), "ResourceLoad", - TRACE_ID_WITH_SCOPE("BlinkResourceID", TRACE_ID_LOCAL(identifier)), "url", - resource_request.Url()); + TRACE_EVENT_BEGIN(TRACE_DISABLED_BY_DEFAULT("network"), "ResourceLoad", + perfetto::Track(identifier), "url", resource_request.Url()); absl::Cleanup record_times = [start = base::TimeTicks::Now(), ¶ms] { base::TimeDelta elapsed = base::TimeTicks::Now() - start; base::UmaHistogramMicrosecondsTimes("Blink.Fetch.RequestResourceTime2", @@ -1525,10 +1524,8 @@ if (resource->InspectorId() != identifier || (!resource->StillNeedsLoad() && !resource->IsLoading())) { - TRACE_EVENT_NESTABLE_ASYNC_END1( - TRACE_DISABLED_BY_DEFAULT("network"), "ResourceLoad", - TRACE_ID_WITH_SCOPE("BlinkResourceID", TRACE_ID_LOCAL(identifier)), - "outcome", "Fail"); + TRACE_EVENT_END(TRACE_DISABLED_BY_DEFAULT("network"), + perfetto::Track(identifier), "outcome", "Fail"); } return resource; } @@ -2807,11 +2804,10 @@ resource->GetResourceRequest().Priority()); resource->DidChangePriority(computed_load_priority, resource_priority.intra_priority_value); - TRACE_EVENT_NESTABLE_ASYNC_INSTANT1( - TRACE_DISABLED_BY_DEFAULT("network"), "ResourcePrioritySet", - TRACE_ID_WITH_SCOPE("BlinkResourceID", - TRACE_ID_LOCAL(resource->InspectorId())), - "data", CreateTracedValueWithPriority(computed_load_priority)); + TRACE_EVENT_INSTANT(TRACE_DISABLED_BY_DEFAULT("network"), + "ResourcePrioritySet", + perfetto::Track(resource->InspectorId()), "data", + CreateTracedValueWithPriority(computed_load_priority)); DCHECK(!IsDetached()); resource_load_observer_->DidChangePriority( resource->InspectorId(), computed_load_priority, @@ -3522,11 +3518,10 @@ void ResourceFetcher::ResourcePrepareHelper::RecordTrace() { const ResourceRequest& resource_request = params_.GetResourceRequest(); - TRACE_EVENT_NESTABLE_ASYNC_INSTANT1( - TRACE_DISABLED_BY_DEFAULT("network"), "ResourcePrioritySet", - TRACE_ID_WITH_SCOPE("BlinkResourceID", - TRACE_ID_LOCAL(resource_request.InspectorId())), - "priority", resource_request.Priority()); + TRACE_EVENT_INSTANT(TRACE_DISABLED_BY_DEFAULT("network"), + "ResourcePrioritySet", + perfetto::Track(resource_request.InspectorId()), + "priority", resource_request.Priority()); } } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc index e787ff2..35a646a 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -103,6 +103,7 @@ #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/shared_buffer.h" #include "third_party/blink/renderer/platform/wtf/text/strcat.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" #include "url/url_constants.h" namespace blink { @@ -1082,10 +1083,9 @@ } void ResourceLoader::DidFinishLoadingFirstPartInMultipart() { - TRACE_EVENT_NESTABLE_ASYNC_END1( - TRACE_DISABLED_BY_DEFAULT("network"), "ResourceLoad", - TRACE_ID_WITH_SCOPE("BlinkResourceID", - TRACE_ID_LOCAL(resource_->InspectorId())), + TRACE_EVENT_END( + TRACE_DISABLED_BY_DEFAULT("network"), + perfetto::NamedTrack("BlinkResourceID", resource_->InspectorId()), "outcome", RequestOutcomeToString(RequestOutcome::kSuccess)); fetcher_->HandleLoaderFinish(resource_.Get(), base::TimeTicks(), @@ -1132,10 +1132,9 @@ deferred_finish_loading_info_ = std::nullopt; finished_ = true; - TRACE_EVENT_NESTABLE_ASYNC_END1( - TRACE_DISABLED_BY_DEFAULT("network"), "ResourceLoad", - TRACE_ID_WITH_SCOPE("BlinkResourceID", - TRACE_ID_LOCAL(resource_->InspectorId())), + TRACE_EVENT_END( + TRACE_DISABLED_BY_DEFAULT("network"), + perfetto::NamedTrack("BlinkResourceID", resource_->InspectorId()), "outcome", RequestOutcomeToString(RequestOutcome::kSuccess)); fetcher_->HandleLoaderFinish(resource_.Get(), response_end_time, @@ -1219,10 +1218,9 @@ deferred_finish_loading_info_ = std::nullopt; finished_ = true; - TRACE_EVENT_NESTABLE_ASYNC_END1( - TRACE_DISABLED_BY_DEFAULT("network"), "ResourceLoad", - TRACE_ID_WITH_SCOPE("BlinkResourceID", - TRACE_ID_LOCAL(resource_->InspectorId())), + TRACE_EVENT_END( + TRACE_DISABLED_BY_DEFAULT("network"), + perfetto::NamedTrack("BlinkResourceID", resource_->InspectorId()), "outcome", RequestOutcomeToString(RequestOutcome::kFail)); // Set Now() as the response time, in case a more accurate one wasn't set in
diff --git a/third_party/blink/renderer/platform/media/cdm_session_adapter.cc b/third_party/blink/renderer/platform/media/cdm_session_adapter.cc index e10dde0d..490c917 100644 --- a/third_party/blink/renderer/platform/media/cdm_session_adapter.cc +++ b/third_party/blink/renderer/platform/media/cdm_session_adapter.cc
@@ -22,6 +22,7 @@ #include "third_party/blink/renderer/platform/media/create_cdm_uma_helper.h" #include "third_party/blink/renderer/platform/media/web_content_decryption_module_session_impl.h" #include "third_party/blink/renderer/platform/wtf/functional.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -35,8 +36,8 @@ void CdmSessionAdapter::CreateCdm(media::CdmFactory* cdm_factory, const media::CdmConfig& cdm_config, WebCdmCreatedCB web_cdm_created_cb) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("media", "CdmSessionAdapter::CreateCdm", - ++trace_id_); + TRACE_EVENT_BEGIN("media", "CdmSessionAdapter::CreateCdm", + perfetto::Track(++trace_id_)); base::TimeTicks start_time = base::TimeTicks::Now(); @@ -165,9 +166,8 @@ << (cdm ? "success" : "failure (" + base::ToString(status) + ")"); DCHECK(!cdm_); - TRACE_EVENT_NESTABLE_ASYNC_END2("media", "CdmSessionAdapter::CreateCdm", - trace_id_, "success", base::ToString(cdm), - "status", status); + TRACE_EVENT_END("media", perfetto::Track(trace_id_), "success", + base::ToString(cdm), "status", status); auto key_system_uma_prefix = GetUMAPrefixForCdm(cdm_config); ReportCreateCdmStatusUMA(key_system_uma_prefix, cdm != nullptr, status);
diff --git a/third_party/blink/renderer/platform/p2p/socket_client_impl.cc b/third_party/blink/renderer/platform/p2p/socket_client_impl.cc index f3171b2..152261f 100644 --- a/third_party/blink/renderer/platform/p2p/socket_client_impl.cc +++ b/third_party/blink/renderer/platform/p2p/socket_client_impl.cc
@@ -9,11 +9,13 @@ #include "base/metrics/histogram_macros.h" #include "base/time/time.h" #include "base/trace_event/common/trace_event_common.h" +#include "base/trace_event/trace_event.h" #include "crypto/random.h" #include "services/network/public/cpp/p2p_param_traits.h" #include "third_party/blink/renderer/platform/p2p/socket_client_delegate.h" #include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h" #include "third_party/blink/renderer/platform/wtf/functional.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace { @@ -96,7 +98,7 @@ base::span<const uint8_t> data, const webrtc::AsyncSocketPacketOptions& options, uint64_t packet_id) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("p2p", "Send", packet_id); + TRACE_EVENT_BEGIN("p2p", "Send", perfetto::Track(packet_id)); // Conditionally start or continue temporarily storing the packets of a batch. // We can't allow sending individual packets mid batch since we would receive
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index fb078ed8..9c22dfd8 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1861,7 +1861,7 @@ { // https://chromestatus.com/feature/5067126381215744 name: "DocumentActiveViewTransition", - status: "experimental", + status: "stable", }, { name: "DocumentCookie", @@ -4104,9 +4104,7 @@ // https://chromestatus.com/feature/4771962874363904 { name: "RouteMatching", - status: { - "default": "test", - }, + status: "test", }, { name: "RtcAudioJitterBufferMaxPackets", @@ -5216,6 +5214,10 @@ status: "test", }, { + name: "UsePersistentCacheForCodeCache", + status: "test", + }, + { name: "UsePositionForPointInFlexibleBoxWithSingleChildElement", status: "stable", },
diff --git a/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc b/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc index 9a490fd..35c229d1 100644 --- a/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc +++ b/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.h" #include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { namespace scheduler { @@ -35,10 +36,9 @@ void BackForwardCacheDisablingFeatureTracker::Reset() { for (const auto& it : back_forward_cache_disabling_feature_counts_) { - TRACE_EVENT_NESTABLE_ASYNC_END0( - "renderer.scheduler", "ActiveSchedulerTrackedFeature", - TRACE_ID_LOCAL(reinterpret_cast<intptr_t>(this) ^ - static_cast<int>(it.first))); + TRACE_EVENT_END("renderer.scheduler", + perfetto::Track(reinterpret_cast<intptr_t>(this) ^ + static_cast<int>(it.first))); } back_forward_cache_disabling_feature_counts_.clear(); @@ -142,17 +142,16 @@ } switch (tracing_type) { case TracingType::kBegin: - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - "renderer.scheduler", "ActiveSchedulerTrackedFeature", - TRACE_ID_LOCAL(reinterpret_cast<intptr_t>(this) ^ - static_cast<int>(traced_feature)), - "feature", FeatureToHumanReadableString(traced_feature)); + TRACE_EVENT_BEGIN("renderer.scheduler", "ActiveSchedulerTrackedFeature", + perfetto::Track(reinterpret_cast<intptr_t>(this) ^ + static_cast<int>(traced_feature)), + "feature", + FeatureToHumanReadableString(traced_feature)); break; case TracingType::kEnd: - TRACE_EVENT_NESTABLE_ASYNC_END0( - "renderer.scheduler", "ActiveSchedulerTrackedFeature", - TRACE_ID_LOCAL(reinterpret_cast<intptr_t>(this) ^ - static_cast<int>(traced_feature))); + TRACE_EVENT_END("renderer.scheduler", + perfetto::Track(reinterpret_cast<intptr_t>(this) ^ + static_cast<int>(traced_feature))); break; } }
diff --git a/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc b/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc index eba626a..3c6b28c 100644 --- a/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc +++ b/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc
@@ -17,6 +17,7 @@ #include "third_party/blink/renderer/platform/scheduler/common/blink_scheduler_single_thread_task_runner.h" #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h" #include "third_party/blink/renderer/platform/scheduler/common/task_priority.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { namespace scheduler { @@ -398,14 +399,14 @@ running_idle_task_for_tracing_ = false; if (!idle_period_deadline_.is_null() && now > idle_period_deadline_) { if (last_sub_trace_event_name_) { - TRACE_EVENT_NESTABLE_ASYNC_END0("renderer.scheduler", - last_sub_trace_event_name_, - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("renderer.scheduler", + perfetto::Track(reinterpret_cast<uint64_t>(this))); } last_sub_trace_event_name_ = "DeadlineOverrun"; - TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0( - "renderer.scheduler", last_sub_trace_event_name_, - TRACE_ID_LOCAL(this), + TRACE_EVENT_BEGIN( + "renderer.scheduler", + perfetto::StaticString(last_sub_trace_event_name_), + perfetto::Track(reinterpret_cast<uint64_t>(this)), std::max(idle_period_deadline_, last_idle_task_trace_time_)); } } @@ -413,9 +414,11 @@ if (new_state != IdlePeriodState::kNotInIdlePeriod) { if (!idle_period_trace_event_started_) { idle_period_trace_event_started_ = true; - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - "renderer.scheduler", idle_period_tracing_name_, TRACE_ID_LOCAL(this), - "idle_period_length_ms", (new_deadline - now).InMillisecondsF()); + TRACE_EVENT_BEGIN("renderer.scheduler", + perfetto::StaticString(idle_period_tracing_name_), + perfetto::Track(reinterpret_cast<uint64_t>(this)), + "idle_period_length_ms", + (new_deadline - now).InMillisecondsF()); } const char* new_sub_trace_event_name = nullptr; @@ -443,23 +446,22 @@ if (new_sub_trace_event_name) { if (last_sub_trace_event_name_) { - TRACE_EVENT_NESTABLE_ASYNC_END0("renderer.scheduler", - last_sub_trace_event_name_, - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("renderer.scheduler", + perfetto::Track(reinterpret_cast<uint64_t>(this))); } - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0( - "renderer.scheduler", new_sub_trace_event_name, TRACE_ID_LOCAL(this)); + TRACE_EVENT_BEGIN("renderer.scheduler", + perfetto::StaticString(new_sub_trace_event_name), + perfetto::Track(reinterpret_cast<uint64_t>(this))); last_sub_trace_event_name_ = new_sub_trace_event_name; } } else if (idle_period_trace_event_started_) { if (last_sub_trace_event_name_) { - TRACE_EVENT_NESTABLE_ASYNC_END0("renderer.scheduler", - last_sub_trace_event_name_, - TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("renderer.scheduler", + perfetto::Track(reinterpret_cast<uint64_t>(this))); last_sub_trace_event_name_ = nullptr; } - TRACE_EVENT_NESTABLE_ASYNC_END0( - "renderer.scheduler", idle_period_tracing_name_, TRACE_ID_LOCAL(this)); + TRACE_EVENT_END("renderer.scheduler", + perfetto::Track(reinterpret_cast<uint64_t>(this))); idle_period_trace_event_started_ = false; } }
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc index e9fcec4..0663430 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
@@ -64,6 +64,7 @@ #include "third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.h" #include "third_party/blink/renderer/platform/scheduler/public/event_loop.h" #include "third_party/blink/renderer/platform/wtf/functional.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" #include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_renderer_scheduler_state.pbzero.h" #include "third_party/perfetto/protos/perfetto/trace/track_event/track_event.pbzero.h" #include "v8/include/v8.h" @@ -2135,10 +2136,11 @@ trace_event_scope_id = this; } - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), trace_event_scope_name, - trace_event_scope_id, "agent_group_scheduler", - static_cast<void*>(next_agent_group_scheduler)); + TRACE_EVENT_BEGIN( + TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), + perfetto::StaticString(trace_event_scope_name), + perfetto::Track(reinterpret_cast<uint64_t>(trace_event_scope_id)), + "agent_group_scheduler", static_cast<void*>(next_agent_group_scheduler)); AgentGroupScheduler* previous_agent_group_scheduler = current_agent_group_scheduler_; @@ -2194,10 +2196,10 @@ current_agent_group_scheduler_ = agent_group_scheduler_scope.previous_agent_group_scheduler; - TRACE_EVENT_NESTABLE_ASYNC_END1( + TRACE_EVENT_END( TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), - agent_group_scheduler_scope.trace_event_scope_name, - agent_group_scheduler_scope.trace_event_scope_id.get(), + perfetto::Track(reinterpret_cast<uint64_t>( + agent_group_scheduler_scope.trace_event_scope_id.get())), "agent_group_scheduler", static_cast<void*>( agent_group_scheduler_scope.current_agent_group_scheduler));
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc b/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc index 6490d04..2c9546a 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc
@@ -7,6 +7,7 @@ #include "base/trace_event/trace_event.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h" #include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -64,9 +65,9 @@ if (virtual_time_enabled_when_paused_) { // This trace event shows when individual pausers are active (instead of the // global paused/unpaused state). - TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( - "renderer.scheduler", "WebScopedVirtualTimePauser::PauseVirtualTime", - trace_id_, "name", debug_name_.Latin1()); + TRACE_EVENT_BEGIN("renderer.scheduler", + "WebScopedVirtualTimePauser::PauseVirtualTime", + perfetto::Track(trace_id_), "name", debug_name_.Latin1()); } virtual_time_when_paused_ = scheduler_->IncrementVirtualTimePauseCount(); } @@ -86,9 +87,7 @@ base::Milliseconds(10)); } if (virtual_time_enabled_when_paused_) { - TRACE_EVENT_NESTABLE_ASYNC_END0( - "renderer.scheduler", "WebScopedVirtualTimePauser::PauseVirtualTime", - trace_id_); + TRACE_EVENT_END("renderer.scheduler", perfetto::Track(trace_id_)); } }
diff --git a/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc b/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc index be913da..63a05908 100644 --- a/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc +++ b/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc
@@ -36,6 +36,7 @@ #include "gpu/ipc/client/client_shared_image_interface.h" #include "third_party/blink/public/common/switches.h" #include "third_party/blink/public/platform/platform.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" #include "third_party/skia/include/core/SkCanvas.h" #include "ui/gfx/geometry/rect_conversions.h" #include "ui/gfx/geometry/skia_conversions.h" @@ -617,10 +618,10 @@ bool needs_begin_frames) { if (needs_begin_frames_ != needs_begin_frames) { if (needs_begin_frames) { - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("cc,benchmark", "NeedsBeginFrames", - this); + TRACE_EVENT_BEGIN("cc,benchmark", "NeedsBeginFrames", + perfetto::Track::FromPointer(this)); } else { - TRACE_EVENT_NESTABLE_ASYNC_END0("cc,benchmark", "NeedsBeginFrames", this); + TRACE_EVENT_END("cc,benchmark", perfetto::Track::FromPointer(this)); } } needs_begin_frames_ = needs_begin_frames;
diff --git a/third_party/blink/renderer/platform/widget/input/compositor_thread_event_queue.cc b/third_party/blink/renderer/platform/widget/input/compositor_thread_event_queue.cc index a223fe5..5602166a 100644 --- a/third_party/blink/renderer/platform/widget/input/compositor_thread_event_queue.cc +++ b/third_party/blink/renderer/platform/widget/input/compositor_thread_event_queue.cc
@@ -7,6 +7,7 @@ #include "base/trace_event/trace_event.h" #include "cc/metrics/event_metrics.h" #include "third_party/blink/public/common/input/web_input_event_attribution.h" +#include "third_party/perfetto/include/perfetto/tracing/track.h" namespace blink { @@ -66,9 +67,9 @@ if (new_event->first_original_event()) { // Trace could be nested as there might be multiple events in queue. // e.g. |ScrollUpdate|, |ScrollEnd|, and another scroll sequence. - TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("input", - "CompositorThreadEventQueue::Queue", - new_event->first_original_event()); + TRACE_EVENT_BEGIN( + "input", "CompositorThreadEventQueue::Queue", + perfetto::Track::FromPointer(new_event->first_original_event())); } queue_.push_back(std::move(new_event)); return; @@ -187,10 +188,10 @@ queue_.pop_front(); if (result->first_original_event()) { - TRACE_EVENT_NESTABLE_ASYNC_END2( - "input", "CompositorThreadEventQueue::Queue", - result->first_original_event(), "type", result->event().GetType(), - "coalesced_count", result->coalesced_count()); + TRACE_EVENT_END( + "input", perfetto::Track::FromPointer(result->first_original_event()), + "type", result->event().GetType(), "coalesced_count", + result->coalesced_count()); } return result; }
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 03a93f0..77192d42 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -2423,7 +2423,7 @@ "arichiv@chromium.org", "johannhof@chromium.org" ], - "expires": "Sep 1, 2025" + "expires": "Mar 1, 2026" }, { "prefix": "permission-element",
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index 30624e8..07981fe1 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -1713,6 +1713,7 @@ attribute @@unscopables getter URL getter activeElement + getter activeViewTransition getter adoptedStyleSheets getter alinkColor getter all
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index f5d6354..194053a 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -1035,6 +1035,9 @@ setter x setter y setter z +interface CSSRouteRule : CSSConditionRule + attribute @@toStringTag + method constructor interface CSSRule attribute @@toStringTag attribute CHARSET_RULE
diff --git a/third_party/blink/web_tests/external/wpt/route/crashtests/routemap-src.html b/third_party/blink/web_tests/wpt_internal/route/crashtests/routemap-src.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/route/crashtests/routemap-src.html rename to third_party/blink/web_tests/wpt_internal/route/crashtests/routemap-src.html
diff --git a/third_party/blink/web_tests/wpt_internal/route/routemap-001.html b/third_party/blink/web_tests/wpt_internal/route/routemap-001.html new file mode 100644 index 0000000..4a97583 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/route/routemap-001.html
@@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title>Simple routemap with one matching and one non-matching route</title> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://github.com/WICG/declarative-partial-updates?tab=readme-ov-file#part-2-route-matching"> +<!-- Assuming here that "route" is part of the test path. --> +<script type="routemap"> + { + "routes": [ + { + "name": "r1", + "pattern": [ "route" ] + }, + { + "name": "r2", + "pattern": [ "should-not-match" ] + } + ] + } +</script> +<style> + #target { + display: none; + } + @route r1 { + #target { + display: block; + width: 100px; + height: 100px; + background: green; + } + } + @route r2 { + #target { + border: 10px solid red; + } + } +</style> +<div id="target"></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + test(()=> { + assert_equals(target.offsetWidth, 100); + assert_equals(target.offsetHeight, 100); + assert_equals(getComputedStyle(target).borderStyle, "none"); + }, "Only route r1 should match"); +</script>
diff --git a/third_party/blink/web_tests/wpt_internal/route/routemap-002.html b/third_party/blink/web_tests/wpt_internal/route/routemap-002.html new file mode 100644 index 0000000..a76db82 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/route/routemap-002.html
@@ -0,0 +1,60 @@ +<!DOCTYPE html> +<title>Set new URL, then go back</title> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://github.com/WICG/declarative-partial-updates?tab=readme-ov-file#part-2-route-matching"> +<!-- Assuming here that "route" is part of the test path. --> +<script type="routemap"> + { + "routes": [ + { + "name": "r1", + "pattern": [ "route" ] + }, + { + "name": "r2", + "pattern": [ "match-later" ] + } + ] + } +</script> +<style> + #target { + width: 7px; + height: 7px; + } + + @route r1 { + #target { + width: 100px; + } + } + + @route r2 { + #target { + height: 100px; + } + } +</style> +<div id="target"></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + test(()=> { + assert_equals(getComputedStyle(target).width, "100px"); + assert_equals(getComputedStyle(target).height, "7px"); + }, "Initially only route r1 should match"); + + test(()=> { + history.pushState(0, null, "match-later"); + assert_equals(getComputedStyle(target).width, "100px"); + assert_equals(getComputedStyle(target).height, "100px"); + }, "Both routes should match"); + + promise_test(async t => { + window.onpopstate = t.step_func_done(() => { + assert_equals(getComputedStyle(target).width, "100px"); + assert_equals(getComputedStyle(target).height, "7px"); + }); + history.back(); + }, "Going back again, only route r1 should match"); +</script>
diff --git a/third_party/blink/web_tests/wpt_internal/route/routemap-003.html b/third_party/blink/web_tests/wpt_internal/route/routemap-003.html new file mode 100644 index 0000000..fac91b7 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/route/routemap-003.html
@@ -0,0 +1,43 @@ +<!DOCTYPE html> +<title>Set new URL, add @route rule</title> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://github.com/WICG/declarative-partial-updates?tab=readme-ov-file#part-2-route-matching"> +<script type="routemap"> + { + "routes": [ + { + "name": "r1", + "pattern": [ "match-later" ] + } + ] + } +</script> +<style id="sheetElm"> + #target { + width: 7px; + } +</style> +<div id="target"></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + test(()=> { + assert_equals(getComputedStyle(target).width, "7px"); + }, "Initially no match"); + + test(()=> { + history.pushState(0, null, "match-later"); + sheetElm.sheet.insertRule("@route r1 { #target { width: 100px; } }", 1); + assert_equals(getComputedStyle(target).width, "100px"); + }, "New URL, add route rule"); + + test(()=> { + sheetElm.sheet.deleteRule(1); + assert_equals(getComputedStyle(target).width, "7px"); + }, "Remove route rule"); + + test(()=> { + sheetElm.sheet.insertRule("@route r1 { #target { width: 200px; } }", 1); + assert_equals(getComputedStyle(target).width, "200px"); + }, "Add route rule again"); +</script>
diff --git a/third_party/dawn b/third_party/dawn index 6bab1bd..b0a54bf 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit 6bab1bd9fd23c03ab2b0f26e9b489e0b6b1844f2 +Subproject commit b0a54bfe2da42392af08f2cfa3d9cf023650a61e
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index c6af98d..5c0782b 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit c6af98d7a7a5cdb38791e6861f6e75cc98251ca7 +Subproject commit 5c0782b1ec316a185616cd76223d66c8b2b4dbbb
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index 2c6546fe..e674242 100644 --- a/third_party/freetype/README.chromium +++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@ Name: FreeType URL: http://www.freetype.org/ -Version: VER-2-13-3-320-g61a423426 -Revision: 61a423426089e65c27699d824303f209026b2f05 +Version: VER-2-13-3-321-gc6cf32de3 +Revision: c6cf32de3b3582d0eea9f6372121f0f07d22ae68 CPEPrefix: cpe:/a:freetype:freetype:2.13.3 License: FTL License File: src/docs/FTL.TXT
diff --git a/third_party/freetype/src b/third_party/freetype/src index 61a4234..c6cf32d 160000 --- a/third_party/freetype/src +++ b/third_party/freetype/src
@@ -1 +1 @@ -Subproject commit 61a423426089e65c27699d824303f209026b2f05 +Subproject commit c6cf32de3b3582d0eea9f6372121f0f07d22ae68
diff --git a/third_party/libc++/src b/third_party/libc++/src index 65a5746..23b5bc9 160000 --- a/third_party/libc++/src +++ b/third_party/libc++/src
@@ -1 +1 @@ -Subproject commit 65a5746fb4cc5fd7fdd1773b0c50bc556ff8900a +Subproject commit 23b5bc93867b93b73f7be97cf2e8a71e95770e07
diff --git a/third_party/perfetto b/third_party/perfetto index 9e99848..d17b40b 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit 9e99848ef108842c9c6f1fefe5bf8d4fd44c8496 +Subproject commit d17b40b3b5e36f3744f1d010fe3ba2d3c55559c0
diff --git a/third_party/skia b/third_party/skia index 4cc541b..359f3d7 160000 --- a/third_party/skia +++ b/third_party/skia
@@ -1 +1 @@ -Subproject commit 4cc541b8014920519c812cca60d48c584a9a7425 +Subproject commit 359f3d7cc7edfcb93e99ab5ed7e9f2f5fdd8ef85
diff --git a/third_party/webrtc b/third_party/webrtc index 3f6f3de..db0e64c 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit 3f6f3decfcf874544fd2afff11e0c26bdf9b6fdb +Subproject commit db0e64c5e80168839d74ae0cc6173ccd537ae211
diff --git a/tools/android/logcat_filtering/index.html b/tools/android/logcat_filtering/index.html index 0ab1fdf..56fc685 100644 --- a/tools/android/logcat_filtering/index.html +++ b/tools/android/logcat_filtering/index.html
@@ -32,40 +32,6 @@ <input type="button" id="paste-logcat-button" class="hidden-element"> </div> - <div class="button-with-feedback"> - <label for="next-exception-button" class="google-button"> - <i class="material-icons">error</i> Jump to Next Exception - </label> - <input type="button" id="next-exception-button" class="hidden-element"> - <span id="next-exception-feedback" - class="feedback-text hidden-element"></span> - </div> - - <div class="button-with-feedback"> - <label for="prev-exception-button" class="google-button"> - <i class="material-icons">error</i> Jump to Previous Exception - </label> - <input type="button" id="prev-exception-button" class="hidden-element"> - <span id="prev-exception-feedback" - class="feedback-text hidden-element"></span> - </div> - - <div class="button-with-feedback"> - <label for="next-test-button" class="google-button"> - <i class="material-icons">rule</i> Jump to Next Test - </label> - <input type="button" id="next-test-button" class="hidden-element"> - <span id="next-test-feedback" class="feedback-text hidden-element"></span> - </div> - - <div class="button-with-feedback"> - <label for="prev-test-button" class="google-button"> - <i class="material-icons">rule</i> Jump to Previous Test - </label> - <input type="button" id="prev-test-button" class="hidden-element"> - <span id="prev-test-feedback" class="feedback-text hidden-element"></span> - </div> - <div class="dropdown"> <div id="dropdown-header-process" class="dropdown-header"> <i class="material-icons">memory</i> Filter Logcat By Process @@ -142,6 +108,40 @@ </ol> </div> + <div class="button-with-feedback"> + <label for="next-exception-button" class="google-button"> + <i class="material-icons">error</i> Jump to Next Exception + </label> + <input type="button" id="next-exception-button" class="hidden-element"> + <span id="next-exception-feedback" + class="feedback-text hidden-element"></span> + </div> + + <div class="button-with-feedback"> + <label for="prev-exception-button" class="google-button"> + <i class="material-icons">error</i> Jump to Previous Exception + </label> + <input type="button" id="prev-exception-button" class="hidden-element"> + <span id="prev-exception-feedback" + class="feedback-text hidden-element"></span> + </div> + + <div class="button-with-feedback"> + <label for="next-test-button" class="google-button"> + <i class="material-icons">rule</i> Jump to Next Test + </label> + <input type="button" id="next-test-button" class="hidden-element"> + <span id="next-test-feedback" class="feedback-text hidden-element"></span> + </div> + + <div class="button-with-feedback"> + <label for="prev-test-button" class="google-button"> + <i class="material-icons">rule</i> Jump to Previous Test + </label> + <input type="button" id="prev-test-button" class="hidden-element"> + <span id="prev-test-feedback" class="feedback-text hidden-element"></span> + </div> + <div id="checkbox-controls"> <div class="checkbox-column"> <label> @@ -159,15 +159,15 @@ <span>Display Non Logcat Lines</span> </label> <label> - <input type="checkbox" id="toggle-dark-mode-checkbox"> - <span>Toggle Dark Mode</span> + <input type="checkbox" + id="always-show-activity-manager-checkbox" checked> + <span>Always Show ActivityManager</span> </label> </div> <div class="checkbox-column"> <label> - <input type="checkbox" - id="always-show-activity-manager-checkbox" checked> - <span>Always Show ActivityManager</span> + <input type="checkbox" id="toggle-dark-mode-checkbox"> + <span>Toggle Dark Mode</span> </label> </div> </div>
diff --git a/tools/android/logcat_filtering/script.js b/tools/android/logcat_filtering/script.js index f20069c2..a367378f 100644 --- a/tools/android/logcat_filtering/script.js +++ b/tools/android/logcat_filtering/script.js
@@ -35,16 +35,6 @@ const pasteLogcatButton = document.getElementById('paste-logcat-button'); const pasteLogcatButtonLabel = document.querySelector( 'label[for="paste-logcat-button"]'); -const nextExceptionButton = document.getElementById('next-exception-button'); -const nextExceptionFeedback = document.getElementById( - 'next-exception-feedback'); -const prevExceptionButton = document.getElementById('prev-exception-button'); -const prevExceptionFeedback = document.getElementById( - 'prev-exception-feedback'); -const nextTestButton = document.getElementById('next-test-button'); -const nextTestFeedback = document.getElementById('next-test-feedback'); -const prevTestButton = document.getElementById('prev-test-button'); -const prevTestFeedback = document.getElementById('prev-test-feedback'); const dropdownHeaderProcess = document.getElementById( 'dropdown-header-process'); const dropdownSearchProcess = document.getElementById( @@ -56,14 +46,24 @@ const dropdownHeaderPriority = document.getElementById( 'dropdown-header-priority'); const dropdownListPriority = document.getElementById('dropdown-list-priority'); +const nextExceptionButton = document.getElementById('next-exception-button'); +const nextExceptionFeedback = document.getElementById( + 'next-exception-feedback'); +const prevExceptionButton = document.getElementById('prev-exception-button'); +const prevExceptionFeedback = document.getElementById( + 'prev-exception-feedback'); +const nextTestButton = document.getElementById('next-test-button'); +const nextTestFeedback = document.getElementById('next-test-feedback'); +const prevTestButton = document.getElementById('prev-test-button'); +const prevTestFeedback = document.getElementById('prev-test-feedback'); const hideDateTimeCheckbox = document.getElementById('hide-date-time-checkbox'); const wrapTextCheckbox = document.getElementById('wrap-text-checkbox'); const displayNonLogcatCheckbox = document.getElementById( 'display-non-logcat-checkbox'); -const toggleDarkModeCheckbox = document.getElementById( - 'toggle-dark-mode-checkbox'); const alwaysShowActivityManagerCheckbox = document.getElementById( 'always-show-activity-manager-checkbox'); +const toggleDarkModeCheckbox = document.getElementById( + 'toggle-dark-mode-checkbox'); const textDisplayArea = document.getElementById('text-display-area'); // Event listeners: @@ -72,14 +72,6 @@ pasteLogcatButton.addEventListener('click', handlePasteLogcatButtonClick); -nextExceptionButton.addEventListener('click', jumpToNextException); - -prevExceptionButton.addEventListener('click', jumpToPreviousException); - -nextTestButton.addEventListener('click', jumpToNextTest); - -prevTestButton.addEventListener('click', jumpToPreviousTest); - dropdownHeaderProcess.addEventListener('click', (event) => { // Prevent this click from propagating to the document event.stopPropagation(); @@ -114,6 +106,14 @@ dropdownListPriority.addEventListener('click', handlePriorityFilterOptionClick); +nextExceptionButton.addEventListener('click', jumpToNextException); + +prevExceptionButton.addEventListener('click', jumpToPreviousException); + +nextTestButton.addEventListener('click', jumpToNextTest); + +prevTestButton.addEventListener('click', jumpToPreviousTest); + hideDateTimeCheckbox.addEventListener('change', updateTextDisplayArea); wrapTextCheckbox.addEventListener('change', () => { @@ -129,6 +129,9 @@ displayNonLogcatCheckbox.addEventListener('change', updateTextDisplayArea); +alwaysShowActivityManagerCheckbox.addEventListener('change', + updateTextDisplayArea); + toggleDarkModeCheckbox.addEventListener('change', () => { const isDarkMode = toggleDarkModeCheckbox.checked; if (isDarkMode) { @@ -140,9 +143,6 @@ } }); -alwaysShowActivityManagerCheckbox.addEventListener('change', - updateTextDisplayArea); - // Global click listener to close dropdowns when clicking outside document.addEventListener('click', (event) => { document.querySelectorAll('.dropdown-list').forEach(dropdown => {
diff --git a/tools/gritsettings/translation_expectations.pyl b/tools/gritsettings/translation_expectations.pyl index 7535405..3dc6085 100644 --- a/tools/gritsettings/translation_expectations.pyl +++ b/tools/gritsettings/translation_expectations.pyl
@@ -143,6 +143,6 @@ "internal_grds": [ # Test grd that contains a part file that doesn't exist. "tools/translation/testdata/internal.grd", - "third_party/search_engines_data/resources_internal/search_engine_descriptions_strings.grd": "The strings are already translated when provided", + "third_party/search_engines_data/resources_internal/search_engine_descriptions_strings.grd", ], }
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index 8d316ec..739944c 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -4721,6 +4721,9 @@ </action> <action name="Autofill_PolledCreditCardSuggestions"> + <obsolete> + Deprecated as of 09/2025. All suggestions generators always poll the data + </obsolete> <owner>battre@chromium.org</owner> <description> This user action is logged when the user interacts with an autofillable @@ -4729,6 +4732,9 @@ </action> <action name="Autofill_PolledLoyaltyCardSuggestions"> + <obsolete> + Deprecated as of 09/2025. All suggestions generators always poll the data + </obsolete> <owner>vizcay@google.com</owner> <description> This user action is logged when the user interacts with an autofillable @@ -4737,6 +4743,9 @@ </action> <action name="Autofill_PolledProfileSuggestions"> + <obsolete> + Deprecated as of 09/2025. All suggestions generators always poll the data + </obsolete> <owner>battre@chromium.org</owner> <description> This user action is logged when the user interacts with an autofillable @@ -4836,8 +4845,7 @@ <owner>battre@chromium.org</owner> <description> This user action is logged when the user is shown some credit card - suggestions. This should always happen after a - Autofill_PolledCreditCardSuggestion. + suggestions. </description> </action> @@ -4863,7 +4871,6 @@ <owner>battre@chromium.org</owner> <description> This user action is logged when the user is shown some profile suggestions. - This should always happen after a Autofill_PolledProfileSuggestion. </description> </action>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index db723d52..3a8254e 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -97,7 +97,6 @@ <int value="0" label="None"/> <int value="1" label="Dark"/> <int value="2" label="Light"/> - <int value="3" label="Custom"/> </enum> <enum name="AccessibilityModeFlagEnum"> @@ -6746,14 +6745,6 @@ <!-- LINT.ThenChange(//ios/chrome/browser/contextual_panel/utils/contextual_panel_metrics.h:ModelRelevanceType) --> -<enum name="IOSDefaultBookmarkFolderOutcome"> - <int value="0" label="kUnset"/> - <int value="1" label="kExistingLocalFolderSet"/> - <int value="2" label="kExistingAccountFolderSet"/> - <int value="3" label="kMissingLocalFolderSet"/> - <int value="4" label="kMissingAccountFolderSet"/> -</enum> - <enum name="IOSParcelCarrier"> <int value="0" label="Unkown"/> <int value="1" label="Fedex"/> @@ -10819,6 +10810,7 @@ <int value="-1241220708" label="QuickShareV2:enabled"/> <int value="-1241002324" label="FocusMode:enabled"/> <int value="-1240498859" label="ReparentAuxiliaryNavigationFromPWA:disabled"/> + <int value="-1239962224" label="AndroidZoomIndicator:disabled"/> <int value="-1239605812" label="MlUrlSearchBlending:disabled"/> <int value="-1239515260" label="OmniboxDisableCGIParamMatching:disabled"/> <int value="-1239262870" label="TextFragmentAnchor:enabled"/> @@ -11691,6 +11683,7 @@ label="AutofillRationalizeRepeatedServerPredictions:disabled"/> <int value="-929290033" label="CrosSodaConchLanguages:disabled"/> <int value="-928138978" label="IPH_DemoMode:disabled"/> + <int value="-926780551" label="AndroidZoomIndicator:enabled"/> <int value="-926422468" label="disable-embedded-shared-worker"/> <int value="-926236394" label="SendTabToSelfHistory:enabled"/> <int value="-926039080" label="VaapiVp9kSVCHWEncoding:disabled"/>
diff --git a/tools/metrics/histograms/metadata/ai/histograms.xml b/tools/metrics/histograms/metadata/ai/histograms.xml index a513a0c..98e40cc 100644 --- a/tools/metrics/histograms/metadata/ai/histograms.xml +++ b/tools/metrics/histograms/metadata/ai/histograms.xml
@@ -204,7 +204,7 @@ </histogram> <histogram name="AI.Session.{SessionType}.PromptRequestSize" units="bytes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>leimy@chromium.org</owner> <owner>fergal@chromium.org</owner> <owner>src/chrome/browser/ai/OWNERS</owner> @@ -228,7 +228,7 @@ </histogram> <histogram name="AI.Session.{SessionType}.PromptResponseSize" units="bytes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>leimy@chromium.org</owner> <owner>fergal@chromium.org</owner> <owner>src/chrome/browser/ai/OWNERS</owner> @@ -240,7 +240,7 @@ </histogram> <histogram name="AI.Session.{SessionType}.PromptResponseStatus" - enum="AIModelStreamingResponseStatus" expires_after="2025-12-28"> + enum="AIModelStreamingResponseStatus" expires_after="2026-03-01"> <owner>leimy@chromium.org</owner> <owner>fergal@chromium.org</owner> <owner>src/chrome/browser/ai/OWNERS</owner> @@ -301,7 +301,7 @@ </histogram> <histogram name="AI.Translation.LoadTranslateKitResult" - enum="LoadTranslateKitResult" expires_after="2025-12-28"> + enum="LoadTranslateKitResult" expires_after="2026-03-01"> <owner>mych@google.com</owner> <owner>fergal@google.com</owner> <owner>src/chrome/browser/ai/OWNERS</owner> @@ -314,7 +314,7 @@ </histogram> <histogram name="AI.{SessionType}.AvailabilityV2" enum="Availability" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>leimy@chromium.org</owner> <owner>fergal@chromium.org</owner> <owner>src/chrome/browser/ai/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/android/enums.xml b/tools/metrics/histograms/metadata/android/enums.xml index dd08417..1a5b71c4 100644 --- a/tools/metrics/histograms/metadata/android/enums.xml +++ b/tools/metrics/histograms/metadata/android/enums.xml
@@ -262,6 +262,15 @@ <int value="4" label="Sandbox Engaged"/> </enum> +<enum name="AndroidStorageSystemType"> + <int value="0" label="UFS"/> + <int value="1" label="EMMC"/> + <int value="2" label="Unknown"/> + <int value="3" label="Undetermined"> + Failed to determine storage type by falling through all checks. + </int> +</enum> + <enum name="AndroidThemeSettingsEntry"> <summary>See Android.DarkTheme.ThemeSettingsEntry.</summary> <int value="0" label="Settings"/>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index 6ac9c459..7cbda31 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -449,7 +449,7 @@ </histogram> <histogram name="Android.AdaptiveToolbarButton.Settings.Changed" - enum="AdaptiveToolbarRadioButtonState" expires_after="2025-12-28"> + enum="AdaptiveToolbarRadioButtonState" expires_after="2026-03-01"> <owner>shaktisahu@chromium.org</owner> <owner>chrome-segmentation-platform@google.com</owner> <summary> @@ -460,7 +460,7 @@ </histogram> <histogram name="Android.AdaptiveToolbarButton.Settings.Startup" - enum="AdaptiveToolbarRadioButtonState" expires_after="2025-12-28"> + enum="AdaptiveToolbarRadioButtonState" expires_after="2026-03-01"> <owner>shaktisahu@chromium.org</owner> <owner>chrome-segmentation-platform@google.com</owner> <summary> @@ -482,7 +482,7 @@ </histogram> <histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Startup" - enum="BooleanEnabled" expires_after="2025-12-28"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>shaktisahu@chromium.org</owner> <owner>chrome-segmentation-platform@google.com</owner> <summary> @@ -505,7 +505,7 @@ </histogram> <histogram name="Android.AdaptiveToolbarButton.Variant.OnStartNavigation" - enum="AdaptiveToolbarButtonVariant" expires_after="2025-12-28"> + enum="AdaptiveToolbarButtonVariant" expires_after="2026-03-01"> <owner>shaktisahu@chromium.org</owner> <owner>chrome-segmentation-platform@google.com</owner> <summary> @@ -519,7 +519,7 @@ <histogram name="Android.ApplicationState.TimeInBackgroundBeforeForegroundedAgain" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>lizeb@google.com</owner> <owner>clank-performance-team@google.com</owner> <summary> @@ -636,7 +636,7 @@ <histogram name="Android.AssistContent.WebPageContentProvider.Latency.CreateToExtractionStart" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>salg@google.com</owner> <owner>ssid@google.com</owner> <summary> @@ -648,7 +648,7 @@ <histogram name="Android.AssistContent.WebPageContentProvider.Latency.ExtractionStartToEnd" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>salg@google.com</owner> <owner>ssid@google.com</owner> <summary> @@ -952,7 +952,7 @@ </histogram> <histogram name="Android.BackPress.Failure" enum="BackPressConsumer" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>lazzzis@chromium.org</owner> <owner>src/chrome/browser/back_press/android/OWNERS</owner> <summary> @@ -1058,7 +1058,7 @@ </histogram> <histogram name="Android.BackPress.SwipeEdge{Type}" enum="SwipeEdge" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>lazzzis@chromium.org</owner> <owner>src/chrome/browser/back_press/android/OWNERS</owner> <summary> @@ -1152,7 +1152,7 @@ </histogram> <histogram name="Android.BrowserControls.OutstandingChangedOnFinish" - enum="BooleanChanged" expires_after="2025-12-28"> + enum="BooleanChanged" expires_after="2026-03-01"> <owner>skym@chromium.org</owner> <owner>pnoland@chromium.org</owner> <summary> @@ -1165,7 +1165,7 @@ </histogram> <histogram name="Android.BrowserControls.OutstandingChangedOnStart" - enum="BooleanChanged" expires_after="2025-12-28"> + enum="BooleanChanged" expires_after="2026-03-01"> <owner>skym@chromium.org</owner> <owner>pnoland@chromium.org</owner> <summary> @@ -1178,7 +1178,7 @@ </histogram> <histogram name="Android.BrowserControls.OutstandingNavigationsOnFinish" - units="navigations" expires_after="2025-12-28"> + units="navigations" expires_after="2026-03-01"> <owner>skym@chromium.org</owner> <owner>pnoland@chromium.org</owner> <summary> @@ -1429,7 +1429,7 @@ </histogram> <histogram name="Android.CpuAbiBitnessSupport" enum="CpuAbiBitnessSupport" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>tasak@google.com</owner> <owner>lizeb@chromium.org</owner> <summary> @@ -1474,7 +1474,7 @@ </histogram> <histogram name="Android.DarkTheme.EnabledState" enum="BooleanEnabled" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>twellington@chromium.org</owner> <owner>clank-app-team@google.com</owner> <summary> @@ -1512,7 +1512,7 @@ <histogram name="Android.DefaultBrowserPromo.Outcome.{CurrentState}.{PromoCount}" - enum="AndroidDefaultBrowserPromoOutcomeType" expires_after="2025-12-28"> + enum="AndroidDefaultBrowserPromoOutcomeType" expires_after="2026-03-01"> <owner>lazzzis@google.com</owner> <owner>twellington@chromium.org</owner> <summary> @@ -1535,7 +1535,7 @@ </histogram> <histogram name="Android.DefaultBrowserPromo.RoleManagerShown" - enum="AndroidDefaultBrowserPromoType" expires_after="2025-12-28"> + enum="AndroidDefaultBrowserPromoType" expires_after="2026-03-01"> <owner>lazzzis@google.com</owner> <owner>twellington@chromium.org</owner> <summary> @@ -1545,7 +1545,7 @@ </histogram> <histogram name="Android.DesktopWindowHeuristicResult4" - enum="DesktopWindowHeuristicResult" expires_after="2025-12-31"> + enum="DesktopWindowHeuristicResult" expires_after="2026-03-01"> <owner>aishwaryarj@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -1584,7 +1584,7 @@ </histogram> <histogram name="Android.DeviceSize.ScreenSizeInTensOfInches" - units="10x inches" expires_after="2025-12-28"> + units="10x inches" expires_after="2026-03-01"> <owner>twellington@chromium.org</owner> <owner>aishwaryarj@google.com</owner> <owner>clank-app-team@google.com</owner> @@ -1647,7 +1647,7 @@ </histogram> <histogram name="Android.DownloadManager.OpenSource.Other" - enum="AndroidDownloadOpenSource" expires_after="2025-12-28"> + enum="AndroidDownloadOpenSource" expires_after="2026-03-01"> <owner>shaktisahu@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary> @@ -1659,7 +1659,7 @@ </histogram> <histogram name="Android.DownloadManager.OpenSource.Video" - enum="AndroidDownloadOpenSource" expires_after="2025-12-28"> + enum="AndroidDownloadOpenSource" expires_after="2026-03-01"> <owner>shaktisahu@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary> @@ -1708,7 +1708,7 @@ </histogram> <histogram name="Android.DownloadPage.OpenSource" - enum="AndroidDownloadOpenSource" expires_after="2025-12-28"> + enum="AndroidDownloadOpenSource" expires_after="2026-03-01"> <owner>qinmin@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary> @@ -1761,7 +1761,7 @@ </histogram> <histogram name="Android.DragDrop.FromWebContent.TargetType" - enum="AndroidDragTargetType" expires_after="2025-11-16"> + enum="AndroidDragTargetType" expires_after="2026-03-01"> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -2051,7 +2051,7 @@ </histogram> <histogram name="Android.EdgeToEdge.IneligibilityReason" - enum="IneligibilityReason" expires_after="2025-12-28"> + enum="IneligibilityReason" expires_after="2026-03-01"> <owner>lazzzis@google.com</owner> <owner>edge-to-edge@chromium.org</owner> <summary> @@ -2503,7 +2503,7 @@ </histogram> <histogram name="Android.IncognitoReauth.PromoAcceptedOrDismissed" - enum="IncognitoReauthPromoActionType" expires_after="2025-12-28"> + enum="IncognitoReauthPromoActionType" expires_after="2026-03-01"> <owner>roagarwal@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -2530,7 +2530,7 @@ </histogram> <histogram name="Android.IncognitoReauth.ToggleOnOrOff" enum="BooleanToggled" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>roagarwal@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -2906,7 +2906,7 @@ </histogram> <histogram name="Android.KernelVersion" enum="AndroidKernelVersion" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rsesek@chromium.org</owner> <summary> Reports the kernel major and minor version from the utsname.release field. @@ -3077,7 +3077,7 @@ </histogram> <histogram name="Android.Messages.FullyVisible" enum="MessageIdentifier" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>lazzzis@chromium.org</owner> <owner>src/components/messages/OWNERS</owner> <summary> @@ -3201,7 +3201,7 @@ </histogram> <histogram name="Android.MultiInstance.MaxWindowLimitExceeded" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ranjithkagathi@google.com</owner> <owner>twellington@chromium.org</owner> <summary> @@ -3516,7 +3516,7 @@ </histogram> <histogram name="Android.NTP.Impression" enum="NTPImpressionType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>finkm@chromium.org</owner> <summary> Counts impressions of the NTP on Android. It also counts potential @@ -4385,7 +4385,7 @@ </histogram> <histogram name="Android.PartnerHomepageCustomization.Delegate2" - enum="PartnerCustomizationProviderDelegate" expires_after="2025-12-28"> + enum="PartnerCustomizationProviderDelegate" expires_after="2026-03-01"> <owner>donnd@chromium.org</owner> <owner>twellington@chromium.org</owner> <owner>wenyufu@chromium.org</owner> @@ -4790,7 +4790,7 @@ </histogram> <histogram name="Android.PlayServices.ShortVersion" enum="GmsShortVersionCode" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>twellington@chromium.org</owner> <owner>tedchoc@chromium.org</owner> <summary> @@ -4803,7 +4803,7 @@ </histogram> <histogram name="Android.PlayServices.Version" units="versioncode" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>twellington@chromium.org</owner> <owner>tedchoc@chromium.org</owner> <summary> @@ -4951,7 +4951,7 @@ </histogram> <histogram name="Android.RequestDesktopSite.UseDesktopUserAgent" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gangwu@chromium.org</owner> <owner>fgorski@chromium.org</owner> <summary> @@ -5283,8 +5283,18 @@ </summary> </histogram> +<histogram name="Android.StorageSystem.Type" enum="AndroidStorageSystemType" + expires_after="2026-01-18"> + <owner>yfriedman@chromium.org</owner> + <owner>clank-performance-team@google.com</owner> + <summary> + Records the type of storage system on the device. This is determined by + inspecting system files. Recorded once on deferred startup. + </summary> +</histogram> + <histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>yfriedman@chromium.org</owner> <owner>wnwen@chromium.org</owner> <summary> @@ -5375,7 +5385,7 @@ </histogram> <histogram name="Android.Sync.ActualSyncedTabCountPercentage" - units="% of tab count" expires_after="2025-12-29"> + units="% of tab count" expires_after="2026-03-01"> <owner>bjfong@google.com</owner> <owner>ckitagawa@chromium.org</owner> <summary> @@ -5493,7 +5503,7 @@ </histogram> <histogram name="Android.TabMultiSelectV2.BookmarkTabsCount" units="count" - expires_after="2025-12-30"> + expires_after="2026-03-01"> <owner>ckitagawa@chromium.org</owner> <owner>bjfong@google.com</owner> <owner>fredmello@chromium.org</owner> @@ -5538,7 +5548,7 @@ </histogram> <histogram name="Android.TabNavigationInterceptResult.For{ProtocolType}" - enum="NavigationInterceptResult" expires_after="2025-12-28"> + enum="NavigationInterceptResult" expires_after="2026-03-01"> <owner>blundell@chromium.org</owner> <owner>mthiesse@chromium.org</owner> <owner>tedchoc@chromium.org</owner> @@ -5679,7 +5689,7 @@ </histogram> <histogram name="Android.TabStrip.TempBackgroundTimedOut" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>nemco@google.com</owner> <owner>skavuluru@google.com</owner> <summary> @@ -5706,7 +5716,7 @@ </histogram> <histogram name="Android.TabStrip.TitleBitmapFactory.getTitleBitmap.Duration" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>peilinwang@google.com</owner> <summary> The duration of TitleBitmapFactory.getTitleBitmap, recorded once per call. @@ -5803,7 +5813,7 @@ </histogram> <histogram name="Android.Toolbar.BitmapCapture" enum="ToolbarCaptureType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>skym@chromium.org</owner> <owner>fredmello@chromium.org</owner> <summary> @@ -9255,7 +9265,7 @@ </histogram> <histogram name="GridTabSwitcher.FramePerSecond.{GridTabSwitcherAnimationType}" - units="frame/sec" expires_after="2025-12-28"> + units="frame/sec" expires_after="2026-03-01"> <owner>ckitagawa@chromium.org</owner> <owner>meiliang@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index 46ffd72..b84d524 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -2167,7 +2167,7 @@ </histogram> <histogram name="Apps.AppsCount.{AppType}" units="Apps" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ovn@google.com</owner> <owner>lt-web-apps-team@google.com</owner> <component>1389907</component> @@ -2955,7 +2955,7 @@ </histogram> <histogram name="Apps.UsageTime.{AppType}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ovn@google.com</owner> <owner>lt-web-apps-team@google.com</owner> <component>1389907</component> @@ -2967,7 +2967,7 @@ </histogram> <histogram name="Apps.UsageTimeV2.{AppTypeV2}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ovn@google.com</owner> <owner>lt-web-apps-team@google.com</owner> <component>1389907</component>
diff --git a/tools/metrics/histograms/metadata/arc/histograms.xml b/tools/metrics/histograms/metadata/arc/histograms.xml index 701c11c..6216e25 100644 --- a/tools/metrics/histograms/metadata/arc/histograms.xml +++ b/tools/metrics/histograms/metadata/arc/histograms.xml
@@ -1330,7 +1330,7 @@ </histogram> <histogram name="Arc.IdleManager.ScreenOffTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>raging@google.com</owner> <owner>arcvm-eng@google.com</owner> <summary> @@ -2503,7 +2503,7 @@ </histogram> <histogram name="Arc.VmDataMigration.Duration" units="seconds" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2514,7 +2514,7 @@ </histogram> <histogram name="Arc.VmDataMigration.EndStatus" - enum="CrOSFileSystemMigrationEndStatus" expires_after="2025-12-31"> + enum="CrOSFileSystemMigrationEndStatus" expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2525,7 +2525,7 @@ </histogram> <histogram name="Arc.VmDataMigration.FailedErrorCode" enum="PlatformFileError" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2539,7 +2539,7 @@ <histogram name="Arc.VmDataMigration.FailedOperationType" enum="CrOSFileSystemMigrationFailedOperationType" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2552,7 +2552,7 @@ </histogram> <histogram name="Arc.VmDataMigration.FailedPathType" - enum="ArcVmDataMigrationFailedPathType" expires_after="2025-12-31"> + enum="ArcVmDataMigrationFailedPathType" expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2600,7 +2600,7 @@ </histogram> <histogram name="Arc.VmDataMigration.MigrationFinishReason{ArcUserTypes}" - enum="ArcVmDataMigrationFinishReason" expires_after="2025-12-31"> + enum="ArcVmDataMigrationFinishReason" expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2611,7 +2611,7 @@ </histogram> <histogram name="Arc.VmDataMigration.MigrationStatusOnArcStarted{ArcUserTypes}" - enum="ArcVmDataMigrationStatus" expires_after="2025-12-31"> + enum="ArcVmDataMigrationStatus" expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2757,7 +2757,7 @@ </histogram> <histogram name="Arc.VmDataMigration.SetupResult" - enum="ArcVmDataMigrationSetupResult" expires_after="2025-12-31"> + enum="ArcVmDataMigrationSetupResult" expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2768,7 +2768,7 @@ </histogram> <histogram name="Arc.VmDataMigration.StartStatus" - enum="CrOSFileSystemMigrationStartStatus" expires_after="2025-12-31"> + enum="CrOSFileSystemMigrationStartStatus" expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2779,7 +2779,7 @@ </histogram> <histogram name="Arc.VmDataMigration.TotalFiles" units="files" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2790,7 +2790,7 @@ </histogram> <histogram name="Arc.VmDataMigration.TotalSizeMB" units="MB" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml index 957b55b..9c7b15b 100644 --- a/tools/metrics/histograms/metadata/ash/histograms.xml +++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -1050,7 +1050,7 @@ </histogram> <histogram name="Ash.Birch.Chip.Activate" enum="BirchItemType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jamescook@chromium.org</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -1091,7 +1091,7 @@ </histogram> <histogram name="Ash.Birch.Chip.Impression" enum="BirchItemType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jamescook@chromium.org</owner> <owner>chromeos-launcher@google.com</owner> <summary>Recorded when the user is shown a chip of a given type.</summary> @@ -1230,7 +1230,7 @@ </histogram> <histogram name="Ash.Birch.ResultsReturned{Type}" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jamescook@chromium.org</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -1721,7 +1721,7 @@ </histogram> <histogram name="Ash.Calendar.{CalendarChildView}.Activated" - enum="CalendarEventSource" expires_after="2025-11-02"> + enum="CalendarEventSource" expires_after="2026-03-01"> <owner>newcomer@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary>Recorded when the {CalendarChildView} is activated.</summary> @@ -3394,7 +3394,7 @@ </histogram> <histogram name="Ash.Display.InternalDisplay.ActiveEffectiveResolution" - enum="EffectiveResolution" expires_after="2025-12-28"> + enum="EffectiveResolution" expires_after="2026-03-01"> <owner>malaykeshav@chromium.org</owner> <owner>oshima@chromium.org</owner> <summary> @@ -4314,7 +4314,7 @@ </histogram> <histogram name="Ash.Glanceables.Api.{Method}.Latency" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>amitrokhin@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -4334,7 +4334,7 @@ </histogram> <histogram name="Ash.Glanceables.Api.{Method}.PagesCount" units="pages" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>amitrokhin@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -4351,7 +4351,7 @@ </histogram> <histogram name="Ash.Glanceables.Api.{Method}.Status" enum="ApiErrorCode" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>amitrokhin@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -4416,7 +4416,7 @@ </histogram> <histogram name="Ash.Glanceables.TimeManagement.Classroom.UserAction" - enum="ClassroomUserAction" expires_after="2025-12-31"> + enum="ClassroomUserAction" expires_after="2026-03-01"> <owner>tbarzic@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -4533,7 +4533,7 @@ </histogram> <histogram name="Ash.Glanceables.TimeManagement.Tasks.UserAction" - enum="TasksUserAction" expires_after="2025-12-31"> + enum="TasksUserAction" expires_after="2026-03-01"> <owner>tbarzic@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -4543,7 +4543,7 @@ </histogram> <histogram name="Ash.Glanceables.TimeManagement.TasksCountInDefaultTaskList" - units="tasks" expires_after="2025-12-31"> + units="tasks" expires_after="2026-03-01"> <owner>amitrokhin@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -4614,7 +4614,7 @@ <histogram name="Ash.Glanceables.TimeManagement{GlanceableBubble}.TotalShowTime" - units="ms" expires_after="2025-12-31"> + units="ms" expires_after="2026-03-01"> <owner>anasalazar@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -4741,7 +4741,7 @@ </histogram> <histogram name="Ash.KcerPkcs12Migration.Events" - enum="KcerPkcs12MigrationEvent" expires_after="2025-12-28"> + enum="KcerPkcs12MigrationEvent" expires_after="2026-03-01"> <owner>miersh@google.com</owner> <owner>olsa@google.com</owner> <summary> @@ -4816,7 +4816,7 @@ </histogram> <histogram name="Ash.Login.Lock.SessionStateChange" enum="SessionLockEvent" - expires_after="2025-10-29"> + expires_after="2026-03-01"> <owner>mslus@google.com</owner> <owner>cros-lurs@google.com</owner> <summary>Records all session lock and unlock events.</summary> @@ -6748,7 +6748,7 @@ </histogram> <histogram name="Ash.Picker.Search.{Provider}Provider.QueryTime" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>shend@chromium.org</owner> <owner>jopalmer@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -6774,7 +6774,7 @@ </histogram> <histogram name="Ash.Picker.Session.InputReadyLatency" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>shend@chromium.org</owner> <owner>jopalmer@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -6788,7 +6788,7 @@ </histogram> <histogram name="Ash.Picker.Session.Outcome" enum="PickerSessionOutcome" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>shend@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -6798,7 +6798,7 @@ </histogram> <histogram name="Ash.Picker.Session.PresentationLatency.SearchField" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>shend@chromium.org</owner> <owner>jopalmer@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -6812,7 +6812,7 @@ </histogram> <histogram name="Ash.Picker.Session.PresentationLatency.SearchResults" - units="ms" expires_after="2025-12-31"> + units="ms" expires_after="2026-03-01"> <owner>shend@chromium.org</owner> <owner>jopalmer@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -6826,7 +6826,7 @@ </histogram> <histogram name="Ash.Picker.Session.SearchLatency" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>shend@chromium.org</owner> <owner>jopalmer@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -7289,7 +7289,7 @@ </histogram> <histogram name="Ash.QuickSettings.FeaturePod.{FeaturePodBehavior}" - enum="QsFeatureCatalogName" expires_after="2025-12-28"> + enum="QsFeatureCatalogName" expires_after="2026-03-01"> <owner>jiamingc@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -8996,7 +8996,7 @@ </histogram> <histogram name="Ash.VideoConferenceTray.BackgroundBlur.Click" - enum="BackgroundBlurState" expires_after="2025-12-14"> + enum="BackgroundBlurState" expires_after="2026-03-01"> <owner>leandre@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -9007,7 +9007,7 @@ </histogram> <histogram name="Ash.VideoConferenceTray.BackgroundBlur.InitialState" - enum="BackgroundBlurState" expires_after="2025-12-28"> + enum="BackgroundBlurState" expires_after="2026-03-01"> <owner>newcomer@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -9057,7 +9057,7 @@ </histogram> <histogram name="Ash.VideoConferenceTray.{Device}MuteButton.Click" - enum="BooleanMuted" expires_after="2025-12-14"> + enum="BooleanMuted" expires_after="2026-03-01"> <owner>leandre@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -9072,7 +9072,7 @@ </histogram> <histogram name="Ash.VideoConferenceTray.{EffectName}.Click" - enum="BooleanEnabled" expires_after="2025-12-14"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>leandre@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -9093,7 +9093,7 @@ </histogram> <histogram name="Ash.VideoConferenceTray.{EffectName}.InitialState" - enum="BooleanEnabled" expires_after="2025-12-28"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>newcomer@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -9300,7 +9300,7 @@ </histogram> <histogram name="Ash.Wallpaper.SeaPen.Template.Settled" enum="SeaPenTemplateId" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>thuongphan@chromium.org</owner> <owner>cros-p13n-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ash_clipboard/histograms.xml b/tools/metrics/histograms/metadata/ash_clipboard/histograms.xml index 33fcbbf2..57375d9 100644 --- a/tools/metrics/histograms/metadata/ash_clipboard/histograms.xml +++ b/tools/metrics/histograms/metadata/ash_clipboard/histograms.xml
@@ -61,7 +61,7 @@ </histogram> <histogram name="Ash.ClipboardHistory.ContextMenu.DisplayFormatDeleted" - enum="ClipboardHistoryDisplayFormat" expires_after="2025-12-28"> + enum="ClipboardHistoryDisplayFormat" expires_after="2026-03-01"> <owner>newcomer@chromium.org</owner> <owner>multipaste@google.com</owner> <summary> @@ -75,7 +75,7 @@ </histogram> <histogram name="Ash.ClipboardHistory.ContextMenu.DisplayFormatPasted" - enum="ClipboardHistoryDisplayFormat" expires_after="2025-12-28"> + enum="ClipboardHistoryDisplayFormat" expires_after="2026-03-01"> <owner>newcomer@chromium.org</owner> <owner>multipaste@google.com</owner> <summary> @@ -90,7 +90,7 @@ </histogram> <histogram name="Ash.ClipboardHistory.ContextMenu.DisplayFormatShown" - enum="ClipboardHistoryDisplayFormat" expires_after="2025-12-28"> + enum="ClipboardHistoryDisplayFormat" expires_after="2026-03-01"> <owner>newcomer@chromium.org</owner> <owner>multipaste@google.com</owner> <summary> @@ -100,7 +100,7 @@ </histogram> <histogram name="Ash.ClipboardHistory.ContextMenu.MenuOptionSelected" - units="index" expires_after="2025-12-28"> + units="index" expires_after="2026-03-01"> <owner>newcomer@chromium.org</owner> <owner>multipaste@google.com</owner> <summary> @@ -110,7 +110,7 @@ </histogram> <histogram name="Ash.ClipboardHistory.ContextMenu.NumberOfItemsShown" - units="Items Shown" expires_after="2025-12-28"> + units="Items Shown" expires_after="2026-03-01"> <owner>newcomer@chromium.org</owner> <owner>multipaste@google.com</owner> <summary> @@ -130,7 +130,7 @@ </histogram> <histogram name="Ash.ClipboardHistory.ContextMenu.UserJourneyTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>newcomer@chromium.org</owner> <owner>multipaste@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml index 60b5815..d9af2832 100644 --- a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml +++ b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml
@@ -244,7 +244,7 @@ <histogram name="Conversions.AggregatableReport.TimeFromTriggerToReportSentSuccessfully" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -604,7 +604,7 @@ </histogram> <histogram name="Conversions.ExtraReportDelay2" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>apaseltiner@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -864,7 +864,7 @@ <histogram name="Conversions.NavigationUnexpectedRegistration" enum="ConversionNavigationUnexpectedRegistration" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -1215,7 +1215,7 @@ </histogram> <histogram name="Conversions.SourceRegistrationError13" - enum="ConversionSourceRegistrationError" expires_after="2025-12-28"> + enum="ConversionSourceRegistrationError" expires_after="2026-03-01"> <owner>tquintanilla@chromium.org</owner> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -1376,7 +1376,7 @@ <histogram name="Conversions.TimeFromLastNavigationToDelivery_Failed.{ReportType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>tquintanilla@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -1392,7 +1392,7 @@ <histogram name="Conversions.TimeFromLastNavigationToDelivery_Succeeded.{ReportType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>tquintanilla@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -1478,7 +1478,7 @@ <histogram name="Conversions.UniqueReportingOriginsPerDestAndReportingSiteForSource" - units="reporting origins" expires_after="2025-12-28"> + units="reporting origins" expires_after="2026-03-01"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -1489,7 +1489,7 @@ </histogram> <histogram name="Conversions.UniqueReportingOriginsPerReportingSiteForSource" - units="reporting origins" expires_after="2025-12-28"> + units="reporting origins" expires_after="2026-03-01"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -1535,7 +1535,7 @@ </histogram> <histogram name="Conversions.VerboseDebugReport.HttpResponseOrNetErrorCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-12-28"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-01"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -1547,7 +1547,7 @@ <histogram name="Conversions.{ContextType}HttpResponseOrNetErrorCodeAggregatable2" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-12-28"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-01"> <owner>apaseltiner@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index 56f17afc..a7e23eb 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -891,7 +891,7 @@ </histogram> <histogram name="Autofill.Address.DisabledReason.PageLoad" - enum="AutofillPreferenceSetter" expires_after="2025-12-28"> + enum="AutofillPreferenceSetter" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>bwolfgang@google.com</owner> <owner>mlerman@google.com</owner> @@ -905,7 +905,7 @@ </histogram> <histogram name="Autofill.Address.DisabledReason.Startup" - enum="AutofillPreferenceSetter" expires_after="2025-12-28"> + enum="AutofillPreferenceSetter" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>bwolfgang@google.com</owner> <owner>mlerman@google.com</owner> @@ -958,7 +958,7 @@ </histogram> <histogram name="Autofill.AddressesSuppressedForDisuse" units="addresses" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -993,7 +993,7 @@ </histogram> <histogram name="Autofill.AddressProfileImportStatus" - enum="AutofillAddressProfileImportStatus" expires_after="2025-12-28"> + enum="AutofillAddressProfileImportStatus" expires_after="2026-03-01"> <owner>koerber@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -1555,7 +1555,7 @@ </histogram> <histogram name="Autofill.Autocomplete.PredictionCollisionState" - enum="PredictionStateAutocompleteStatePair" expires_after="2025-12-28"> + enum="PredictionStateAutocompleteStatePair" expires_after="2026-03-01"> <owner>koerber@google.com</owner> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -1627,7 +1627,7 @@ </histogram> <histogram name="Autofill.Autocomplete.SingleEntryRemovalMethod" - enum="AutofillSingleEntryRemovalMethod" expires_after="2025-12-28"> + enum="AutofillSingleEntryRemovalMethod" expires_after="2026-03-01"> <owner>jkeitel@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -1660,7 +1660,7 @@ </histogram> <histogram name="Autofill.AutomationRate.{FormType}" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>bwolfgang@google.com</owner> <owner>mlerman@google.com</owner> @@ -2645,7 +2645,7 @@ </histogram> <histogram name="Autofill.DataList.Events" enum="AutofillDataListEvents" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>brunobraga@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2656,7 +2656,7 @@ </histogram> <histogram name="Autofill.DataUtilization.ByPossibleType" - enum="AutofillDataUtilizationByFieldType" expires_after="2025-12-28"> + enum="AutofillDataUtilizationByFieldType" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>bwolfgang@google.com</owner> <owner>mlerman@google.com</owner> @@ -2715,7 +2715,7 @@ </histogram> <histogram name="Autofill.DataUtilization.{FieldTypesSelection}.{FieldState}" - enum="AutofillDataUtilization" expires_after="2025-12-28"> + enum="AutofillDataUtilization" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>bwolfgang@google.com</owner> <owner>mlerman@google.com</owner> @@ -2766,7 +2766,7 @@ </histogram> <histogram name="Autofill.DaysSinceLastUse.Profile" units="days" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2805,7 +2805,7 @@ </histogram> <histogram name="Autofill.DaysSinceLastUse.StoredProfile.{Category}" - units="days" expires_after="2025-12-28"> + units="days" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2831,7 +2831,7 @@ </histogram> <histogram name="Autofill.DeveloperEngagement" - enum="AutofillDeveloperEngagement" expires_after="2025-12-12"> + enum="AutofillDeveloperEngagement" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2978,7 +2978,7 @@ </histogram> <histogram name="Autofill.EmailPredictionCorrectness.Precision" - enum="EmailPredictionConfusionMatrix" expires_after="2025-12-28"> + enum="EmailPredictionConfusionMatrix" expires_after="2026-03-01"> <owner>vizcay@chromium.org</owner> <owner>jkeitel@chromium.org</owner> <owner>src/components/autofill/OWNERS</owner> @@ -2989,7 +2989,7 @@ </histogram> <histogram name="Autofill.EmailPredictionCorrectness.Recall" - enum="EmailPredictionConfusionMatrix" expires_after="2025-12-28"> + enum="EmailPredictionConfusionMatrix" expires_after="2026-03-01"> <owner>vizcay@chromium.org</owner> <owner>jkeitel@chromium.org</owner> <owner>src/components/autofill/OWNERS</owner> @@ -3131,7 +3131,7 @@ </histogram> <histogram name="Autofill.FieldCount" units="form fields" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary>Number of fields in a form that Autofill encounters.</summary> @@ -3261,7 +3261,7 @@ </histogram> <histogram name="Autofill.FieldPrediction{AutofillFieldPredictionSource}" - units="units" expires_after="2025-12-28"> + units="units" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3278,7 +3278,7 @@ <histogram name="Autofill.FillDuration.FromInteraction.WithAutofill{AutofillFormType}" - units="units" expires_after="2025-12-28"> + units="units" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3294,7 +3294,7 @@ <histogram name="Autofill.FillDuration.FromInteraction.WithoutAutofill{AutofillFormType}" - units="units" expires_after="2025-12-28"> + units="units" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3309,7 +3309,7 @@ </histogram> <histogram name="Autofill.FillDuration.FromLoad.WithAutofill" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3608,7 +3608,7 @@ </histogram> <histogram name="Autofill.FormSubmission.PerProfileType" - enum="BrowserProfileType" expires_after="2025-12-28"> + enum="BrowserProfileType" expires_after="2026-03-01"> <owner>arabm@google.com</owner> <owner>chrome-privacy-core@google.com</owner> <summary> @@ -3663,7 +3663,7 @@ <histogram name="Autofill.Funnel.InteractionAfterParsedAsType.{FormType}" enum="BooleanAutofillInteractionAfterParsedAsType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3722,7 +3722,7 @@ </histogram> <histogram name="Autofill.Funnel.SubmissionAfterFill.{FormType}" - enum="BooleanAutofillSubmissionAfterFill" expires_after="2025-12-28"> + enum="BooleanAutofillSubmissionAfterFill" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -4058,7 +4058,7 @@ </histogram> <histogram name="Autofill.iOS.FormRemoval.RemovedUnownedFields" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vincb@google.com</owner> <owner>eic@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -4070,7 +4070,7 @@ </histogram> <histogram name="Autofill.iOS.FormRemoval.SubmissionDetected" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vincb@google.com</owner> <owner>eic@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -4142,7 +4142,7 @@ </histogram> <histogram name="Autofill.IsEnabled.PageLoad" enum="BooleanEnabled" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>osaul@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -4156,7 +4156,7 @@ </histogram> <histogram name="Autofill.IsEnabled.Startup" enum="BooleanEnabled" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>osaul@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -4286,7 +4286,7 @@ <histogram name="Autofill.Leipzig.Duplication.NumberOfLocalSupersetProfilesOnStartup" - units="Profiles" expires_after="2025-12-28"> + units="Profiles" expires_after="2026-03-01"> <owner>koerber@google.com</owner> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -4361,7 +4361,7 @@ </histogram> <histogram name="Autofill.LogEvent.{LogEventTypes}" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -4410,7 +4410,7 @@ </histogram> <histogram name="Autofill.LoyaltyCard.FillingAcceptance.Affiliated" - enum="BooleanAutofillFillingAcceptance" expires_after="2025-12-12"> + enum="BooleanAutofillFillingAcceptance" expires_after="2026-03-01"> <owner>vizcay@google.com</owner> <owner>tchudakov@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -5153,7 +5153,7 @@ </histogram> <histogram name="Autofill.PopupHidingReason" - enum="AutofillSuggestionHidingReason" expires_after="2025-12-28"> + enum="AutofillSuggestionHidingReason" expires_after="2026-03-01"> <owner>koerber@google.com</owner> <owner>mamir@chromium.org</owner> <summary> @@ -5164,7 +5164,7 @@ </histogram> <histogram name="Autofill.PopupHidingReason.{FillingProduct}" - enum="AutofillSuggestionHidingReason" expires_after="2025-12-28"> + enum="AutofillSuggestionHidingReason" expires_after="2026-03-01"> <owner>brunobraga@google.com</owner> <owner>jkeitel@google.com</owner> <summary> @@ -5206,7 +5206,7 @@ </histogram> <histogram name="Autofill.ProfileDeleted.{DeletionType}" - enum="BooleanAutofillDeleteAddress" expires_after="2025-12-28"> + enum="BooleanAutofillDeleteAddress" expires_after="2026-03-01"> <owner>tchudakov@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -5291,7 +5291,7 @@ </histogram> <histogram name="Autofill.ProfileImport.MigrateProfileDecision" - enum="AutofillProfileImportDecision" expires_after="2025-12-28"> + enum="AutofillProfileImportDecision" expires_after="2026-03-01"> <owner>koerber@google.com</owner> <owner>fleimgruber@google.com</owner> <owner>src/components/autofill/OWNERS</owner> @@ -5407,7 +5407,7 @@ </histogram> <histogram name="Autofill.ProfileImport.UpdateProfileAffectedType.{Decision}" - enum="AutofillSettingsVisibleTypes" expires_after="2025-12-28"> + enum="AutofillSettingsVisibleTypes" expires_after="2026-03-01"> <owner>koerber@google.com</owner> <owner>src/components/autofill/OWNERS</owner> <summary> @@ -5611,7 +5611,7 @@ </histogram> <histogram name="Autofill.ProfileTokenQuality.PerProfile" units="Percents" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -5622,7 +5622,7 @@ <histogram name="Autofill.ProfileTokenQuality.StoredObservationsCount.PerProfile" - units="Observations" expires_after="2025-12-28"> + units="Observations" expires_after="2026-03-01"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -5658,7 +5658,7 @@ </histogram> <histogram name="Autofill.ProfileTokenQualityScore" units="bits" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>bwolfgang@google.com</owner> <owner>mlerman@google.com</owner> @@ -6520,7 +6520,7 @@ </histogram> <histogram name="Autofill.Settings.EditAddress" - enum="BooleanAutofillEditAddress" expires_after="2025-12-28"> + enum="BooleanAutofillEditAddress" expires_after="2026-03-01"> <owner>brunobraga@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -6612,7 +6612,7 @@ </histogram> <histogram name="Autofill.SkippingFormFillDueToChangedFieldCount" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -7087,7 +7087,7 @@ </histogram> <histogram name="Autofill.SuggestionAccepted.OffTheRecord" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>arabm@google.com</owner> <owner>chrome-privacy-core@google.com</owner> <summary> @@ -7215,7 +7215,7 @@ </histogram> <histogram name="Autofill.Timing.ParseFormUntilInteraction2" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>schwering@google.com</owner> <owner>brunobraga@google.org</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -7227,7 +7227,7 @@ </histogram> <histogram name="Autofill.Timing.{AutofillTimedFunction}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>schwering@google.com</owner> <owner>kenjitoyama@chromium.org</owner> <owner>battre@chromium.org</owner> @@ -7505,7 +7505,7 @@ </histogram> <histogram name="Autofill.TransliteratorInitStatus" enum="BooleanSuccess" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>sygiet@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -7729,7 +7729,7 @@ </histogram> <histogram name="Autofill.UploadEvent{AutofillUploadEvents}" enum="BooleanSent" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -8273,7 +8273,7 @@ </histogram> <histogram name="Autofill.WebView.Enabled" enum="BooleanEnabled" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary> @@ -8353,7 +8353,7 @@ <histogram name="Autofill.WebView.KeyMetrics.FillingAssistance{AutofillFormType}" - enum="BooleanAutofillFillingAssistance" expires_after="2025-12-28"> + enum="BooleanAutofillFillingAssistance" expires_after="2026-03-01"> <owner>pkotwicz@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -8370,7 +8370,7 @@ <histogram name="Autofill.WebView.KeyMetrics.FillingCorrectness{AutofillFormType}" - enum="BooleanAutofillFillingCorrectness" expires_after="2025-12-28"> + enum="BooleanAutofillFillingCorrectness" expires_after="2026-03-01"> <owner>pkotwicz@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -8383,7 +8383,7 @@ <histogram name="Autofill.WebView.KeyMetrics.FormSubmission.Autofilled{AutofillFormType}" - enum="BooleanAutofillSubmission" expires_after="2025-12-28"> + enum="BooleanAutofillSubmission" expires_after="2026-03-01"> <owner>pkotwicz@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -8400,7 +8400,7 @@ <histogram name="Autofill.WebView.KeyMetrics.FormSubmission.NotAutofilled{AutofillFormType}" - enum="BooleanAutofillSubmission" expires_after="2025-12-28"> + enum="BooleanAutofillSubmission" expires_after="2026-03-01"> <owner>pkotwicz@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -8464,7 +8464,7 @@ </histogram> <histogram name="Autofill.WebView.ServerPredicton.PredictionAvailability" - enum="AutofillServerPredictionAvailability" expires_after="2025-12-28"> + enum="AutofillServerPredictionAvailability" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary> @@ -8503,7 +8503,7 @@ </histogram> <histogram name="WebDatabase.AutofillWebDataBackendImpl.OperationResult" - enum="AutofillWebDataBackendImplOperationResult" expires_after="2025-12-28"> + enum="AutofillWebDataBackendImplOperationResult" expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>asully@chromium.org</owner> <summary> @@ -8513,7 +8513,7 @@ </histogram> <histogram name="WebDatabase.DatabaseErrors" enum="SqliteLoggedResultCode" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>battre@chromium.org</owner> <owner>asully@chromium.org</owner> <summary>Records the errors reported by SQLite.</summary>
diff --git a/tools/metrics/histograms/metadata/blink/enums.xml b/tools/metrics/histograms/metadata/blink/enums.xml index e75c7263..d7bd5b5 100644 --- a/tools/metrics/histograms/metadata/blink/enums.xml +++ b/tools/metrics/histograms/metadata/blink/enums.xml
@@ -6253,6 +6253,7 @@ <int value="5651" label="V8WasmCustomDescriptors"/> <int value="5652" label="SRIIntegrityAttributeOnInlineScript"/> <int value="5653" label="CredentialsGetImmediateMediationWithPasswordsOnly"/> + <int value="5654" label="CSSAtRuleRoute"/> </enum> <!-- LINT.ThenChange(//third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom:WebFeature) -->
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index 4e67fdb6..e33949c 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -839,7 +839,7 @@ </histogram> <histogram name="Blink.CookiesTime.AblationDelay2" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>elkurin@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -851,7 +851,7 @@ </histogram> <histogram name="Blink.CookiesTime.AblationSleepTime" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>elkurin@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -866,7 +866,7 @@ </histogram> <histogram name="Blink.CookiesTime.{IpcNeeded}2" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>elkurin@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -889,7 +889,7 @@ </histogram> <histogram name="Blink.CookiesTime.{PipeState}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mmenke@chromium.org</owner> <owner>net-dev@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1102,7 +1102,7 @@ </histogram> <histogram name="Blink.DecodedImageType" enum="DecodedImageType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>urvang@chromium.org</owner> <summary> Image codec inferred during decode. The histogram is incremented when enough @@ -1169,7 +1169,7 @@ <histogram name="Blink.DocumentLoader.CommitNavigationToStartLoadingResponse.Time.OutermostMainFrame.NewNavigation.IsHTTPOrHTTPS" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1193,7 +1193,7 @@ </summary> </histogram> -<histogram name="Blink.EffectiveZoom" units="%" expires_after="2025-12-28"> +<histogram name="Blink.EffectiveZoom" units="%" expires_after="2026-03-01"> <owner>pdr@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -1232,7 +1232,7 @@ </histogram> <histogram name="Blink.Experimental.Cookies.IpcNeeded" enum="BooleanYesNo" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>lizeb@google.com</owner> <owner>clank-performance-team@google</owner> <summary> @@ -2338,7 +2338,7 @@ </histogram> <histogram name="Blink.FencedFrame.CreationOrNavigationOutcome" - enum="FencedFrameCreationOutcome" expires_after="2025-12-28"> + enum="FencedFrameCreationOutcome" expires_after="2026-03-01"> <owner>shivanisha@chromium.org</owner> <owner>dom@chromium.org</owner> <owner>lbrady@google.com</owner> @@ -2535,7 +2535,7 @@ </histogram> <histogram name="Blink.Fonts.DecodeTime" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gjc@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -2559,7 +2559,7 @@ </histogram> <histogram name="Blink.Fonts.FontServiceThread.MatchFamilyNameTime" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -2571,7 +2571,7 @@ </histogram> <histogram name="Blink.Fonts.FontServiceThread.OpenStreamTime" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -2648,7 +2648,7 @@ </histogram> <histogram name="Blink.History.VisitedLinks.IsLinkStyledAsVisited" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>kyraseevers@chromium.org</owner> <owner>janiceliu@chromium.org</owner> <summary> @@ -2659,7 +2659,7 @@ </histogram> <histogram name="Blink.History.VisitedLinks.IsSaltFromNavigationThrottle" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>kyraseevers@chromium.org</owner> <owner>janiceliu@chromium.org</owner> <summary> @@ -3371,7 +3371,7 @@ </histogram> <histogram name="Blink.LCPP.DeferUnusedPreload.DeferredResourceCount" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>sisidovski@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS @@ -3715,7 +3715,7 @@ </histogram> <histogram name="Blink.LCPP.PrewarmHttpDiskCache.{PrewarmMethod}.CacheExists" - enum="BooleanExists" expires_after="2025-12-28"> + enum="BooleanExists" expires_after="2026-03-01"> <owner>chikamune@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS @@ -3733,7 +3733,7 @@ </histogram> <histogram name="Blink.LCPP.PrewarmHttpDiskCacheURL.Count" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>chikamune@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS @@ -4179,7 +4179,7 @@ </histogram> <histogram name="Blink.ParseStyleSheet.UpdateTime{BlinkUpdateTimeSuffixes}" - units="microseconds" expires_after="2025-12-08"> + units="microseconds" expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -4324,7 +4324,7 @@ </histogram> <histogram name="Blink.PrepareToStopParsingTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -4334,7 +4334,7 @@ </summary> </histogram> -<histogram name="Blink.PumpTokenizerTime" units="ms" expires_after="2025-12-28"> +<histogram name="Blink.PumpTokenizerTime" units="ms" expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -4779,7 +4779,7 @@ </histogram> <histogram name="Blink.ScanAndPreloadTime.{FrameType}.{IsInitial}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <owner>chrome-loading@google.com</owner> @@ -4958,7 +4958,7 @@ </histogram> <histogram name="Blink.SetCookieTime.AblationDelay" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>elkurin@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -5191,7 +5191,7 @@ </histogram> <histogram name="Blink.UpdateViewportIntersection.RemoteFrameNeedsUpdate" - enum="BooleanYesNo" expires_after="2025-12-28"> + enum="BooleanYesNo" expires_after="2026-03-01"> <owner>lizeb@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/bookmarks/histograms.xml b/tools/metrics/histograms/metadata/bookmarks/histograms.xml index faa8ff53..27b4150 100644 --- a/tools/metrics/histograms/metadata/bookmarks/histograms.xml +++ b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
@@ -69,7 +69,7 @@ </histogram> <histogram name="Bookmarks.AddedPerProfileType" enum="BrowserProfileType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rhalavati@chromium.org</owner> <owner>chrome-privacy-core@google.com</owner> <summary> @@ -245,7 +245,7 @@ </histogram> <histogram name="Bookmarks.BookmarksExistInStorageType.{SubtreeSelection}" - enum="BookmarksExistInStorageType" expires_after="2025-12-28"> + enum="BookmarksExistInStorageType" expires_after="2026-03-01"> <owner>rsult@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -274,7 +274,7 @@ </histogram> <histogram name="Bookmarks.Count.OnProfileLoad3" units="bookmarks" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mamir@chromium.org</owner> <summary> The total number of bookmarks a user has saved, excluding folders. Recorded @@ -330,7 +330,7 @@ </histogram> <histogram name="Bookmarks.LaunchLocation" enum="BookmarkLaunchLocation" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ianwen@chromium.org</owner> <summary>Logs a UI location from which a bookmark is launched.</summary> </histogram> @@ -721,7 +721,7 @@ </histogram> <histogram name="Bookmarks.UsageCountPerProfileType" enum="BrowserProfileType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rhalavati@chromium.org</owner> <owner>chrome-privacy-core@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/browser/histograms.xml b/tools/metrics/histograms/metadata/browser/histograms.xml index 58c632e..5a7e527 100644 --- a/tools/metrics/histograms/metadata/browser/histograms.xml +++ b/tools/metrics/histograms/metadata/browser/histograms.xml
@@ -104,7 +104,7 @@ </histogram> <histogram name="Browser.ChromeOS.HatsStatus" enum="HatsStatus" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>aalsum@chromium.org</owner> <owner>chromeos-data-eng@google.com</owner> <summary> @@ -571,7 +571,7 @@ </histogram> <histogram name="Browser.MainThreadsCongestion.1MinAfterResume" units="janks" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kawasin@google.com</owner> <owner>baseos-perf@google.com</owner> <summary> @@ -645,7 +645,7 @@ </histogram> <histogram name="Browser.MainThreadsCongestion.Used" units="janks" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>pmonette@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -963,7 +963,7 @@ </histogram> <histogram name="Browser.Responsiveness.IOJanksTotalPerMinute" units="janks" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gab@chromium.org</owner> <owner>olivierli@chromium.org</owner> <summary> @@ -977,7 +977,7 @@ </histogram> <histogram name="Browser.Responsiveness.IOJankyIntervalsPerMinute" - units="janks" expires_after="2025-12-28"> + units="janks" expires_after="2026-03-01"> <owner>gab@chromium.org</owner> <owner>olivierli@chromium.org</owner> <summary> @@ -1064,7 +1064,7 @@ </histogram> <histogram name="Browser.Tabs.TotalIncompleteSwitchDuration3{TabSwitchingType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>fdoray@chromium.org</owner> <owner>jonross@chromium.org</owner> <owner>joenotcharles@google.com</owner> @@ -1104,7 +1104,7 @@ </histogram> <histogram name="Browser.WindowCount.Incognito" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rhalavati@chromium.org</owner> <owner>chrome-privacy-core@google.com</owner> <summary> @@ -1415,7 +1415,7 @@ <histogram name="BrowserRenderProcessHost.SpareProcessMaybeTakeAction.NavigationRequest" - enum="SpareProcessMaybeTakeAction" expires_after="2025-12-31"> + enum="SpareProcessMaybeTakeAction" expires_after="2026-03-01"> <owner>gjc@google.com</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1426,7 +1426,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.SpareProcessMaybeTakeTime" - units="seconds" expires_after="2025-12-28"> + units="seconds" expires_after="2026-03-01"> <owner>gjc@google.com</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1441,7 +1441,7 @@ <histogram name="BrowserRenderProcessHost.SpareProcessMaybeTakeTime.{SpareProcessMaybeTakeAction}" - units="seconds" expires_after="2025-12-28"> + units="seconds" expires_after="2026-03-01"> <owner>gjc@google.com</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1454,7 +1454,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.SpareProcessRefusedByEmbedderReason" - enum="SpareProcessRefusedByEmbedderReason" expires_after="2025-12-28"> + enum="SpareProcessRefusedByEmbedderReason" expires_after="2026-03-01"> <owner>gjc@google.com</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1532,7 +1532,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.SpareRendererTaken.IsReady" - enum="BooleanReady" expires_after="2025-12-28"> + enum="BooleanReady" expires_after="2026-03-01"> <owner>pmonette@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -1541,7 +1541,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.SpareRendererTaken.TimeSinceCreation" - units="seconds" expires_after="2025-12-28"> + units="seconds" expires_after="2026-03-01"> <owner>pmonette@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -1628,7 +1628,7 @@ </histogram> <histogram name="BrowserScheduler.UIThread.TaskOffCpuDuration" units="ms" - expires_after="2025-12-25"> + expires_after="2026-03-01"> <owner>anandrv@google.com</owner> <owner>clank-performance-team@google.com</owner> <summary> @@ -1639,7 +1639,7 @@ </histogram> <histogram name="BrowserScheduler.UIThread.TaskOnCpuDuration" units="ms" - expires_after="2025-12-25"> + expires_after="2026-03-01"> <owner>anandrv@google.com</owner> <owner>clank-performance-team@google.com</owner> <summary> @@ -1650,7 +1650,7 @@ </histogram> <histogram name="BrowserScheduler.UIThread.TaskOnCpuPercentage" units="%" - expires_after="2025-12-25"> + expires_after="2026-03-01"> <owner>anandrv@google.com</owner> <owner>clank-performance-team@google.com</owner> <summary> @@ -2072,7 +2072,7 @@ </histogram> <histogram name="SidePanel.{SidePanelEntry}.TimeFromEntryTriggerToShown" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>corising@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/browsing_topics/histograms.xml b/tools/metrics/histograms/metadata/browsing_topics/histograms.xml index 2dcabb0..9059c53 100644 --- a/tools/metrics/histograms/metadata/browsing_topics/histograms.xml +++ b/tools/metrics/histograms/metadata/browsing_topics/histograms.xml
@@ -34,7 +34,7 @@ </histogram> <histogram name="BrowsingTopics.BrowsingTopicsState.LoadFinishStatus" - enum="BooleanSuccess" expires_after="2025-12-28"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>yaoxia@chromium.org</owner> <owner>jkarlin@chromium.org</owner> <summary> @@ -178,7 +178,7 @@ <histogram name="BrowsingTopics.EpochTopicsCalculation.TopTopicsCountBeforePadding" - units="topics" expires_after="2025-12-28"> + units="topics" expires_after="2026-03-01"> <owner>yaoxia@chromium.org</owner> <owner>jkarlin@chromium.org</owner> <summary> @@ -214,7 +214,7 @@ </histogram> <histogram name="BrowsingTopics.JavaScriptAPI.TimeToResolve" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>yaoxia@chromium.org</owner> <owner>jkarlin@chromium.org</owner> <summary> @@ -251,7 +251,7 @@ <histogram name="BrowsingTopics.RedirectChain.OnTopicsFirstInvokedForSite.TopicsCallingSitesCount" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>yaoxia@chromium.org</owner> <owner>jkarlin@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/bruschetta/histograms.xml b/tools/metrics/histograms/metadata/bruschetta/histograms.xml index de8495b..c941a51 100644 --- a/tools/metrics/histograms/metadata/bruschetta/histograms.xml +++ b/tools/metrics/histograms/metadata/bruschetta/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="Bruschetta.InstallResult" enum="BruschettaInstallResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>uekawa@google.com</owner> <owner>drmasquatch@google.com</owner> <owner>src/chrome/browser/ash/bruschetta/OWNERS</owner> @@ -31,7 +31,7 @@ </histogram> <histogram name="Bruschetta.LaunchResult" enum="BruschettaResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>uekawa@google.com</owner> <owner>drmasquatch@google.com</owner> <owner>src/chrome/browser/ash/bruschetta/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/chrome/histograms.xml b/tools/metrics/histograms/metadata/chrome/histograms.xml index 9c4c983..fe1fe93f 100644 --- a/tools/metrics/histograms/metadata/chrome/histograms.xml +++ b/tools/metrics/histograms/metadata/chrome/histograms.xml
@@ -91,7 +91,7 @@ </histogram> <histogram name="Chrome.KAnonymityService.QuerySet.Latency" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <summary> @@ -138,7 +138,7 @@ </histogram> <histogram name="Chrome.ProcessSingleton.NotifyResult" enum="NotifyResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gab@chromium.org</owner> <owner>etienneb@chromium.org</owner> <summary> @@ -236,7 +236,7 @@ <histogram name="Chrome.SystemNetworkContextManager.NetworkSandboxEarlyLaunchCrashed" - enum="Boolean" expires_after="2025-12-31"> + enum="Boolean" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>mmenke@chromium.org</owner> <summary> @@ -247,7 +247,7 @@ <histogram name="Chrome.SystemNetworkContextManager.NetworkSandboxLaunchFailed.ErrorCode" - enum="LaunchErrorCodes" expires_after="2025-12-31"> + enum="LaunchErrorCodes" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>mmenke@chromium.org</owner> <summary> @@ -272,7 +272,7 @@ </histogram> <histogram name="Chrome.SystemNetworkContextManager.NetworkSandboxState" - enum="NetworkSandboxState" expires_after="2025-12-31"> + enum="NetworkSandboxState" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>mmenke@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index 4513df6..3282e4b 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -1343,7 +1343,7 @@ </histogram> <histogram name="ChromeOS.Debugd.Perf.{FunctionName}" units="ms" - expires_after="2025-10-05"> + expires_after="2026-04-01"> <owner>enlightened@google.com</owner> <owner>jorgelo@google.com</owner> <owner>chromeos-security-core@google.com</owner> @@ -1422,7 +1422,7 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.OpenDuration" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>byronlee@google.com</owner> <owner>cros-tdm-tpe-eng@google.com</owner> <summary> @@ -1462,7 +1462,7 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.{RoutineType}Result" - enum="CrosDiagnosticsRoutineResult" expires_after="2025-12-31"> + enum="CrosDiagnosticsRoutineResult" expires_after="2026-03-01"> <owner>byronlee@google.com</owner> <owner>cros-tdm-tpe-eng@google.com</owner> <summary>Records the result of the {RoutineType} Routine.</summary> @@ -1531,7 +1531,7 @@ </histogram> <histogram name="ChromeOS.FeatureUsage.{FeatureName}" enum="FeatureUsageEvent" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>antrim@chromium.org</owner> <owner>cros-oac@google.com</owner> <summary> @@ -1543,7 +1543,7 @@ </histogram> <histogram name="ChromeOS.FeatureUsage.{FeatureName}.Usetime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>antrim@chromium.org</owner> <owner>cros-oac@google.com</owner> <summary> @@ -1699,7 +1699,7 @@ </histogram> <histogram name="ChromeOS.Gaia.Done.Oobe.NewAccount" enum="BooleanNewAccount" - expires_after="2025-12-07"> + expires_after="2026-03-01"> <owner>thv@google.com</owner> <owner>cros-growth@google.com</owner> <summary> @@ -1794,7 +1794,7 @@ </histogram> <histogram name="ChromeOS.HaTS.{Survey}" enum="HaTSSurvey" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>aalsum@chromium.org</owner> <owner>jackshira@google.com</owner> <owner>iby@chromium.org</owner> @@ -1820,7 +1820,7 @@ </histogram> <histogram name="ChromeOS.Healthd.DiagnosticResult.{Routine}" - enum="CrosHealthdDiagnosticResult" expires_after="2025-12-31"> + enum="CrosHealthdDiagnosticResult" expires_after="2026-03-01"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> <owner>cros-tdm-tpe-eng@google.com</owner> @@ -1891,7 +1891,7 @@ </histogram> <histogram name="ChromeOS.Healthd.RoutineCreation" - enum="CrosHealthdRoutineCategory" expires_after="2025-12-31"> + enum="CrosHealthdRoutineCategory" expires_after="2026-03-01"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> <owner>cros-tdm-tpe-eng@google.com</owner> @@ -1902,7 +1902,7 @@ </histogram> <histogram name="ChromeOS.Healthd.TelemetryResult.{Category}" - enum="CrosHealthdTelemetryResult" expires_after="2025-12-31"> + enum="CrosHealthdTelemetryResult" expires_after="2026-03-01"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> <owner>cros-tdm-tpe-eng@google.com</owner> @@ -2129,7 +2129,7 @@ </histogram> <histogram name="ChromeOS.Inputs.InternalKeyboard.NumberOfTopRowKeys" - units="keys" expires_after="2025-12-28"> + units="keys" expires_after="2026-03-01"> <owner>jimmyxgong@chromium.org</owner> <owner>wangdanny@google.com</owner> <owner>cros-device-enablement@google.com</owner> @@ -2192,7 +2192,7 @@ </histogram> <histogram name="ChromeOS.Inputs.Keyboard.{FunctionKeyPressed}" - enum="InputKeyEventToFunctionKey" expires_after="2025-12-28"> + enum="InputKeyEventToFunctionKey" expires_after="2026-03-01"> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -2219,7 +2219,7 @@ </histogram> <histogram name="ChromeOS.Inputs.KeyUsage.Internal.{KeyboardKey}" - enum="KeyUsageCategory" expires_after="2025-12-28"> + enum="KeyUsageCategory" expires_after="2026-03-01"> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -2466,7 +2466,7 @@ </histogram> <histogram name="ChromeOS.Kcer.KcerPkcs12ImportEvent" - enum="KcerPkcs12ImportEvent" expires_after="2025-12-28"> + enum="KcerPkcs12ImportEvent" expires_after="2026-03-01"> <owner>miersh@google.com</owner> <owner>olsa@google.com</owner> <summary>Tracks events related to the import of PKCS#12 files.</summary> @@ -2781,7 +2781,7 @@ </histogram> <histogram name="ChromeOS.MachineStatistic.{MachineStatistic}.LoadingTime" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>asumaneev@google.com</owner> <owner>chromeos-commercial-remote-management@google.com</owner> <summary> @@ -3080,7 +3080,7 @@ </histogram> <histogram name="ChromeOS.PrivacyHub.Opened" enum="PrivacyHubNavigationOrigin" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>zauri@google.com</owner> <owner>chromeos-privacyhub@google.com</owner> <summary> @@ -3189,7 +3189,7 @@ </histogram> <histogram name="ChromeOS.SAML.APIError" enum="ChromeOSSamlApiError" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>andreydav@google.com</owner> <owner>cros-3pidp@google.com</owner> <summary>Recorded when the Credentials Passing API call fails.</summary> @@ -3239,7 +3239,7 @@ </histogram> <histogram name="ChromeOS.SAML.Scraping.PasswordCountAll" units="passwords" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mslus@chromium.org</owner> <owner>emaxx@chromium.org</owner> <summary> @@ -3263,7 +3263,7 @@ </histogram> <histogram name="ChromeOS.Sandboxing.NoNewPrivsProcPercentage" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>enlightened@chromium.org</owner> <owner>chromeos-hardening@google.com</owner> <summary> @@ -3277,7 +3277,7 @@ </histogram> <histogram name="ChromeOS.Sandboxing.NonInitNsProcPercentage" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>enlightened@chromium.org</owner> <owner>chromeos-hardening@google.com</owner> <summary> @@ -3291,7 +3291,7 @@ </histogram> <histogram name="ChromeOS.Sandboxing.NonRootProcPercentage" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>enlightened@chromium.org</owner> <owner>chromeos-hardening@google.com</owner> <summary> @@ -3305,7 +3305,7 @@ </histogram> <histogram name="ChromeOS.Sandboxing.SecCompCoverage" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>enlightened@chromium.org</owner> <owner>chromeos-hardening@google.com</owner> <summary> @@ -3319,7 +3319,7 @@ </histogram> <histogram name="ChromeOS.Sandboxing.UnprivProcPercentage" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>enlightened@chromium.org</owner> <owner>chromeos-hardening@google.com</owner> <summary> @@ -4476,7 +4476,7 @@ </histogram> <histogram name="ChromeOS.Stability.{Severity}" enum="CrashSeverityProductType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>iby@chromium.org</owner> <owner>chromeos-data-eng@google.com</owner> <summary> @@ -4648,7 +4648,7 @@ </histogram> <histogram name="ChromeOS.TelemetryExtension.RoutineSupportedStatusQuery" - enum="TelemetryExtensionRoutineCategory" expires_after="2025-12-31"> + enum="TelemetryExtensionRoutineCategory" expires_after="2026-03-01"> <owner>weiluanwang@google.com</owner> <owner>dennyh@google.com</owner> <owner>cros-tdm-tpe-eng@google.com</owner> @@ -4880,7 +4880,7 @@ </histogram> <histogram name="ChromeOS.UserTypeByDeviceType.LogSegment" - enum="UserDeviceMatrix" expires_after="2025-12-28"> + enum="UserDeviceMatrix" expires_after="2026-03-01"> <owner>bmalcolm@chromium.org</owner> <owner>cros-client-wa@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml index 0e56f09..cf95ddc 100644 --- a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
@@ -227,7 +227,7 @@ </histogram> <histogram name="ChromeOS.Settings.Device.Keyboard.BrightnessSliderAdjusted" - units="%" expires_after="2025-12-31"> + units="%" expires_after="2026-03-01"> <owner>longbo@google.com</owner> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> @@ -693,7 +693,7 @@ <histogram name="ChromeOS.Settings.NumNavigationsUntilChange{OsSettingsChangeType}" - units="navigations" expires_after="2025-12-28"> + units="navigations" expires_after="2026-03-01"> <owner>wesokuhara@google.com</owner> <owner>xiaohuic@chromium.org</owner> <owner>cros-settings@google.com</owner> @@ -749,7 +749,7 @@ </histogram> <histogram name="ChromeOS.Settings.NumUniqueSettingsChanged.PerSession" - units="UniqueChanges" expires_after="2025-12-28"> + units="UniqueChanges" expires_after="2026-03-01"> <owner>moteva@google.com</owner> <owner>wesokuhara@google.com</owner> <owner>cros-settings@google.com</owner> @@ -760,7 +760,7 @@ </histogram> <histogram name="ChromeOS.Settings.OverscrollHistoryNavigation.Enabled" - enum="BooleanEnabled" expires_after="2025-12-28"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>katie@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml index 8488b9c..7b6b97db 100644 --- a/tools/metrics/histograms/metadata/commerce/histograms.xml +++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -178,7 +178,7 @@ </histogram> <histogram name="Commerce.Compare.Table.ColumnCount" units="columns" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mdjones@chromium.org</owner> <owner>chrome-shopping@google.com</owner> <summary> @@ -662,7 +662,7 @@ </histogram> <histogram name="Commerce.PriceInsights.OmniboxIconClicked" - enum="PriceInsightsIconLabelType" expires_after="2025-12-28"> + enum="PriceInsightsIconLabelType" expires_after="2026-03-01"> <owner>mdjones@chromium.org</owner> <owner>ayman@chromium.org</owner> <owner>chrome-shopping@google.com</owner> @@ -674,7 +674,7 @@ </histogram> <histogram name="Commerce.PriceInsights.OmniboxIconShown" - enum="PriceInsightsIconLabelType" expires_after="2025-12-28"> + enum="PriceInsightsIconLabelType" expires_after="2026-03-01"> <owner>mdjones@chromium.org</owner> <owner>ayman@chromium.org</owner> <owner>chrome-shopping@google.com</owner> @@ -928,7 +928,7 @@ </histogram> <histogram name="Commerce.{FeatureName}.IconInteractionState" - enum="CommerceIconInteractionState" expires_after="2025-12-28"> + enum="CommerceIconInteractionState" expires_after="2026-03-01"> <owner>mdjones@chromium.org</owner> <owner>chrome-shopping@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/compositing/histograms.xml b/tools/metrics/histograms/metadata/compositing/histograms.xml index 7f76d95..809c31e 100644 --- a/tools/metrics/histograms/metadata/compositing/histograms.xml +++ b/tools/metrics/histograms/metadata/compositing/histograms.xml
@@ -233,7 +233,7 @@ </histogram> <histogram name="Compositing.DirectRenderer.PartialSwap.RootDamage" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vasilyt@chromium.org</owner> <owner>petermcneeley@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -406,7 +406,7 @@ </histogram> <histogram name="Compositing.Display.Draw.Quads" units="quads" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vmiura@chromium.org</owner> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -873,7 +873,7 @@ </histogram> <histogram name="Compositing.{Process}.CompositorFrame.Quads" units="quads" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vmiura@chromium.org</owner> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -889,7 +889,7 @@ </histogram> <histogram name="CompositorLatency.IpcThread.{LatencyType}" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1150,7 +1150,7 @@ </histogram> <histogram name="Graphics.Smoothness.Jank3.AllSequences" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -1197,7 +1197,7 @@ </histogram> <histogram name="Graphics.Smoothness.Jank3.{Thread}{Sequence}" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml index 349037c..8d0ccae 100644 --- a/tools/metrics/histograms/metadata/content/histograms.xml +++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -680,7 +680,7 @@ <histogram name="ContentSettings.{RegularProfileFiltered}DefaultRequestDesktopSiteSetting" - enum="ContentSetting" expires_after="2025-12-28"> + enum="ContentSetting" expires_after="2026-03-01"> <owner>shuyng@google.com</owner> <owner>twellington@chromium.org</owner> <summary> @@ -1137,7 +1137,7 @@ </histogram> <histogram name="ContentSuggestions.Feed.Network.Duration{NetworkEvent}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>sczs@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>feed@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml index dc685874..c821f71 100644 --- a/tools/metrics/histograms/metadata/cookie/histograms.xml +++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -38,7 +38,7 @@ </histogram> <histogram name="Cookie.AvgCookieJarSizePerKey2" units="bytes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -181,7 +181,7 @@ </summary> </histogram> -<histogram name="Cookie.Count2" units="units" expires_after="2025-12-28"> +<histogram name="Cookie.Count2" units="units" expires_after="2026-03-01"> <owner>morlovich@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -303,7 +303,7 @@ </histogram> <histogram name="Cookie.ErrorInitializeDB" enum="SqliteLoggedResultCode" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -614,7 +614,7 @@ </histogram> <histogram name="Cookie.MaxCookieJarSizePerKey" units="kibibytes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -674,7 +674,7 @@ </histogram> <histogram name="Cookie.OnCookiesAccessed.BatchSize.CookieAccessObserver" - units="accesses" expires_after="2025-12-28"> + units="accesses" expires_after="2026-03-01"> <owner>kawasin@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cras/histograms.xml b/tools/metrics/histograms/metadata/cras/histograms.xml index 82e9648d..9f4b8b92 100644 --- a/tools/metrics/histograms/metadata/cras/histograms.xml +++ b/tools/metrics/histograms/metadata/cras/histograms.xml
@@ -356,7 +356,7 @@ <histogram name="Cras.DeviceRuntime.Output{Device}{HostCapability}{PeripheralCapability}" - units="seconds" expires_after="2025-12-28"> + units="seconds" expires_after="2026-03-01"> <owner>jrwu@google.com</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -414,7 +414,7 @@ </histogram> <histogram name="Cras.DeviceTypeInput" enum="CrasDeviceType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -425,7 +425,7 @@ </histogram> <histogram name="Cras.DeviceTypeOutput" enum="CrasDeviceType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -491,7 +491,7 @@ </histogram> <histogram name="Cras.FetchDelayMilliSeconds" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <!-- Name completed by histogram_suffixes name="Cras.ClientType" and name="Cras.StreamType" --> @@ -1063,7 +1063,7 @@ </histogram> <histogram name="Cras.StreamFlags{Cras_Direction}" units="value" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <!-- Name completed by histogram_suffixes name="Cras.Direction" and name="Cras.ClientType" -->
diff --git a/tools/metrics/histograms/metadata/cros_audio/histograms.xml b/tools/metrics/histograms/metadata/cros_audio/histograms.xml index 559f601..16b21f9 100644 --- a/tools/metrics/histograms/metadata/cros_audio/histograms.xml +++ b/tools/metrics/histograms/metadata/cros_audio/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="ChromeOS.AudioSelection" enum="AudioSelectionEvents" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -79,7 +79,7 @@ </histogram> <histogram name="ChromeOS.AudioSelection.{AudioType}.SystemSwitchAudio" - enum="BooleanSwitched" expires_after="2025-12-31"> + enum="BooleanSwitched" expires_after="2026-03-01"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -247,7 +247,7 @@ <histogram name="ChromeOS.AudioSelection.{AudioType}.UserOverrideSystem{SwitchDecision}Audio.BeforeAndAfterAudioDeviceSet" - enum="AudioSelectionBeforeAndAfterDeviceSet" expires_after="2025-12-31"> + enum="AudioSelectionBeforeAndAfterDeviceSet" expires_after="2026-03-01"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -267,7 +267,7 @@ <histogram name="ChromeOS.AudioSelection.{AudioType}.UserOverrideSystem{SwitchDecision}TimeElapsed" - units="minutes" expires_after="2025-12-31"> + units="minutes" expires_after="2026-03-01"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -387,7 +387,7 @@ </histogram> <histogram name="ChromeOS.CrosAudioConfig.OutputVolumeSetTo" units="%" - expires_after="2025-12-30"> + expires_after="2026-03-01"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml index 6462663..dcfc39d9 100644 --- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml +++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -545,7 +545,7 @@ </histogram> <histogram name="CustomTabs.MayLaunchUrlType" enum="MayLaunchUrlType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>lizeb@chromium.org</owner> <summary> Android only. Which flavors of mayLaunchUrl() were used before a tab launch. @@ -560,7 +560,7 @@ </histogram> <histogram name="CustomTabs.Minimized.MinimizeSuccess" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sinansahin@google.com</owner> <owner>chrome-connective-tissue@google.com</owner> <summary> @@ -697,7 +697,7 @@ </histogram> <histogram name="CustomTabs.Prefetch.PrefetchCalled" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>taiyo@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -784,7 +784,7 @@ </histogram> <histogram name="CustomTabs.SpareRenderer" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>adelm@google.com</owner> <owner>chrome-connective-tissue@google.com</owner> <summary> @@ -803,7 +803,7 @@ </histogram> <histogram name="CustomTabs.Startup.StartedNavigationEarly" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mthiesse@chromium.org</owner> <owner>chrome-connective-tissue@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/data/histograms.xml b/tools/metrics/histograms/metadata/data/histograms.xml index e999e728..ec4232f 100644 --- a/tools/metrics/histograms/metadata/data/histograms.xml +++ b/tools/metrics/histograms/metadata/data/histograms.xml
@@ -105,7 +105,7 @@ </histogram> <histogram name="DataUse.BytesReceived3.Delegate" units="bytes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>curranmax@chromium.org</owner> <owner>ryansturm@chromium.org</owner> <owner>spelchat@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/dev/histograms.xml b/tools/metrics/histograms/metadata/dev/histograms.xml index bfe54ad..9811a17 100644 --- a/tools/metrics/histograms/metadata/dev/histograms.xml +++ b/tools/metrics/histograms/metadata/dev/histograms.xml
@@ -152,7 +152,7 @@ </histogram> <histogram name="DevTools.ExperimentDisabledAtLaunch" - enum="DevtoolsExperiments" expires_after="2025-12-28"> + enum="DevtoolsExperiments" expires_after="2026-03-01"> <owner>yangguo@google.com</owner> <owner>changhaohan@google.com</owner> <summary> @@ -305,7 +305,7 @@ </histogram> <histogram name="DevTools.Launch{DevToolsLaunchPanels}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>yangguo@google.com</owner> <owner>bmeurer@google.com</owner> <summary> @@ -519,7 +519,7 @@ </summary> </histogram> -<histogram name="DevTools.TraceLoad" units="ms" expires_after="2025-12-28"> +<histogram name="DevTools.TraceLoad" units="ms" expires_after="2026-03-01"> <owner>paulirish@google.com</owner> <owner>jacktfranklin@google.com</owner> <owner>victorporof@google.com</owner> @@ -541,7 +541,7 @@ </histogram> <histogram name="DevTools.VisualLogging.ProcessingTime" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>danilsomsikov@google.com</owner> <owner>hablich@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/disk/histograms.xml b/tools/metrics/histograms/metadata/disk/histograms.xml index c893334..e22b24a 100644 --- a/tools/metrics/histograms/metadata/disk/histograms.xml +++ b/tools/metrics/histograms/metadata/disk/histograms.xml
@@ -33,7 +33,7 @@ </summary> </histogram> -<histogram name="DiskCache.0.EvictedAge" units="ms" expires_after="2025-12-28"> +<histogram name="DiskCache.0.EvictedAge" units="ms" expires_after="2026-03-01"> <owner>ricea@chromium.org</owner> <owner>src/net/disk_cache/OWNERS</owner> <summary> @@ -54,7 +54,7 @@ </histogram> <histogram name="DiskCache.0.TotalIOTimeRead" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jam@chromium.org</owner> <owner>swarm-team@google.com</owner> <summary> @@ -65,7 +65,7 @@ </histogram> <histogram name="DiskCache.0.TotalIOTimeWrite" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jam@chromium.org</owner> <owner>swarm-team@google.com</owner> <summary> @@ -76,7 +76,7 @@ </histogram> <histogram name="DiskCache.0.TrimmedDeletedRankingEntries" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ricea@chromium.org</owner> <owner>src/net/disk_cache/OWNERS</owner> <summary> @@ -90,7 +90,7 @@ </histogram> <histogram name="DiskCache.HashBucketOK.Sampled" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>morlovich@chromium.org</owner> <owner>src/net/disk_cache/OWNERS</owner> <summary> @@ -100,7 +100,7 @@ </histogram> <histogram name="DiskCache.MoveCacheToRestartCache.Windows" - enum="BooleanSuccess" expires_after="2025-12-28"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -111,7 +111,7 @@ </histogram> <histogram name="DiskCache.MoveCacheToRestartCacheError.Windows" - enum="WinGetLastError" expires_after="2025-12-28"> + enum="WinGetLastError" expires_after="2026-03-01"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/download/histograms.xml b/tools/metrics/histograms/metadata/download/histograms.xml index 68d5fd7..befeff5 100644 --- a/tools/metrics/histograms/metadata/download/histograms.xml +++ b/tools/metrics/histograms/metadata/download/histograms.xml
@@ -156,7 +156,7 @@ </histogram> <histogram name="Download.ApiFunctions" enum="DownloadFunctions" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dtrainor@chromium.org</owner> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml index abee944..4ad51958 100644 --- a/tools/metrics/histograms/metadata/enterprise/histograms.xml +++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -2731,7 +2731,7 @@ </histogram> <histogram name="Enterprise.OnBulkDataEntry.DataSize" units="bytes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>domfc@chromium.org</owner> <owner>webprotect-team@google.com</owner> <summary> @@ -3048,7 +3048,7 @@ </histogram> <histogram name="Enterprise.RegularUserSession.SessionLength" units="minutes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bfranz@chromium.org</owner> <owner>chromeos-kiosk-eng@google.com</owner> <summary> @@ -3766,7 +3766,7 @@ </histogram> <histogram name="Enterprise.UserPolicy.Count" units="policies" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vincb@google.com</owner> <owner>ftirelo@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/event/histograms.xml b/tools/metrics/histograms/metadata/event/histograms.xml index 1a168c9..47d565a9 100644 --- a/tools/metrics/histograms/metadata/event/histograms.xml +++ b/tools/metrics/histograms/metadata/event/histograms.xml
@@ -605,7 +605,7 @@ </histogram> <histogram name="Event.ScrollJank.DelayedFramesPercentage.PerScroll{Length}" - units="%" expires_after="2025-12-28"> + units="%" expires_after="2026-03-01"> <owner>kartarsingh@google.com</owner> <owner>jonross@chromium.org</owner> <owner>woa-performance-team@google.com</owner> @@ -627,7 +627,7 @@ </histogram> <histogram name="Event.ScrollJank.MissedVsyncs.PerFrame" units="counts" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kartarsingh@google.com</owner> <owner>jonross@chromium.org</owner> <owner>woa-performance-team@google.com</owner> @@ -1009,7 +1009,7 @@ </histogram> <histogram name="EventLatency.TotalLatency" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1023,7 +1023,7 @@ <histogram name="EventLatency.{NonGsuScrollEventType}.{ScrollInputType}.TotalLatency2" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1089,7 +1089,7 @@ </histogram> <histogram name="EventLatency.{PinchEventType}.{PinchInputType}.TotalLatency" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1141,7 +1141,7 @@ </histogram> <histogram name="EventLatency.{ScrollEventType}.{DispatchStage}.{RatioType}" - units="%" expires_after="2025-12-28"> + units="%" expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml index f5187f5..07b1698 100644 --- a/tools/metrics/histograms/metadata/extensions/histograms.xml +++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -3387,7 +3387,7 @@ </histogram> <histogram name="Extensions.ManifestVersion2Count.{ManifestLocation}" - units="number of extensions" expires_after="2025-12-28"> + units="number of extensions" expires_after="2026-03-01"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -3413,7 +3413,7 @@ </histogram> <histogram name="Extensions.ManifestVersionByLocation.{ManifestLocation}" - units="manifest version" expires_after="2025-12-28"> + units="manifest version" expires_after="2026-03-01"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -3848,7 +3848,7 @@ </histogram> <histogram name="Extensions.SearchEngineOverrides2" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rdevlin.cronin@chromium.org</owner> <owner>kelvinjiang@chromium.org</owner> <summary> @@ -3978,7 +3978,7 @@ </histogram> <histogram name="Extensions.ServiceWorkerBackground.Registration_FailStatus" - enum="ServiceWorkerStatusCode" expires_after="2025-12-28"> + enum="ServiceWorkerStatusCode" expires_after="2026-03-01"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4150,7 +4150,7 @@ </histogram> <histogram name="Extensions.ServiceWorkerBackground.WorkerCountAfterAdd" - units="registered workers" expires_after="2025-12-28"> + units="registered workers" expires_after="2026-03-01"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4161,7 +4161,7 @@ </histogram> <histogram name="Extensions.ServiceWorkerBackground.WorkerCountAfterRemove" - units="registered workers" expires_after="2025-12-28"> + units="registered workers" expires_after="2026-03-01"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4274,7 +4274,7 @@ <histogram name="Extensions.ServiceWorkerRenderer.ExtensionLoadStatusInWorkerScriptEvaluation" - enum="ExtensionLoadStatusOnScriptEval" expires_after="2025-12-28"> + enum="ExtensionLoadStatusOnScriptEval" expires_after="2026-03-01"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4396,7 +4396,7 @@ </histogram> <histogram name="Extensions.Toolbar.ExtensionsActivatedFromRequestAccessButton" - units="Extension Count" expires_after="2025-12-28"> + units="Extension Count" expires_after="2026-03-01"> <owner>emiliapaz@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/families/histograms.xml b/tools/metrics/histograms/metadata/families/histograms.xml index 3d04c9f..6d6fb96c 100644 --- a/tools/metrics/histograms/metadata/families/histograms.xml +++ b/tools/metrics/histograms/metadata/families/histograms.xml
@@ -243,7 +243,7 @@ </histogram> <histogram name="ChromeOS.FamilyUser.NumSecondaryAccounts" units="accounts" - expires_after="2025-11-01"> + expires_after="2026-03-01"> <owner>zhangwenyu@google.com</owner> <owner>longbowei@google.com</owner> <owner>cros-families-eng@google.com</owner> @@ -750,7 +750,7 @@ </histogram> <histogram name="FamilyUser.{ExtensionStatus}ExtensionsCount2" - units="Number of Extensions" expires_after="2025-12-28"> + units="Number of Extensions" expires_after="2026-03-01"> <owner>zhangwenyu@google.com</owner> <owner>longbowei@google.com</owner> <owner>cros-families-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml index 94e3578..0bf9170 100644 --- a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml +++ b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
@@ -824,7 +824,7 @@ </histogram> <histogram name="InProductHelp.ShownTime2.{IPHFeature}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gayane@google.com</owner> <owner>lpromero@google.com</owner> <owner>gambard@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml b/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml index 092461a..2d683c1 100644 --- a/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml +++ b/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml
@@ -25,7 +25,7 @@ <histogram name="FingerprintingProtection.BlockedDomainListComponent.InstallationResult" enum="FingerprintingProtectionComponentInstallationResult" - expires_after="2025-12-30"> + expires_after="2026-03-01"> <owner>trishalfonso@google.com</owner> <owner>src/components/fingerprinting_protection_filter/OWNERS</owner> <summary> @@ -160,7 +160,7 @@ <histogram name="FingerprintingProtection.DocumentLoad.SubframeFilteringDelay.{Result}" - units="microseconds" expires_after="2025-12-30"> + units="microseconds" expires_after="2026-03-01"> <owner>thesalsa@google.com</owner> <owner>trishalfonso@google.com</owner> <owner>rizvis@google.com</owner> @@ -182,7 +182,7 @@ <histogram name="FingerprintingProtection.DocumentLoad.SubframeFilteringDelay.{Result}.Incognito" - units="microseconds" expires_after="2025-12-30"> + units="microseconds" expires_after="2026-03-01"> <owner>thesalsa@google.com</owner> <owner>trishalfonso@google.com</owner> <owner>rizvis@google.com</owner> @@ -247,7 +247,7 @@ </histogram> <histogram name="FingerprintingProtection.IndexRuleset.Verify2.WallDuration" - units="ms" expires_after="2025-12-30"> + units="ms" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -320,7 +320,7 @@ </histogram> <histogram name="FingerprintingProtection.PageLoad.ActivationLevel" - enum="FingerprintingProtectionActivationLevel" expires_after="2025-12-30"> + enum="FingerprintingProtectionActivationLevel" expires_after="2026-03-01"> <owner>thesalsa@google.com</owner> <owner>trishalfonso@google.com</owner> <owner>rizvis@google.com</owner> @@ -335,7 +335,7 @@ <histogram name="FingerprintingProtection.PageLoad.NumSubresourceLoads.Disallowed" - units="resource loads" expires_after="2025-12-30"> + units="resource loads" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -365,7 +365,7 @@ <histogram name="FingerprintingProtection.PageLoad.NumSubresourceLoads.Evaluated" - units="resource loads" expires_after="2025-12-30"> + units="resource loads" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -396,7 +396,7 @@ <histogram name="FingerprintingProtection.PageLoad.NumSubresourceLoads.MatchedRules" - units="resource loads" expires_after="2025-12-30"> + units="resource loads" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -411,7 +411,7 @@ <histogram name="FingerprintingProtection.PageLoad.NumSubresourceLoads.MatchedRules.Incognito" - units="resource loads" expires_after="2025-12-30"> + units="resource loads" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -425,7 +425,7 @@ </histogram> <histogram name="FingerprintingProtection.PageLoad.NumSubresourceLoads.Total" - units="resource loads" expires_after="2025-12-30"> + units="resource loads" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -486,7 +486,7 @@ <histogram name="FingerprintingProtection.PageLoad.RootNavigation.ActivationState" - enum="SubresourceFilterActivationState" expires_after="2025-12-30"> + enum="SubresourceFilterActivationState" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>trishalfonso@google.com</owner> <owner>thesalsa@google.com</owner> @@ -516,7 +516,7 @@ <histogram name="FingerprintingProtection.PageLoad.SubresourceEvaluation.TotalCPUDuration" - units="microseconds" expires_after="2025-12-30"> + units="microseconds" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -533,7 +533,7 @@ <histogram name="FingerprintingProtection.PageLoad.SubresourceEvaluation.TotalWallDuration" - units="microseconds" expires_after="2025-12-30"> + units="microseconds" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -550,7 +550,7 @@ <histogram name="FingerprintingProtection.SubresourceLoad.Evaluation.CPUDuration" - units="microseconds" expires_after="2025-12-30"> + units="microseconds" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -570,7 +570,7 @@ <histogram name="FingerprintingProtection.SubresourceLoad.Evaluation.WallDuration" - units="microseconds" expires_after="2025-12-30"> + units="microseconds" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner> @@ -590,7 +590,7 @@ <histogram name="FingerprintingProtection.SubresourceLoad.TotalDeferTime.{Result}" - units="microseconds" expires_after="2025-12-30"> + units="microseconds" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <summary> @@ -614,7 +614,7 @@ </histogram> <histogram name="FingerprintingProtection.WebContentsObserver.RefreshCount" - units="refresh counts" expires_after="2025-12-30"> + units="refresh counts" expires_after="2026-03-01"> <owner>rizvis@google.com</owner> <owner>thesalsa@google.com</owner> <owner>tanub@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/geolocation/histograms.xml b/tools/metrics/histograms/metadata/geolocation/histograms.xml index 924bd20..4f23f0a 100644 --- a/tools/metrics/histograms/metadata/geolocation/histograms.xml +++ b/tools/metrics/histograms/metadata/geolocation/histograms.xml
@@ -237,7 +237,7 @@ </histogram> <histogram name="Geolocation.NetworkLocationProvider.SessionResult" - enum="NetworkLocationRequestResult" expires_after="2025-12-28"> + enum="NetworkLocationRequestResult" expires_after="2026-03-01"> <owner>alvinji@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary> @@ -251,7 +251,7 @@ </histogram> <histogram name="Geolocation.NetworkLocationProvider.TimeToFirstPosition" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>alvinji@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml index 27285fd..4a025cf9f 100644 --- a/tools/metrics/histograms/metadata/gpu/histograms.xml +++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -343,7 +343,7 @@ </histogram> <histogram name="GPU.ANGLE.D3D11FeatureLevel" enum="D3DFeatureLevel" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>geofflang@google.com</owner> <owner>angle-team@google.com</owner> <summary> @@ -502,7 +502,7 @@ </histogram> <histogram name="GPU.ContextLost.{ContextType}" enum="ContextLostReason" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -790,7 +790,7 @@ </histogram> <histogram name="GPU.EGLDisplayType" enum="EGLDisplayType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary>The display type used to ask for an EGLDisplay.</summary> @@ -837,7 +837,7 @@ </histogram> <histogram name="GPU.EstablishGpuChannelSyncRetry" enum="BooleanSuccess" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>fangzhoug@chromium.org</owner> <owner>kylechar@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -871,7 +871,7 @@ </histogram> <histogram name="GPU.FallbackEventCause" enum="GPUFallbackEventCauseType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>blundell@chromium.org</owner> <owner>chrome-gpu-metric-alerts@google.com</owner> <summary> @@ -946,7 +946,7 @@ </histogram> <histogram name="GPU.GPUProcessExitCode" enum="GPUProcessExitCode" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -955,7 +955,7 @@ </histogram> <histogram name="GPU.GPUProcessLaunchTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vmiura@chromium.org</owner> <summary> Startup time of the GPU process as measured by the GPU process host. @@ -980,7 +980,7 @@ </histogram> <histogram name="GPU.GPUProcessTerminationStatus2" enum="GpuTerminationStatus" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vmiura@chromium.org</owner> <summary> Counts for each time the GPU Process Host detects the process dies. @@ -1034,7 +1034,7 @@ </histogram> <histogram name="Gpu.GrLinkProgramUs" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>geofflang@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1045,7 +1045,7 @@ </histogram> <histogram name="Gpu.GrShaderCacheEnabled" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>geofflang@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1099,7 +1099,7 @@ </histogram> <histogram name="GPU.IntelGpuGeneration" enum="IntelGpuGeneration" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1152,7 +1152,7 @@ </histogram> <histogram name="Gpu.Metal.FamilyMac" enum="MetalFamilyMac" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>cwallez@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1289,7 +1289,7 @@ </histogram> <histogram name="GPU.ProcessLifetimeEvents.HardwareAccelerated" - enum="GPUProcessLifetimeEvent" expires_after="2025-12-28"> + enum="GPUProcessLifetimeEvent" expires_after="2026-03-01"> <owner>vmiura@chromium.org</owner> <summary> Recorded once for every GPU process launch and crash when GPU process is @@ -1344,7 +1344,7 @@ </histogram> <histogram name="GPU.SharedImage.BackingType" enum="SharedImageBackingType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kylechar@chromium.org</owner> <owner>chrome-gpu-metric-alerts@google.com</owner> <summary> @@ -1375,7 +1375,7 @@ </histogram> <histogram name="GPU.SoftwareRendering" enum="BooleanSoftwareRendering" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1438,7 +1438,7 @@ </histogram> <histogram name="GPU.Vulkan.PipelineCache.vkCreateGraphicsPipelines" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>vasilyt@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1600,7 +1600,7 @@ </histogram> <histogram name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.CacheHit" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>lokokung@google.com</owner> <owner>mdb.webgpu-dev-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/help_app/histograms.xml b/tools/metrics/histograms/metadata/help_app/histograms.xml index 5c3d06f1..e771ad8 100644 --- a/tools/metrics/histograms/metadata/help_app/histograms.xml +++ b/tools/metrics/histograms/metadata/help_app/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="Discover.Overall.AppLaunched" enum="LaunchSource" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>callistus@google.com</owner> <owner>showoff-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml index 6b4afc8..3ec8688 100644 --- a/tools/metrics/histograms/metadata/history/histograms.xml +++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -1392,7 +1392,7 @@ </histogram> <histogram name="History.DatabaseSqliteError" enum="SqliteLoggedResultCode" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sophiechang@chromium.org</owner> <owner>asully@chromium.org</owner> <component>1456716</component> @@ -1403,7 +1403,7 @@ </histogram> <histogram name="History.DomainCount1Day_V2" units="domains" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -1445,7 +1445,7 @@ </histogram> <histogram name="History.DomainCount1Day_V3" units="domains" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -1481,7 +1481,7 @@ </histogram> <histogram name="History.DomainCount28Day_V2" units="domains" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -1559,7 +1559,7 @@ </histogram> <histogram name="History.DomainCount7Day_V2" units="domains" - expires_after="2025-10-26"> + expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -2825,7 +2825,7 @@ </summary> </histogram> -<histogram name="History.URLTableCount" units="URLs" expires_after="2025-12-28"> +<histogram name="History.URLTableCount" units="URLs" expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>sky@chromium.org</owner> <component>1456716</component> @@ -2868,7 +2868,7 @@ </histogram> <histogram name="History.VisitedLinks.NumSaltsForNavigationsDuringBuild" - units="salts" expires_after="2025-12-28"> + units="salts" expires_after="2026-03-01"> <owner>kyraseevers@chromium.org</owner> <owner>janiceliu@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/holding_space/histograms.xml b/tools/metrics/histograms/metadata/holding_space/histograms.xml index 10ab8e2..dc62c70 100644 --- a/tools/metrics/histograms/metadata/holding_space/histograms.xml +++ b/tools/metrics/histograms/metadata/holding_space/histograms.xml
@@ -130,7 +130,7 @@ </histogram> <histogram name="HoldingSpace.Item.Action.All" enum="HoldingSpaceItemAction" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>dmblack@google.com</owner> <owner>alexandrahill@google.com</owner> <summary> @@ -190,7 +190,7 @@ </histogram> <histogram name="HoldingSpace.Item.Action.{action}" enum="HoldingSpaceItemType" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>dmblack@google.com</owner> <owner>alexandrahill@google.com</owner> <summary> @@ -212,7 +212,7 @@ </histogram> <histogram name="HoldingSpace.Item.Action.{action}.FileSystemType" - enum="HoldingSpaceFileSystemType" expires_after="2025-12-31"> + enum="HoldingSpaceFileSystemType" expires_after="2026-03-01"> <owner>dmblack@google.com</owner> <owner>alexandrahill@google.com</owner> <summary> @@ -250,7 +250,7 @@ </histogram> <histogram name="HoldingSpace.Item.VisibleCount.{type}" units="items" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>dmblack@google.com</owner> <owner>alexandrahill@google.com</owner> <summary> @@ -262,7 +262,7 @@ <histogram name="HoldingSpace.Item.VisibleCount.{type}.FileSystemType.{fs_type}" - units="items" expires_after="2025-12-31"> + units="items" expires_after="2026-03-01"> <owner>dmblack@google.com</owner> <owner>alexandrahill@google.com</owner> <summary> @@ -285,7 +285,7 @@ </histogram> <histogram name="HoldingSpace.Suggestions.Action.All" - enum="HoldingSpaceSuggestionsAction" expires_after="2025-12-31"> + enum="HoldingSpaceSuggestionsAction" expires_after="2026-03-01"> <owner>dmblack@google.com</owner> <owner>alexandrahill@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/input/histograms.xml b/tools/metrics/histograms/metadata/input/histograms.xml index a927a207..50b989bd 100644 --- a/tools/metrics/histograms/metadata/input/histograms.xml +++ b/tools/metrics/histograms/metadata/input/histograms.xml
@@ -113,7 +113,7 @@ </histogram> <histogram name="Input.ToolType.Android" units="tool type" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>alexmitra@chromium.org</owner> <owner>flackr@chromium.org</owner> <owner>peconn@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/interstitial/histograms.xml b/tools/metrics/histograms/metadata/interstitial/histograms.xml index 8412ca6..69a06e5 100644 --- a/tools/metrics/histograms/metadata/interstitial/histograms.xml +++ b/tools/metrics/histograms/metadata/interstitial/histograms.xml
@@ -396,7 +396,7 @@ <histogram name="interstitial.{SecurityInterstitialSBType}decision{RepeatVisit}{IsPostCommitInterstitialSuffix}" - enum="SecurityInterstitialDecision" expires_after="2025-12-28"> + enum="SecurityInterstitialDecision" expires_after="2026-03-01"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -488,7 +488,7 @@ <histogram name="interstitial.{SecurityInterstitialSBType}show_delay{TimeRange}{SecurityInterstitialSBWithSourceType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml index d6cd37de..7183270a 100644 --- a/tools/metrics/histograms/metadata/ios/histograms.xml +++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -347,17 +347,6 @@ </summary> </histogram> -<histogram name="IOS.Bookmarks.DefaultBookmarkFolderOutcome" - enum="IOSDefaultBookmarkFolderOutcome" expires_after="2025-08-24"> - <owner>mastiz@chromium.org</owner> - <owner>arthurmilchior@chromium.org</owner> - <component>1457392</component> - <summary> - Logs how the default bookmark folder is determined, when one or more - bookmarks are being saved by the user. Only recorded on iOS. - </summary> -</histogram> - <histogram name="IOS.BringAndroidTabs.ActionOnPrompt" enum="IOSBringAndroidTabsPromptActionType" expires_after="2026-01-04"> <owner>hiramahmood@google.com</owner> @@ -1669,7 +1658,7 @@ </histogram> <histogram name="IOS.DocumentDownload.MimeType" enum="DownloadMimeTypeResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>qpubert@google.com</owner> <owner>olivierrobin@chromium.org</owner> <owner>bling-team@google.com</owner> @@ -1765,7 +1754,7 @@ </histogram> <histogram name="IOS.ExplainWithGemini.CharSelected" units="characters" - expires_after="2025-08-31"> + expires_after="2026-03-01"> <owner>prasanaa@google.com</owner> <owner>bling-alchemy-eng@google.com</owner> <summary> @@ -1812,7 +1801,7 @@ </histogram> <histogram name="IOS.FilePicker.Drive.AccountSelection" - enum="IOSFilePickerDriveAccountSelection" expires_after="2025-12-28"> + enum="IOSFilePickerDriveAccountSelection" expires_after="2026-03-01"> <owner>qpubert@google.com</owner> <owner>erahmaoui@google.com</owner> <owner>bling-team@google.com</owner> @@ -2469,7 +2458,7 @@ </histogram> <histogram name="IOS.HomeCustomization.MagicStack.SafetyCheck.Enabled" - enum="Boolean" expires_after="2025-10-12"> + enum="Boolean" expires_after="2026-03-01"> <owner>adamta@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -2479,7 +2468,7 @@ </histogram> <histogram name="IOS.HomeCustomization.MagicStack.SetUpList.Enabled" - enum="Boolean" expires_after="2025-10-12"> + enum="Boolean" expires_after="2026-03-01"> <owner>adamta@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -2489,7 +2478,7 @@ </histogram> <histogram name="IOS.HomeCustomization.MagicStack.TabResumption.Enabled" - enum="Boolean" expires_after="2025-10-12"> + enum="Boolean" expires_after="2026-03-01"> <owner>adamta@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -2499,7 +2488,7 @@ </histogram> <histogram name="IOS.HomeCustomization.MagicStack.Tips.Enabled" enum="Boolean" - expires_after="2025-10-12"> + expires_after="2026-03-01"> <owner>bwwilliams@google.com</owner> <owner>adamta@google.com</owner> <owner>bling-pandamonium@google.com</owner> @@ -2510,7 +2499,7 @@ </histogram> <histogram name="IOS.HomeCustomization.Opened" - enum="IOSHomeCustomizationEntrypoint" expires_after="2025-12-14"> + enum="IOSHomeCustomizationEntrypoint" expires_after="2026-03-01"> <owner>adamta@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -2877,6 +2866,16 @@ </summary> </histogram> +<histogram name="IOS.MagicStack.Module.Click.AppBundlePromo" units="index" + expires_after="2026-01-18"> + <owner>ericekey@google.com</owner> + <owner>bling-pandamonium@google.com</owner> + <summary> + Records the rank index of the App Bundle promo module when a user clicks on + it. + </summary> +</histogram> + <histogram name="IOS.MagicStack.Module.Click.MostVisited" units="index" expires_after="2026-09-28"> <owner>thegreenfrog@chromium.org</owner> @@ -2925,7 +2924,7 @@ </histogram> <histogram name="IOS.MagicStack.Module.Click.SendTabPromo" units="index" - expires_after="2025-05-20"> + expires_after="2026-02-28"> <owner>hiramahmood@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -3644,7 +3643,7 @@ <histogram name="IOS.Notifications.SendTab.MagicStack.AllowNotificationsPressed" - enum="Boolean" expires_after="2025-09-13"> + enum="Boolean" expires_after="2026-02-28"> <owner>hiramahmood@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -3655,7 +3654,7 @@ <histogram name="IOS.Notifications.SendTab.Received" enum="PushNotificationSettingsAuthorizationStatus" - expires_after="2025-11-23"> + expires_after="2026-02-28"> <owner>hiramahmood@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -3738,7 +3737,7 @@ </histogram> <histogram name="IOS.NTP.Impression" enum="IOSNTPImpressionType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-team@google.com</owner> <summary> @@ -3778,7 +3777,7 @@ </histogram> <histogram name="IOS.NumberOfContextsToOpen" enum="ContextsToOpen" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>fedegermi@google.com</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -3825,7 +3824,7 @@ </histogram> <histogram name="IOS.Omnibox.DeviceSwitcherResult.{Context}" - enum="OmniboxDeviceSwitcherResult" expires_after="2025-12-28"> + enum="OmniboxDeviceSwitcherResult" expires_after="2026-03-01"> <owner>christianxu@chromium.org</owner> <owner>bling-team@google.com</owner> <summary> @@ -3839,7 +3838,7 @@ </histogram> <histogram name="IOS.Omnibox.SteadyStatePositionAtStartup" - enum="OmniboxPositionType" expires_after="2025-12-28"> + enum="OmniboxPositionType" expires_after="2026-03-01"> <owner>christianxu@chromium.org</owner> <owner>bling-team@google.com</owner> <summary> @@ -3858,7 +3857,7 @@ </histogram> <histogram name="IOS.Omnibox.SuggestionsListScrolled.{PageClass}" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>christianxu@chromium.org</owner> <owner>stkhapugin@chromium.org</owner> <owner>bling-team@google.com</owner> @@ -4572,7 +4571,7 @@ </histogram> <histogram name="IOS.PushNotification.ChimeDeviceRegistration" - enum="BooleanSuccess" expires_after="2025-12-28"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>danieltwhite@google.com</owner> <owner>scottyoder@google.com</owner> <summary> @@ -4614,7 +4613,7 @@ </histogram> <histogram name="IOS.PushNotification.ClientManagerAccessFailure" - enum="PushNotificationClientManagerFailurePoint" expires_after="2025-12-28"> + enum="PushNotificationClientManagerFailurePoint" expires_after="2026-03-01"> <owner>bwwilliams@google.com</owner> <owner>scottyoder@google.com</owner> <owner>treib@google.com</owner> @@ -4724,7 +4723,7 @@ <histogram name="IOS.PushNotification.NotificationAutorizationStatusChangedToDenied" enum="PushNotificationSettingsAuthorizationStatus" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>danieltwhite@google.com</owner> <owner>scottyoder@google.com</owner> <summary> @@ -4752,7 +4751,7 @@ <histogram name="IOS.PushNotification.NotificationSettingsAuthorizationStatus" enum="PushNotificationSettingsAuthorizationStatus" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>danieltwhite@google.com</owner> <owner>scottyoder@google.com</owner> <summary> @@ -5680,7 +5679,7 @@ </histogram> <histogram name="IOS.Sessions.DiscardedSceneConnectedAfterBeingPurged" - enum="Boolean" expires_after="2025-12-31"> + enum="Boolean" expires_after="2026-03-01"> <owner>sdefresne@google.com</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -5702,7 +5701,7 @@ </histogram> <histogram name="IOS.Sessions.DiscardedScenesStillConnectedCount" - units="sessions" expires_after="2025-12-31"> + units="sessions" expires_after="2026-03-01"> <owner>sdefresne@google.com</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -5733,7 +5732,7 @@ </histogram> <histogram name="IOS.SetUpList.Displayed" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -6346,7 +6345,7 @@ </histogram> <histogram name="IOS.TipsMagicStack.Module.DisplayedType" enum="TipIdentifier" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bmcclure@google.com</owner> <owner>bwwilliams@google.com</owner> <summary> @@ -6356,7 +6355,7 @@ </histogram> <histogram name="IOS.TipsMagicStack.Module.TappedType" enum="TipIdentifier" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bmcclure@google.com</owner> <owner>bwwilliams@google.com</owner> <summary> @@ -6456,7 +6455,7 @@ </histogram> <histogram name="IOS.Variations.FirstRun.SeedFetchTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ginnyhuang@chromium.org</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -6479,7 +6478,7 @@ </histogram> <histogram name="IOS.Web.FileInput.Clicked" enum="IOSWebFileInputAttributes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>olivierrobin@chromium.org</owner> <owner>qpubert@google.com</owner> <summary> @@ -6620,7 +6619,7 @@ </histogram> <histogram name="IOS.WidgetKit.Action" enum="IOSWidgetKitAction" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rkgibson@google.com</owner> <owner>muradyan@google.com</owner> <summary> @@ -6630,7 +6629,7 @@ </histogram> <histogram name="IOS.WidgetKit.{Status}" enum="IOSWidgetKitExtensionKind" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rkgibson@google.com</owner> <owner>muradyan@chromium.org</owner> <summary> @@ -6649,7 +6648,7 @@ </histogram> <histogram name="IOS.WidgetsForMIM.DeletedAccountUiDisplayed" - enum="IOSWidgetKitDeletedUiCount" expires_after="2025-12-31"> + enum="IOSWidgetKitDeletedUiCount" expires_after="2026-03-01"> <owner>fedegermi@google.com</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -6793,7 +6792,7 @@ </histogram> <histogram name="ManualFallback.VisibleSuggestions.OpenCreditCards" - units="Suggestions" expires_after="2025-12-28"> + units="Suggestions" expires_after="2026-03-01"> <owner>tmartino@chromium.org</owner> <owner>bling-transactions@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/language/histograms.xml b/tools/metrics/histograms/metadata/language/histograms.xml index ab6d112e..c685e3c 100644 --- a/tools/metrics/histograms/metadata/language/histograms.xml +++ b/tools/metrics/histograms/metadata/language/histograms.xml
@@ -128,7 +128,7 @@ </histogram> <histogram name="LanguageDetection.TFLiteModel.LanguageDetectionModelState" - enum="LanguageDetectionModelState" expires_after="2025-12-28"> + enum="LanguageDetectionModelState" expires_after="2026-03-01"> <owner>mcrouse@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary> @@ -139,7 +139,7 @@ <histogram name="LanguageDetection.TFLiteModel.UpdateLanaguageDetectionModelTime" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>suzukikeita@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -289,7 +289,7 @@ </histogram> <histogram name="LanguageSettings.PageImpression" - enum="LanguageSettingsPageType" expires_after="2025-10-26"> + enum="LanguageSettingsPageType" expires_after="2026-03-01"> <owner>googleo@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary> @@ -312,7 +312,7 @@ </histogram> <histogram name="LanguageUsage.AcceptLanguage" enum="LanguageName" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>perrier@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary> @@ -322,7 +322,7 @@ </histogram> <histogram name="LanguageUsage.AcceptLanguage.Count" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dvallet@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary> @@ -354,7 +354,7 @@ </histogram> <histogram name="LanguageUsage.AcceptLanguageAndContentLanguageUsage" - enum="AcceptLanguageAndContentLanguageUsage" expires_after="2025-12-28"> + enum="AcceptLanguageAndContentLanguageUsage" expires_after="2026-03-01"> <owner>victortan@chromium.org</owner> <owner>katabolism-finch@google.com</owner> <summary> @@ -365,7 +365,7 @@ </histogram> <histogram name="LanguageUsage.AcceptLanguageAndXmlHtmlLangUsage" - enum="AcceptLanguageAndXmlHtmlLangUsage" expires_after="2025-12-28"> + enum="AcceptLanguageAndXmlHtmlLangUsage" expires_after="2026-03-01"> <owner>victortan@chromium.org</owner> <owner>katabolism-finch@google.com</owner> <summary> @@ -376,7 +376,7 @@ </histogram> <histogram name="LanguageUsage.MostFrequentPageLanguages" enum="LanguageName" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>perrier@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/lens/histograms.xml b/tools/metrics/histograms/metadata/lens/histograms.xml index dc28435..4990786 100644 --- a/tools/metrics/histograms/metadata/lens/histograms.xml +++ b/tools/metrics/histograms/metadata/lens/histograms.xml
@@ -678,7 +678,7 @@ </histogram> <histogram name="Lens.Overlay.Performance.AverageFPS" units="fps" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mercerd@google.com</owner> <owner>lens-chrome@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/login/histograms.xml b/tools/metrics/histograms/metadata/login/histograms.xml index 8eac81be..c10d154 100644 --- a/tools/metrics/histograms/metadata/login/histograms.xml +++ b/tools/metrics/histograms/metadata/login/histograms.xml
@@ -99,7 +99,7 @@ </histogram> <histogram name="Login.DevicePolicyState" enum="DevicePoliciesState" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>igorcov@chromium.org</owner> <owner>chromeos-commercial-remote-management@chromium.org</owner> <summary> @@ -314,7 +314,7 @@ </histogram> <histogram name="Login.StateKeyGenerationStatus" - enum="LoginStateKeyGenerationStatus" expires_after="2025-12-28"> + enum="LoginStateKeyGenerationStatus" expires_after="2026-03-01"> <owner>sergiyb@chromium.org</owner> <owner>chromeos-commercial-remote-management@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/magic_stack/histograms.xml b/tools/metrics/histograms/metadata/magic_stack/histograms.xml index a8ce6c27..bc8ef58 100644 --- a/tools/metrics/histograms/metadata/magic_stack/histograms.xml +++ b/tools/metrics/histograms/metadata/magic_stack/histograms.xml
@@ -273,7 +273,7 @@ </histogram> <histogram name="MagicStack.Clank.Settings.{ToggleState}" enum="ModuleType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>hanxi@chromium.org</owner> <owner>xinyiji@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml index 5ba535ca..8ab1501 100644 --- a/tools/metrics/histograms/metadata/media/histograms.xml +++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -939,7 +939,7 @@ </histogram> <histogram name="Media.Audio.Capture.Win.VoiceProcessingEffects" - enum="AudioEffectType" expires_after="2025-12-30"> + enum="AudioEffectType" expires_after="2026-03-01"> <owner>henrika@chromium.org</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -1359,7 +1359,7 @@ </histogram> <histogram name="Media.Audio.Processing.RenderDelayMs" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>saza@chromium.org</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -1716,7 +1716,7 @@ </histogram> <histogram name="Media.Audio.{Type}.SystemGlitchDuration" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -3912,7 +3912,7 @@ </histogram> <histogram name="Media.GetDisplayMedia.Constraints.SystemAudio" - enum="GetDisplayMediaIncludeExcludeConstraint" expires_after="2025-12-28"> + enum="GetDisplayMediaIncludeExcludeConstraint" expires_after="2026-03-01"> <owner>eladalon@chromium.org</owner> <owner>fbeaufort@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -4286,7 +4286,7 @@ </histogram> <histogram name="Media.HLS.ParserError" units="sparse" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>tmathmeyer@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4569,7 +4569,7 @@ </histogram> <histogram name="Media.MediaDevices.GetUserMedia.Result2" - enum="UserMediaRequestResult" expires_after="2025-12-28"> + enum="UserMediaRequestResult" expires_after="2026-03-01"> <owner>toprice@chromium.org</owner> <owner>agpalak@chromium.org</owner> <owner>video-cmi-apis@google.com</owner> @@ -6907,7 +6907,7 @@ </histogram> <histogram name="Media.VideoCapture.StartErrorCode" enum="VideoCaptureError" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>toprice@chromium.org</owner> <owner>video-cmi-apis@google.com</owner> <summary> @@ -6930,7 +6930,7 @@ </histogram> <histogram name="Media.VideoCapture.StartSourceSuccessLatency" units="ms" - expires_after="2025-12-14"> + expires_after="2026-03-01"> <owner>herre@google.com</owner> <owner>video-cmi-apis@google.com</owner> <summary> @@ -7219,7 +7219,7 @@ </histogram> <histogram name="Media.VideoEncoder.{Usage}.{Impl}.Profile" - enum="VideoCodecProfile" expires_after="2025-12-25"> + enum="VideoCodecProfile" expires_after="2026-03-01"> <owner>hiroh@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -8159,7 +8159,7 @@ </histogram> <histogram name="MediaRouter.Discovery.LocalNetworkAccessPermissionGranted" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/memory/histograms.xml b/tools/metrics/histograms/metadata/memory/histograms.xml index f17b0d10..ebc6049 100644 --- a/tools/metrics/histograms/metadata/memory/histograms.xml +++ b/tools/metrics/histograms/metadata/memory/histograms.xml
@@ -863,7 +863,7 @@ </histogram> <histogram name="HeapProfiling.InProcess.SampledAddressCacheHitCount{Process}" - units="hits" expires_after="2025-12-28"> + units="hits" expires_after="2026-03-01"> <owner>joenotcharles@google.com</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -892,7 +892,7 @@ <histogram name="HeapProfiling.InProcess.SampledAddressCacheMaxLoadFactor{Process}" - units="%" expires_after="2025-12-28"> + units="%" expires_after="2026-03-01"> <owner>joenotcharles@google.com</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -904,7 +904,7 @@ </histogram> <histogram name="HeapProfiling.InProcess.SampledAddressCacheMaxSize{Process}" - units="entries" expires_after="2025-12-28"> + units="entries" expires_after="2026-03-01"> <owner>joenotcharles@google.com</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -1123,7 +1123,7 @@ </histogram> <histogram name="Memory.Browser.PrivateSwapFootprint" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>erikchen@chromium.org</owner> <owner>ssid@chromium.org</owner> <summary> @@ -1159,7 +1159,7 @@ </histogram> <histogram name="Memory.Browser.SharedMemoryFootprint" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>erikchen@chromium.org</owner> <summary> A rough estimate of the shared memory footprint of the browser process. @@ -1831,7 +1831,7 @@ </histogram> <histogram name="Memory.Extension.PrivateMemoryFootprint" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>erikchen@chromium.org</owner> <owner>ssid@chromium.org</owner> <summary> @@ -1874,7 +1874,7 @@ </histogram> <histogram name="Memory.Gpu.MappingsCount" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>lizeb@chromium.org</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -2003,7 +2003,7 @@ </histogram> <histogram name="Memory.LowMemoryKiller.Count" units="low-memory kills" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>khmel@google.com</owner> <owner>vovoy@google.com</owner> <summary> @@ -2483,7 +2483,7 @@ </histogram> <histogram name="Memory.PressureWindowDuration.{Type}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>fdoray@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -2500,7 +2500,7 @@ </histogram> <histogram name="Memory.ProcessCount2" units="processes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>creis@chromium.org</owner> <owner>nasko@chromium.org</owner> <summary> @@ -2512,7 +2512,7 @@ </histogram> <histogram name="Memory.Renderer.EvictedLockedResources.{Source}" units="KB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-memory@google.com</owner> <summary> @@ -2778,7 +2778,7 @@ </histogram> <histogram name="Memory.System.MemAvailableMB" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>andreaorru@chromium.org</owner> <owner>hidehiko@chromium.org</owner> <summary> @@ -2790,7 +2790,7 @@ </summary> </histogram> -<histogram name="Memory.System.MemUsedMB" units="MB" expires_after="2025-12-28"> +<histogram name="Memory.System.MemUsedMB" units="MB" expires_after="2026-03-01"> <owner>andreaorru@chromium.org</owner> <owner>hidehiko@chromium.org</owner> <summary> @@ -3435,7 +3435,7 @@ </histogram> <histogram name="Memory.{UtilityProcessType}.SharedMemoryFootprint" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>erikchen@chromium.org</owner> <owner>ssid@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/mobile/histograms.xml b/tools/metrics/histograms/metadata/mobile/histograms.xml index 685d59d1..2b3177dc 100644 --- a/tools/metrics/histograms/metadata/mobile/histograms.xml +++ b/tools/metrics/histograms/metadata/mobile/histograms.xml
@@ -189,7 +189,7 @@ </histogram> <histogram name="Mobile.ContextMenu.{EntryPoint}.Actions" enum="IOSMenuAction" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gambard@chromium.org</owner> <owner>bling-team@chromium.org</owner> <summary> @@ -516,7 +516,7 @@ </histogram> <histogram name="Mobile.Share.EntryPoints" enum="IOSActivityScenario" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dimich@chromium.org</owner> <owner>bling-team@google.com</owner> <owner>chrome-with-friends-robots@google.com</owner> @@ -1185,7 +1185,7 @@ </histogram> <histogram name="MobileStartup.DailyLaunchCount" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>tedchoc@chromium.org</owner> <owner>twellington@chromium.org</owner> <summary> @@ -1237,7 +1237,7 @@ </histogram> <histogram name="MobileStartup.LaunchCause" enum="LaunchCause" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mthiesse@chromium.org</owner> <owner>tedchoc@chromium.org</owner> <owner>yfriedman@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml index c5de23c..cf241b7 100644 --- a/tools/metrics/histograms/metadata/navigation/histograms.xml +++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -765,7 +765,7 @@ </histogram> <histogram name="Navigation.BrowserInitiatedSessionHistoryCount" - enum="HistoryNavType" expires_after="2025-12-28"> + enum="HistoryNavType" expires_after="2026-03-01"> <owner>liuwilliam@chromium.org</owner> <owner>chrome-seamless-core@google.com</owner> <summary> @@ -855,7 +855,7 @@ </histogram> <histogram name="Navigation.CompositorCreationTo{Stage}2" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rakina@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -1319,7 +1319,7 @@ </histogram> <histogram name="Navigation.IsGuest" enum="NavigationIsGuest" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <owner>wjmaclean@chromium.org</owner> @@ -1353,7 +1353,7 @@ </histogram> <histogram name="Navigation.IsProcessBackgrounded2.{Timing}" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1414,7 +1414,7 @@ </histogram> <histogram name="Navigation.MainFrame.FromAdClick" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>yaoxia@chromium.org</owner> <owner>jkarlin@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> @@ -1568,7 +1568,7 @@ <histogram name="Navigation.MainframeSameDocumentNavigationCommitToPresentFirstFrame" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>liuwilliam@chromium.org</owner> <owner>chrome-seamless-core@google.com</owner> <summary> @@ -1685,7 +1685,7 @@ <histogram name="Navigation.OnGestureStart.NavigationInProgress{NavigationMode}" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>lazzzis@google.com</owner> <owner>liuwilliam@chromium.org</owner> <owner>chrome-seamless-core@google.com</owner> @@ -1923,7 +1923,7 @@ <histogram name="Navigation.ProcessNavigationThrottlesTime.WillStartRequest.{FrameType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>sisidovski@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -2767,7 +2767,7 @@ </histogram> <histogram name="Navigation.TimeToReadyToCommit2{NavigationProcessType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>clamy@chromium.org</owner> <owner>nasko@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -3391,7 +3391,7 @@ <histogram name="Prerender.Experimental.ActivationNavigationParamsMatch{PreloadingTriggerType}" - enum="PrerenderActivationNavigationParamsMatch" expires_after="2025-12-28"> + enum="PrerenderActivationNavigationParamsMatch" expires_after="2026-03-01"> <owner>nhiroki@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -3441,7 +3441,7 @@ </histogram> <histogram name="Prerender.Experimental.FoundReusePrerenderHost" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>gjc@google.com</owner> <owner>chrome-prerendering@google.com</owner> <owner>chrome-loading@google.com</owner> @@ -3601,7 +3601,7 @@ </histogram> <histogram name="Prerender.Experimental.PrerenderProcessReuseAvailability" - enum="PrerenderProcessReuseAvailability" expires_after="2025-12-31"> + enum="PrerenderProcessReuseAvailability" expires_after="2026-03-01"> <owner>gjc@google.com</owner> <owner>chrome-prerendering@google.com</owner> <owner>chrome-loading@google.com</owner> @@ -3651,7 +3651,7 @@ <histogram name="Prerender.Experimental.ReusePrerenderHost.PrerenderHostCount.Failed" - units="count" expires_after="2025-12-31"> + units="count" expires_after="2026-03-01"> <owner>suzukikeita@google.com</owner> <owner>gjc@google.com</owner> <owner>chrome-prerendering@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml index e9fa7295..c97f97a 100644 --- a/tools/metrics/histograms/metadata/net/histograms.xml +++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -553,7 +553,7 @@ </histogram> <histogram name="HttpCache.AddTransactionToEntry" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bashi@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -967,7 +967,7 @@ </histogram> <histogram name="HttpCache.NoVarySearch.NotUsableLostTime2{HostAndFrameType}" - units="ms" expires_after="2025-12-16"> + units="ms" expires_after="2026-03-01"> <owner>ricea@chromium.org</owner> <owner>net-dev@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1331,7 +1331,7 @@ </histogram> <histogram name="Net.CachingCertVerifier.CacheHit{HostType}" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-network-stack@google.com</owner> <summary> @@ -1349,7 +1349,7 @@ <histogram name="Net.CachingCertVerifier.{VerificationCompletionType}.UncachedVerifyTime{HostType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-network-stack@google.com</owner> <summary> @@ -1967,7 +1967,7 @@ </histogram> <histogram name="Net.DNS.DnsConfig.DnsClientCapability" - enum="DNS.DnsClientCapability" expires_after="2025-12-28"> + enum="DNS.DnsClientCapability" expires_after="2026-03-01"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -2173,7 +2173,7 @@ </histogram> <histogram name="Net.DNS.DnsTransaction.AttemptType" enum="DNS.AttemptType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -2333,7 +2333,7 @@ </histogram> <histogram name="Net.DNS.HostCache.EraseStale.StaleHits{HostType}" units="hits" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>suzukikeita@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -2868,7 +2868,7 @@ </histogram> <histogram name="Net.ErrorPageCounts" enum="NetErrorPageEvents" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>edwardjung@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -3731,7 +3731,7 @@ </histogram> <histogram name="Net.HttpTimeToFirstByte.TLS13.Google" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>davidben@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -3777,7 +3777,7 @@ </histogram> <histogram name="Net.MultiThreadedCertVerifier.RequestDuration{HostType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-network-stack@google.com</owner> <summary> @@ -5022,7 +5022,7 @@ </histogram> <histogram name="Net.QuicSession.ConnectionDuration{HostType}{Initiator}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>renjietang@chromium.org</owner> <owner>suzukikeita@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> @@ -7752,7 +7752,7 @@ </histogram> <histogram name="Net.SSL.ECHResult" enum="SSLECHResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>davidben@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -7871,7 +7871,7 @@ </histogram> <histogram name="Net.SSLHandshakeDetails" enum="SSLHandshakeDetails" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>davidben@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -8234,7 +8234,7 @@ </histogram> <histogram name="Net.URLLoader.AcceptCHFrameReceivedOnHttp2" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -8244,7 +8244,7 @@ </histogram> <histogram name="Net.URLLoader.AcceptCHFrameReceivedOnHttp3" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -8265,7 +8265,7 @@ </histogram> <histogram name="Net.URLLoaderThrottle.OnReceiveResponseTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -8392,7 +8392,7 @@ </histogram> <histogram name="Net.WebSocket.ProtocolHeaderSize" units="bytes" - expires_after="2025-12-14"> + expires_after="2026-03-01"> <owner>ricea@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml index a08b9a7..0e91998 100644 --- a/tools/metrics/histograms/metadata/network/histograms.xml +++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -1823,7 +1823,7 @@ </histogram> <histogram name="Network.DnsProxy.DnsOverHttpsMode" - enum="DnsProxy.DnsOverHttpsMode" expires_after="2025-12-31"> + enum="DnsProxy.DnsOverHttpsMode" expires_after="2026-03-01"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2016,7 +2016,7 @@ </histogram> <histogram name="Network.DnsProxy.{ProcessType}.Event" - enum="DnsProxy.ProcessEvent" expires_after="2025-12-31"> + enum="DnsProxy.ProcessEvent" expires_after="2026-03-01"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2034,7 +2034,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.Errors" - enum="DnsProxy.QueryError" expires_after="2025-12-31"> + enum="DnsProxy.QueryError" expires_after="2026-03-01"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2049,7 +2049,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.FailedResolveDuration" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2091,7 +2091,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.Results" - enum="DnsProxy.QueryResult" expires_after="2025-12-31"> + enum="DnsProxy.QueryResult" expires_after="2026-03-01"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2106,7 +2106,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.ResultsWithRetries" - enum="DnsProxy.QueryResult" expires_after="2025-12-31"> + enum="DnsProxy.QueryResult" expires_after="2026-03-01"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2121,7 +2121,7 @@ </histogram> <histogram name="Network.Mdns.{ServiceType}" enum="MdnsQueryType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>nmuggli@google.com</owner> <owner>project-bolton@google.com</owner> <summary> @@ -2182,7 +2182,7 @@ </histogram> <histogram name="Network.Multicast.TotalCount" units="packets" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2193,7 +2193,7 @@ </histogram> <histogram name="Network.Multicast.{Technology}.ConnectedCount" units="packets" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2293,7 +2293,7 @@ </histogram> <histogram name="Network.NetworkPortalSigninTime" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>stevenjb@chromium.org</owner> <owner>cros-network-health-team@google.com</owner> <summary> @@ -2512,7 +2512,7 @@ <histogram name="Network.Shill.Cellular.3GPPRegistrationDelayedDrop" enum="NetworkCellular3GPPRegistrationDelayedDrop" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2563,7 +2563,7 @@ </histogram> <histogram name="Network.Shill.Cellular.ConnectResult.{ApnType}" - enum="PlatformCellularConnectResult" expires_after="2025-12-31"> + enum="PlatformCellularConnectResult" expires_after="2026-03-01"> <owner>danielwinkler@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2577,7 +2577,7 @@ </histogram> <histogram name="Network.Shill.Cellular.DevicePresenceStatus" - enum="BooleanPresent" expires_after="2025-12-31"> + enum="BooleanPresent" expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2587,7 +2587,7 @@ </histogram> <histogram name="Network.Shill.Cellular.Drop" enum="NetworkCellularTechnology" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2651,7 +2651,7 @@ </histogram> <histogram name="Network.Shill.Cellular.SignalStrengthBeforeDrop" units="units" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2661,7 +2661,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TechnologyEnabled" - enum="BooleanEnabled" expires_after="2025-12-31"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>rmao@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2671,7 +2671,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TimeToConfig" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2681,7 +2681,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TimeToConnect" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2691,7 +2691,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TimeToDisable" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2701,7 +2701,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TimeToEnable" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2721,7 +2721,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TimeToOnline" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2731,7 +2731,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TimeToPortal" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2741,7 +2741,7 @@ </histogram> <histogram name="Network.Shill.Cellular.TimeToRedirectFound" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2829,7 +2829,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.Driver" enum="EthernetDriver" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>chuweih@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2839,7 +2839,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds2" - units="seconds" expires_after="2025-12-31"> + units="seconds" expires_after="2026-03-01"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2974,7 +2974,7 @@ <histogram name="Network.Shill.PortalDetector.AggregateCAPPORTResult.{Technology}" - enum="PortalDetectorAggregateCAPPORTResult" expires_after="2025-12-31"> + enum="PortalDetectorAggregateCAPPORTResult" expires_after="2026-03-01"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2986,7 +2986,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.AggregateResult.{Technology}" - enum="PortalDetectorAggregateResult" expires_after="2025-12-31"> + enum="PortalDetectorAggregateResult" expires_after="2026-03-01"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2998,7 +2998,7 @@ <histogram name="Network.Shill.PortalDetector.AttemptsToDisconnect.{Technology}" - units="attempts" expires_after="2025-12-31"> + units="attempts" expires_after="2026-03-01"> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3011,7 +3011,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.AttemptsToOnline.{Technology}" - units="attempts" expires_after="2025-12-31"> + units="attempts" expires_after="2026-03-01"> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3024,7 +3024,7 @@ <histogram name="Network.Shill.PortalDetector.AttemptsToRedirectFound.{Technology}" - units="attempts" expires_after="2025-12-31"> + units="attempts" expires_after="2026-03-01"> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3111,7 +3111,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.HTTPResponseCode.{Technology}" - units="response code" expires_after="2025-12-31"> + units="response code" expires_after="2026-03-01"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3149,7 +3149,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.InitialResult.{Technology}" - enum="PortalDetectorResult" expires_after="2025-12-31"> + enum="PortalDetectorResult" expires_after="2026-03-01"> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3200,7 +3200,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.{ProbeType}Duration.{Technology}" - units="ms" expires_after="2025-12-31"> + units="ms" expires_after="2026-03-01"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3250,7 +3250,7 @@ </histogram> <histogram name="Network.Shill.Vpn.Driver" enum="VPNDriver" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>jiejiang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3709,7 +3709,7 @@ </histogram> <histogram name="Network.Shill.WiFi.AdapterAllowlisted" - enum="WiFiAdapterInAllowlist" expires_after="2025-12-31"> + enum="WiFiAdapterInAllowlist" expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3731,7 +3731,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ANQP.NetworkAuthTypeSupport" - enum="WiFiANQPNetworkAuthTypeSupport" expires_after="2025-12-31"> + enum="WiFiANQPNetworkAuthTypeSupport" expires_after="2026-03-01"> <owner>damiendejean@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3885,7 +3885,7 @@ </histogram> <histogram name="Network.Shill.WiFi.AssocFailureType" enum="WiFiStatusCode" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3962,7 +3962,7 @@ </histogram> <histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3972,7 +3972,7 @@ </histogram> <histogram name="Network.Shill.WiFi.CiscoAdaptiveFTSupport" - enum="WiFiCiscoAdaptiveFTSupport" expires_after="2025-12-31"> + enum="WiFiCiscoAdaptiveFTSupport" expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3983,7 +3983,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ClientDisconnectReason" - enum="WiFiReasonCode" expires_after="2025-12-31"> + enum="WiFiReasonCode" expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3993,7 +3993,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ClientDisconnectType" enum="WiFiStatusType" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4015,7 +4015,7 @@ </histogram> <histogram name="Network.Shill.Wifi.DevicePresenceStatus" enum="BooleanPresent" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4025,7 +4025,7 @@ </histogram> <histogram name="Network.Shill.Wifi.Disconnect" - enum="NetworkWiFiDisconnectType" expires_after="2025-12-31"> + enum="NetworkWiFiDisconnectType" expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4036,7 +4036,7 @@ </histogram> <histogram name="Network.Shill.Wifi.EapInnerProtocol" enum="EAPInnerProtocol" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4046,7 +4046,7 @@ </histogram> <histogram name="Network.Shill.Wifi.EapOuterProtocol" enum="EAPOuterProtocol" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4056,7 +4056,7 @@ </histogram> <histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds2" units="seconds" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4120,7 +4120,7 @@ </histogram> <histogram name="Network.Shill.WiFi.HiddenSSIDNetworkCount" units="units" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>tnagel@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <owner>cros-privacy-core@google.com</owner> @@ -4374,7 +4374,7 @@ </histogram> <histogram name="Network.Shill.Wifi.PortalResult" enum="NetworkPortalResult" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4491,7 +4491,7 @@ </histogram> <histogram name="Network.Shill.Wifi.Security" enum="NetworkSecurityType" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4602,7 +4602,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeResumeToReady" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4757,7 +4757,7 @@ </histogram> <histogram name="Network.Shill.WiFi.TransmitBitrateMbps" units="Mbps" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4779,7 +4779,7 @@ </histogram> <histogram name="Network.Shill.WiFi.UserInitiatedConnectionFailureReason" - enum="ConnectionFailureReason" expires_after="2025-12-31"> + enum="ConnectionFailureReason" expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4791,7 +4791,7 @@ </histogram> <histogram name="Network.Shill.WiFi.UserInitiatedConnectionResult" - enum="ConnectionResult" expires_after="2025-12-31"> + enum="ConnectionResult" expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4801,7 +4801,7 @@ </histogram> <histogram name="Network.Shill.{Technology}.DHCPv4ProvisionDurationMillis" - units="ms" expires_after="2025-12-31"> + units="ms" expires_after="2026-03-01"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4815,7 +4815,7 @@ </histogram> <histogram name="Network.Shill.{Technology}.DHCPv4RenewRebind" - enum="DHCPv4RenewRebind" expires_after="2025-12-31"> + enum="DHCPv4RenewRebind" expires_after="2026-03-01"> <owner>chenzikai@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4827,7 +4827,7 @@ </histogram> <histogram name="Network.Shill.{Technology}.IPType" enum="NetworkIPType" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4857,7 +4857,7 @@ <histogram name="Network.Shill.{Technology}.{DHCPProvisionReason}.DHCPv4ProvisionResult" - enum="DHCPv4ProvisionResult" expires_after="2025-12-31"> + enum="DHCPv4ProvisionResult" expires_after="2026-03-01"> <owner>chenzikai@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -5738,7 +5738,7 @@ </histogram> <histogram name="NetworkService.NetworkLoaderCompletionTime2.{Source}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>hayato@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -5842,7 +5842,7 @@ <histogram name="NetworkService.Scheduler.IOThread.NumberOfPendingTasks.{QueueName}Queue" - units="count" expires_after="2025-12-25"> + units="count" expires_after="2026-03-01"> <owner>hayato@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -5858,7 +5858,7 @@ <histogram name="NetworkService.Scheduler.IOThread.QueuingTime.{QueueName}Queue" - units="ms" expires_after="2025-12-25"> + units="ms" expires_after="2026-03-01"> <owner>hayato@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -6028,7 +6028,7 @@ <histogram name="NetworkService.URLLoader.CloneDeviceBoundSessionAccessObserver" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>horo@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml index 2f9d9410..eedf4c9 100644 --- a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml +++ b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
@@ -233,7 +233,7 @@ </summary> </histogram> -<histogram name="NewTabPage.Click" enum="NTPElement" expires_after="2025-12-28"> +<histogram name="NewTabPage.Click" enum="NTPElement" expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -246,7 +246,7 @@ </histogram> <histogram name="NewTabPage.Collections.IdOnLoad" enum="NTPCollectionId" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>pauladedeji@google.com</owner> <owner>danpeng@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -749,7 +749,7 @@ </histogram> <histogram name="NewTabPage.CustomizeShortcutAction" - enum="NTPCustomizeShortcutAction" expires_after="2025-12-28"> + enum="NTPCustomizeShortcutAction" expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1103,7 +1103,7 @@ </histogram> <histogram name="NewTabPage.LogoDownloadOutcome" - enum="NewTabPageLogoDownloadOutcome" expires_after="2025-12-28"> + enum="NewTabPageLogoDownloadOutcome" expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1352,7 +1352,7 @@ </histogram> <histogram name="NewTabPage.Modules.DataRequest" enum="NtpModules" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1365,7 +1365,7 @@ </histogram> <histogram name="NewTabPage.Modules.Disabled{Interaction}" enum="NtpModules" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1522,7 +1522,7 @@ </histogram> <histogram name="NewTabPage.Modules.LoadDuration{NewTabPageModules}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1674,7 +1674,7 @@ </histogram> <histogram name="NewTabPage.Modules.ShownTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1809,7 +1809,7 @@ </histogram> <histogram name="NewTabPage.NavigationOrActivationToFirstContentfulPaint" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>robertlin@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -1837,7 +1837,7 @@ </histogram> <histogram name="NewTabPage.NavigationOrActivationToLargestContentfulPaint" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>robertlin@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -1896,7 +1896,7 @@ </histogram> <histogram name="NewTabPage.OpenedInNewTab" enum="TabLaunchType" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>eirage@chromium.org</owner> <owner>hanxi@chromium.org</owner> <summary> @@ -2127,7 +2127,7 @@ </histogram> <histogram name="NewTabPage.SuggestionsImpression{NewTabPageIconTypes}" - enum="MostVisitedTileIndex" expires_after="2025-12-28"> + enum="MostVisitedTileIndex" expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -2141,7 +2141,7 @@ </histogram> <histogram name="NewTabPage.SuggestionsImpression{NewTabPageProviders}" - enum="MostVisitedTileIndex" expires_after="2025-12-28"> + enum="MostVisitedTileIndex" expires_after="2026-03-01"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/notifications/histograms.xml b/tools/metrics/histograms/metadata/notifications/histograms.xml index 50c9f5a..18749ac7 100644 --- a/tools/metrics/histograms/metadata/notifications/histograms.xml +++ b/tools/metrics/histograms/metadata/notifications/histograms.xml
@@ -197,7 +197,7 @@ </histogram> <histogram name="Notifications.Android.JobNativeStartupDuration{IntentAction}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>peter@chromium.org</owner> <owner>engedy@chromium.org</owner> <summary> @@ -720,7 +720,7 @@ </histogram> <histogram name="Notifications.NonPersistentNotificationThirdPartyCount" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>awillia@chromium.org</owner> <owner>peter@chromium.org</owner> <summary> @@ -885,7 +885,7 @@ </histogram> <histogram name="Notifications.PersistentNotificationThirdPartyCount" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>awillia@chromium.org</owner> <owner>peter@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/omnibox/histograms.xml b/tools/metrics/histograms/metadata/omnibox/histograms.xml index f5ef9a5..1744ec3 100644 --- a/tools/metrics/histograms/metadata/omnibox/histograms.xml +++ b/tools/metrics/histograms/metadata/omnibox/histograms.xml
@@ -1144,7 +1144,7 @@ <histogram name="Omnibox.DocumentSuggest.HttpResponseCode.IsSubjectToEnterprisePolicies.{SigninTribool}" - enum="HttpResponseCode" expires_after="2025-12-28"> + enum="HttpResponseCode" expires_after="2026-03-01"> <owner>mahmadi@google.com</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -1797,7 +1797,7 @@ </histogram> <histogram name="Omnibox.JustDeletedText" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -2901,7 +2901,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.AnswerInSuggest" - enum="SuggestionAnswerOptionalType" expires_after="2025-12-28"> + enum="SuggestionAnswerOptionalType" expires_after="2026-03-01"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -2914,7 +2914,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.ClientSummarizedResultType" - enum="ClientSummarizedResultType" expires_after="2025-12-28"> + enum="ClientSummarizedResultType" expires_after="2026-03-01"> <owner>nyquist@chromium.org</owner> <owner>ssid@chromium.org</owner> <owner>chrome-segmentation-platform@google.com</owner> @@ -3130,7 +3130,7 @@ <histogram name="Omnibox.SuggestionUsed.Search.NavigationToLargestContentfulPaint2.1" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>lingqi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <owner>chrome-desktop-search@google.com</owner> @@ -3621,7 +3621,7 @@ </histogram> <histogram name="Omnibox.URLNavigationScheme" enum="NavigationScheme" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -4372,7 +4372,7 @@ </histogram> <histogram name="ShortcutsProvider.DatabaseSize" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -4386,7 +4386,7 @@ </histogram> <histogram name="ShortcutsProvider.DatabaseSize.OldEntries" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -4409,7 +4409,7 @@ </histogram> <histogram name="ShortcutsProvider.DatabaseSize.OldEntriesPercentage" - units="10ths of a %" expires_after="2025-12-28"> + units="10ths of a %" expires_after="2026-03-01"> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -4452,7 +4452,7 @@ </histogram> <histogram name="ShortcutsProvider.OldEntryDeletions.OnHistoryDeletions" - units="units" expires_after="2025-12-28"> + units="units" expires_after="2026-03-01"> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/on_device_model/histograms.xml b/tools/metrics/histograms/metadata/on_device_model/histograms.xml index e5dc462c..e5698a6f 100644 --- a/tools/metrics/histograms/metadata/on_device_model/histograms.xml +++ b/tools/metrics/histograms/metadata/on_device_model/histograms.xml
@@ -57,7 +57,7 @@ </histogram> <histogram name="OnDeviceModel.BenchmarkDuration" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -68,7 +68,7 @@ </histogram> <histogram name="OnDeviceModel.BenchmarkEstimatedTokensPerSecond.{Stage}" - units="tk/s" expires_after="2025-12-28"> + units="tk/s" expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -94,7 +94,7 @@ </histogram> <histogram name="OnDeviceModel.BenchmarkVeryLowReason" - enum="VeryLowPerformanceReason" expires_after="2025-12-28"> + enum="VeryLowPerformanceReason" expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -104,7 +104,7 @@ </histogram> <histogram name="OnDeviceModel.DeviceHeapSize.{GpuType}" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -164,7 +164,7 @@ </histogram> <histogram name="OnDeviceModel.GpuBlockedReason" enum="GpuBlockedReason" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -184,7 +184,7 @@ </histogram> <histogram name="OnDeviceModel.LoadModelDuration" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -194,7 +194,7 @@ </histogram> <histogram name="OnDeviceModel.LoadPlatformModelStatus" - enum="LoadPlatformModelStatus" expires_after="2025-12-28"> + enum="LoadPlatformModelStatus" expires_after="2026-03-01"> <owner>jmpollock@chromium.org</owner> <owner>yich@google.com</owner> <summary> @@ -233,7 +233,7 @@ </histogram> <histogram name="OnDeviceModel.SystemRAM.{GpuType}" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -265,7 +265,7 @@ </histogram> <histogram name="OnDeviceModel.TokenCount.{Stage}" units="tokens" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -298,7 +298,7 @@ </histogram> <histogram name="OnDeviceModel.TokensPerSecond.{Stage}" units="tk/s" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml index af0cb3d5..d82a5cdc 100644 --- a/tools/metrics/histograms/metadata/optimization/histograms.xml +++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -785,7 +785,7 @@ </histogram> <histogram name="OptimizationGuide.HintsFetcher.GetHintsRequest.Status" - enum="HttpResponseCode" expires_after="2025-12-28"> + enum="HttpResponseCode" expires_after="2026-03-01"> <owner>rajendrant@chromium.org</owner> <owner>catliu@chromium.org</owner> <summary> @@ -867,7 +867,7 @@ <histogram name="OptimizationGuide.HintsManager.RaceNavigationFetchAttemptStatus" enum="OptimizationGuideRaceNavigationFetchAttemptStatus" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rajendrant@chromium.org</owner> <owner>catliu@chromium.org</owner> <summary> @@ -924,7 +924,7 @@ <histogram name="OptimizationGuide.ModelExecution.ContextStartToExecutionTime.{ModelExecutionFeature}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>cduvall@chromium.org</owner> <owner>holte@chromium.org</owner> <summary> @@ -985,7 +985,7 @@ <histogram name="OptimizationGuide.ModelExecution.OnDeviceAdaptationModelAvailability.{ModelExecutionFeature}" - enum="OnDeviceModelAdaptationAvailability" expires_after="2025-12-28"> + enum="OnDeviceModelAdaptationAvailability" expires_after="2026-03-01"> <owner>rajendrant@chromium.org</owner> <owner>holte@chromium.org</owner> <summary> @@ -1078,7 +1078,7 @@ <histogram name="OptimizationGuide.ModelExecution.OnDeviceExecuteModelResult.{ModelExecutionFeature}" enum="OptimizationGuideOnDeviceExecuteModelResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>holte@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary> @@ -1115,7 +1115,7 @@ <histogram name="OptimizationGuide.ModelExecution.OnDeviceModelEligibilityReason.{ModelExecutionFeature}" enum="OptimizationGuideOnDeviceModelEligibilityReason" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>holte@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary> @@ -1127,7 +1127,7 @@ <histogram name="OptimizationGuide.ModelExecution.OnDeviceModelInstallCriteria.AtRegistration.DiskSpaceWhenNotEnoughAvailable" - units="GB" expires_after="2025-12-28"> + units="GB" expires_after="2026-03-01"> <owner>holte@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary> @@ -1140,7 +1140,7 @@ <histogram name="OptimizationGuide.ModelExecution.OnDeviceModelInstallCriteria.{Event}.{Criteria}" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>holte@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary> @@ -1173,7 +1173,7 @@ <histogram name="OptimizationGuide.ModelExecution.OnDeviceModelInstalledAtRegistrationTime" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>holte@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary> @@ -1391,7 +1391,7 @@ <histogram name="OptimizationGuide.ModelExecutionFetcher.RequestStatus.{ModelExecutionFeature}" - enum="OptimizationGuideFetcherRequestStatus" expires_after="2025-12-28"> + enum="OptimizationGuideFetcherRequestStatus" expires_after="2026-03-01"> <owner>rajendrant@chromium.org</owner> <owner>freedjm@google.com</owner> <summary> @@ -1536,7 +1536,7 @@ <histogram name="OptimizationGuide.ModelExecutor.TaskSchedulingLatency.{OptimizationTarget}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>wittman@chromium.org</owner> <owner>rajendrant@chromium.org</owner> <summary> @@ -1637,7 +1637,7 @@ <histogram name="OptimizationGuide.ModelQualityLogsUploaderService.UploadStatus.{LogAiDataRequestFeature}" enum="OptimizationGuideModelQualityLogsUploadStatus" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sreejakshetty@chromium.org</owner> <owner>rajendrant@chromium.org</owner> <summary> @@ -2003,7 +2003,7 @@ <histogram name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.NetErrorCode.{OptimizationTarget}" - enum="NetErrorCodes" expires_after="2025-12-28"> + enum="NetErrorCodes" expires_after="2026-03-01"> <owner>rajendrant@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary> @@ -2210,7 +2210,7 @@ </histogram> <histogram name="OptimizationGuide.PushNotifications.ReceivedNotificationType" - enum="OptimizationType" expires_after="2025-12-28"> + enum="OptimizationType" expires_after="2026-03-01"> <owner>rajendrant@chromium.org</owner> <owner>catliu@chromium.org</owner> <summary> @@ -2234,7 +2234,7 @@ <histogram name="OptimizationGuide.TextSafetyChecker.InferenceResult" enum="OptimizationGuideTextSafetyInferenceResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>holte@google.com</owner> <owner>wittman@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index dddf9c7..89f051b 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -1193,7 +1193,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumOwnersWithoutInterestGroups" - units="owners" expires_after="2025-12-28"> + units="owners" expires_after="2026-03-01"> <owner>dmcardle@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -2231,7 +2231,7 @@ </histogram> <histogram name="Ads.InterestGroup.ServerAuction.KeyFetch.NetworkCached" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -4129,7 +4129,7 @@ </histogram> <histogram name="Document.BeforeUnloadDialog" enum="BeforeUnloadDialogResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>panicker@chromium.org</owner> <owner>chikamune@chromium.org</owner> <summary> @@ -4184,7 +4184,7 @@ </histogram> <histogram name="DocumentScan.ScanRequested" enum="DocumentScanSaneBackend" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bmgordon@chromium.org</owner> <owner>project-bolton@google.com</owner> <summary> @@ -4194,7 +4194,7 @@ </histogram> <histogram name="DocumentScan.ScanSucceeded" enum="DocumentScanSaneBackend" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bmgordon@chromium.org</owner> <owner>project-bolton@google.com</owner> <summary> @@ -4973,7 +4973,7 @@ </histogram> <histogram name="Feedback.TrustSafetySentiment.CallTriggerOccurred" - enum="TrustSafetySentimentFeatureArea" expires_after="2025-12-28"> + enum="TrustSafetySentimentFeatureArea" expires_after="2026-03-01"> <owner>skrakowi@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -5053,7 +5053,7 @@ </histogram> <histogram name="FetchKeepAlive.Requests2.Network" - enum="FetchKeepAliveRequestNetworkMetricType" expires_after="2025-12-28"> + enum="FetchKeepAliveRequestNetworkMetricType" expires_after="2026-03-01"> <owner>mych@chromium.org</owner> <owner>chrome-bfcache@google.com</owner> <summary> @@ -5094,7 +5094,7 @@ </histogram> <histogram name="FetchKeepAlive.Requests2.{RequestState}.{Process}" - enum="FetchKeepAliveRequestMetricType" expires_after="2025-12-28"> + enum="FetchKeepAliveRequestMetricType" expires_after="2026-03-01"> <owner>mych@chromium.org</owner> <owner>chrome-bfcache@google.com</owner> <summary> @@ -5129,7 +5129,7 @@ </histogram> <histogram name="FetchLater.Browser.Metrics" enum="FetchLaterBrowserMetricType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mych@chromium.org</owner> <owner>chrome-bfcache@google.com</owner> <summary> @@ -5210,7 +5210,7 @@ </histogram> <histogram name="FirstPartySets.Initialization.ClearSiteDataOutcome" - enum="BooleanSuccess" expires_after="2025-12-28"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>shuuran@google.com</owner> <owner>kaustubhag@google.com</owner> <summary> @@ -5554,7 +5554,7 @@ </histogram> <histogram name="Hardware.Display.Count.OnChange" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sashamcintosh@chromium.org</owner> <owner>chromeos-gfx@chromium.org</owner> <summary> @@ -5564,7 +5564,7 @@ </histogram> <histogram name="Hardware.Display.Count.OnStartup" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sashamcintosh@chromium.org</owner> <owner>chromeos-gfx@chromium.org</owner> <summary> @@ -5574,7 +5574,7 @@ </histogram> <histogram name="Hardware.Display.SupportsHDR" enum="BooleanSupported" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cassew@google.com</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -5586,7 +5586,7 @@ </summary> </histogram> -<histogram name="Hardware.TotalDiskSpace" units="GB" expires_after="2025-12-28"> +<histogram name="Hardware.TotalDiskSpace" units="GB" expires_after="2026-03-01"> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -5972,7 +5972,7 @@ </histogram> <histogram name="LoadingPredictor.SetLCPPNavigationHint.Time" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -6587,7 +6587,7 @@ </histogram> <histogram name="OSCrypt.AppBoundEncryption.SupportLevel" - enum="AppBoundEncryptionSupportLevel" expires_after="2025-12-28"> + enum="AppBoundEncryptionSupportLevel" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -6609,7 +6609,7 @@ </histogram> <histogram name="OSCrypt.AppBoundProvider.Decrypt.ResultLastError" - enum="WinGetLastError" expires_after="2025-12-28"> + enum="WinGetLastError" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -6635,7 +6635,7 @@ </histogram> <histogram name="OSCrypt.AppBoundProvider.Encrypt.ResultLastError" - enum="WinGetLastError" expires_after="2025-12-28"> + enum="WinGetLastError" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -6648,7 +6648,7 @@ </histogram> <histogram name="OSCrypt.AppBoundProvider.KeyRetrieval.Status" - enum="OSCryptAppBoundKeyRetrievalStatus" expires_after="2025-12-28"> + enum="OSCryptAppBoundKeyRetrievalStatus" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -6703,7 +6703,7 @@ </histogram> <histogram name="OSCrypt.EncryptorKeyCount{EncryptorKeyType}" units="key count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>chrome-platform-security-core@google.com</owner> <summary> @@ -6830,7 +6830,7 @@ </histogram> <histogram name="OSCrypt.Win.Decrypt.Result" enum="BooleanSuccess" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -6850,7 +6850,7 @@ </histogram> <histogram name="OSCrypt.Win.Encrypt.Result" enum="BooleanSuccess" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -7585,7 +7585,7 @@ </histogram> <histogram name="PushMessaging.UnregistrationStatus" - enum="PushUnregistrationStatus" expires_after="2025-12-28"> + enum="PushUnregistrationStatus" expires_after="2026-03-01"> <owner>peter@chromium.org</owner> <owner>knollr@chromium.org</owner> <summary> @@ -7751,7 +7751,7 @@ </histogram> <histogram name="ReadingList.{ReadStatus}.Count.{RecordedAt}.{StorageState}" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>mastiz@chromium.org</owner> <owner>mmrashad@google.com</owner> <owner>treib@chromium.org</owner> @@ -8234,7 +8234,7 @@ </histogram> <histogram name="Shutdown.BrowserExit.Time2" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>etienneb@chromium.org</owner> <owner>gab@chromium.org</owner> <summary> @@ -8245,7 +8245,7 @@ </histogram> <histogram name="Shutdown.EndSession.Time2" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>etienneb@chromium.org</owner> <owner>gab@chromium.org</owner> <summary> @@ -8279,7 +8279,7 @@ </histogram> <histogram name="Shutdown.ShutdownType2" enum="ShutdownType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>etienneb@chromium.org</owner> <owner>gab@chromium.org</owner> <summary> @@ -8339,7 +8339,7 @@ </histogram> <histogram name="Shutdown.WindowClose.Time2" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>etienneb@chromium.org</owner> <owner>gab@chromium.org</owner> <summary> @@ -8885,7 +8885,7 @@ </histogram> <histogram name="Style.InvalidationTime" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>futhark@chromium.org</owner> <summary> Microseconds spent in StyleEngine::InvalidateStyle. Only samples from high @@ -8894,7 +8894,7 @@ </histogram> <histogram name="Style.RebuildLayoutTreeTime" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>futhark@chromium.org</owner> <summary> Microseconds spent in RebuildLayoutTree called from Document::UpdateStyle. @@ -8902,7 +8902,7 @@ </histogram> <histogram name="Style.RecalcTime" units="microseconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>futhark@chromium.org</owner> <summary> Microseconds spent in RecalcStyle called from Document::UpdateStyle. @@ -9773,7 +9773,7 @@ </histogram> <histogram name="UsageStats.Events" enum="UsageStatsEvents" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>pnoland@chromium.org</owner> <owner>fgorski@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index 5b19da8..b973f757 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -523,7 +523,7 @@ <histogram name="PageLoad.Clients.Ads.AdPaintTiming.NavigationToFirstContentfulPaint3.Incognito" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>kjarosz@google.com</owner> <owner>polonium@google.com</owner> <summary> @@ -666,7 +666,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.HeavyAds.DisallowedByBlocklist" - enum="BooleanBlocked" expires_after="2025-12-28"> + enum="BooleanBlocked" expires_after="2026-03-01"> <owner>jkarlin@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -677,7 +677,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.HeavyAds.NetworkBytesAtFrameUnload" - units="bytes" expires_after="2025-12-28"> + units="bytes" expires_after="2026-03-01"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -1131,7 +1131,7 @@ <histogram name="PageLoad.Clients.GoogleSearch.ConnectTiming.FinalRequestConnectDelay{ConnectionProtocolType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>horo@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1163,7 +1163,7 @@ <histogram name="PageLoad.Clients.GoogleSearch.ConnectTiming.FinalRequestSslDelay{ConnectionProtocolType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>horo@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1195,7 +1195,7 @@ <histogram name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestDomainLookupDelay{ConnectionProtocolType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>horo@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1211,7 +1211,7 @@ <histogram name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestSslDelay{ConnectionProtocolType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>horo@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1505,7 +1505,7 @@ <histogram name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToOnComplete" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>suzukikeita@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -3010,7 +3010,7 @@ </summary> </histogram> -<histogram name="PageLoad.Cpu.TotalUsage" units="ms" expires_after="2025-12-28"> +<histogram name="PageLoad.Cpu.TotalUsage" units="ms" expires_after="2026-03-01"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -3034,7 +3034,7 @@ <histogram name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -3277,7 +3277,7 @@ <histogram name="PageLoad.Experimental.NavigationTiming.NavigationStartToFirstRequestStart" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>nhiroki@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -3420,7 +3420,7 @@ </histogram> <histogram name="PageLoad.Experimental.PreviewFinalStatus" - enum="PreviewFinalStatus" expires_after="2025-12-28"> + enum="PreviewFinalStatus" expires_after="2026-03-01"> <owner>toyoshim@chromium.org</owner> <owner>src/chrome/browser/preloading/preview/OWNERS</owner> <summary> @@ -3719,7 +3719,7 @@ <histogram name="PageLoad.InteractiveTiming.{NormalizedResponsivenessMetric}.{UserInteractionLatency}{PageLoadType}.Incognito" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>kjarosz@google.com</owner> <owner>polonium@google.com</owner> <summary> @@ -4139,7 +4139,7 @@ <histogram name="PageLoad.LayoutInstability.MaxCumulativeShiftScore.AfterBackForwardCacheRestore.SessionWindow.Gap1000ms.Max5000ms2.Incognito" - units="scorex10000" expires_after="2025-12-28"> + units="scorex10000" expires_after="2026-03-01"> <owner>kjarosz@google.com</owner> <owner>polonium@google.com</owner> <summary> @@ -4237,7 +4237,7 @@ </histogram> <histogram name="PageLoad.PageTiming.ForegroundDuration" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bmcquade@chromium.org</owner> <owner>iclelland@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -4265,7 +4265,7 @@ </histogram> <histogram name="PageLoad.PageTiming.NavigationToFirstForeground" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -4338,7 +4338,7 @@ <histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.Incognito" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>kjarosz@google.com</owner> <owner>polonium@google.com</owner> <summary> @@ -4437,7 +4437,7 @@ <histogram name="PageLoad.PaintTiming.NavigationToFirstPaint.BFCachePolyfillSecond.Incognito" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>kjarosz@google.com</owner> <owner>polonium@google.com</owner> <summary> @@ -4646,7 +4646,7 @@ <histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2AtFirstOnHidden" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>lanwei@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/password/enums.xml b/tools/metrics/histograms/metadata/password/enums.xml index 4de4ed1..d63e8b14 100644 --- a/tools/metrics/histograms/metadata/password/enums.xml +++ b/tools/metrics/histograms/metadata/password/enums.xml
@@ -753,8 +753,8 @@ <int value="8" label="Opened automatically / Offering a password to update"/> <int value="9" label="Opened manually / Confirming generated password saved"/> <int value="10" - label="Opened automatically / Offering to save unsynced passwords - locally"/> + label="(obsolete) Opened automatically / Offering to save unsynced + passwords locally"/> <int value="11" label="Opened automatically / Notification about compromised passwords"/> <int value="12"
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index 629f496..7ee612a 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -542,18 +542,6 @@ </histogram> <histogram - name="PasswordManager.AccountStorage.UnsyncedPasswordsFoundDuringSignOut" - units="passwords" expires_after="2026-01-18"> - <owner>treib@chromium.org</owner> - <owner>mamir@chromium.org</owner> - <summary> - Records how many passwords in the account store were unsynced when the user - signed out of their Google Account. Recorded only in Win/Mac/Linux when a - user of the account-scoped password storage signs out. - </summary> -</histogram> - -<histogram name="PasswordManager.AccountStorageUserStateDuration{UserSyncingType}" units="ms" expires_after="2026-01-18"> <owner>mamir@chromium.org</owner> @@ -717,7 +705,7 @@ </histogram> <histogram name="PasswordManager.AffiliationDatabase.Error" - enum="SqliteLoggedResultCode" expires_after="2025-12-28"> + enum="SqliteLoggedResultCode" expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -743,7 +731,7 @@ </histogram> <histogram name="PasswordManager.AffiliationFetcher.FetchErrorCode" - enum="NetErrorCodes" expires_after="2025-12-28"> + enum="NetErrorCodes" expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -847,7 +835,7 @@ </histogram> <histogram name="PasswordManager.ApplySyncChangesState" - enum="PasswordApplyIncrementalSyncChangesState" expires_after="2025-10-12"> + enum="PasswordApplyIncrementalSyncChangesState" expires_after="2026-04-12"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -956,7 +944,7 @@ </histogram> <histogram name="PasswordManager.BiometricAvailabilityWin" - enum="BiometricAuthenticationStatusWin" expires_after="2025-12-28"> + enum="BiometricAuthenticationStatusWin" expires_after="2026-03-01"> <owner>vasilii@chromium.org</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -1002,7 +990,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.CheckedCredentials" - units="credentials" expires_after="2025-12-28"> + units="credentials" expires_after="2026-03-01"> <owner>vasilii@chromium.org</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -1028,7 +1016,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.InsecureCredentials.Count" - units="credentials" expires_after="2025-12-28"> + units="credentials" expires_after="2026-03-01"> <owner>eic@google.com</owner> <owner>noemies@google.com</owner> <summary> @@ -1049,7 +1037,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.LeaksFound" units="credentials" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vasilii@chromium.org</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -1061,7 +1049,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.PasswordCheckReferrer" - enum="PasswordCheckReferrer" expires_after="2025-12-28"> + enum="PasswordCheckReferrer" expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -1103,7 +1091,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.UserAction.IOS.General" - enum="PasswordCheckInteractionIOSWithoutContext" expires_after="2025-12-28"> + enum="PasswordCheckInteractionIOSWithoutContext" expires_after="2026-03-01"> <owner>eic@google.com</owner> <owner>noemies@google.com</owner> <summary> @@ -1118,7 +1106,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.UserAction.IOS{Context}" - enum="PasswordCheckInteractionIOS" expires_after="2025-12-28"> + enum="PasswordCheckInteractionIOS" expires_after="2026-03-01"> <owner>eic@google.com</owner> <owner>noemies@google.com</owner> <summary> @@ -1499,7 +1487,7 @@ </histogram> <histogram name="PasswordManager.DeleteUndecryptableLoginsReturnValue" - enum="DeleteCorruptedPasswordsResult" expires_after="2025-12-28"> + enum="DeleteCorruptedPasswordsResult" expires_after="2026-03-01"> <owner>vasilii@chromium.org</owner> <owner>kazinova@google.com</owner> <summary> @@ -1703,7 +1691,7 @@ </histogram> <histogram name="PasswordManager.FillingAutomationRate" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -1728,7 +1716,7 @@ </histogram> <histogram name="PasswordManager.FillingSuccessIOS" enum="BooleanSuccess" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -1807,7 +1795,7 @@ </histogram> <histogram name="PasswordManager.FormSubmissionsVsSavePrompts" - enum="SaveFlowStep" expires_after="2025-12-28"> + enum="SaveFlowStep" expires_after="2026-03-01"> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -2038,7 +2026,7 @@ </histogram> <histogram name="PasswordManager.iOS.HandleFormSubmitEvent" - enum="HandleSubmittedFormStatus" expires_after="2025-12-28"> + enum="HandleSubmittedFormStatus" expires_after="2026-03-01"> <owner>vincb@google.com</owner> <owner>bling-transactions@google.com</owner> <summary> @@ -2199,7 +2187,7 @@ </histogram> <histogram name="PasswordManager.LeakDetection.LookupSingleLeakResponseResult" - enum="PasswordLeakLookupResponseResult" expires_after="2025-12-28"> + enum="PasswordLeakLookupResponseResult" expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -2316,7 +2304,7 @@ </histogram> <histogram name="PasswordManager.ManagePasswordsReferrer" - enum="ManagePasswordsReferrer" expires_after="2025-12-28"> + enum="ManagePasswordsReferrer" expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -2328,7 +2316,7 @@ <histogram name="PasswordManager.ManualFallback.AcceptedSuggestion.FromRootPopup" - enum="BooleanRootPopupSuggestionAccepted" expires_after="2025-12-28"> + enum="BooleanRootPopupSuggestionAccepted" expires_after="2026-03-01"> <owner>brunobraga@google.com</owner> <owner>tchudakov@google.com</owner> <summary> @@ -2340,7 +2328,7 @@ <histogram name="PasswordManager.ManualFallback.AcceptedSuggestion.SearchInputUsed" - enum="BooleanSearchInputIsNotEmpty" expires_after="2025-12-28"> + enum="BooleanSearchInputIsNotEmpty" expires_after="2026-03-01"> <owner>vykochko@google.com</owner> <owner>brunobraga@google.com</owner> <summary> @@ -2412,7 +2400,7 @@ </histogram> <histogram name="PasswordManager.MediationRequired" - enum="CredentialManagerGetResult" expires_after="2025-12-28"> + enum="CredentialManagerGetResult" expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -2423,7 +2411,7 @@ </histogram> <histogram name="PasswordManager.MediationSilent" - enum="CredentialManagerGetResult" expires_after="2025-12-31"> + enum="CredentialManagerGetResult" expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -2524,7 +2512,7 @@ </histogram> <histogram name="PasswordManager.OsCryptAsync.GetInstanceTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -2601,7 +2589,7 @@ </histogram> <histogram name="PasswordManager.PasskeysArrivedAfterAutofillDisplay" - enum="Boolean" expires_after="2025-12-31"> + enum="Boolean" expires_after="2026-03-01"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -3084,7 +3072,7 @@ </histogram> <histogram name="PasswordManager.PasswordManagementBubble.UserAction" - enum="PasswordManagementBubbleInteractions" expires_after="2025-12-28"> + enum="PasswordManagementBubbleInteractions" expires_after="2026-03-01"> <owner>mamir@chromium.org</owner> <owner>rgod@google.com</owner> <summary> @@ -3277,7 +3265,7 @@ </histogram> <histogram name="PasswordManager.PasswordsGrouping.Time" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -3332,7 +3320,7 @@ </histogram> <histogram name="PasswordManager.PasswordStore.InitTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -3845,7 +3833,7 @@ </histogram> <histogram name="PasswordManager.ReuseCheck.ReusedPasswords" units="passwords" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -3856,7 +3844,7 @@ </histogram> <histogram name="PasswordManager.ReuseCheck.Time" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -3881,7 +3869,7 @@ <histogram name="PasswordManager.SavedGaiaPasswordHashCount2{SyncConsentStatus}" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>vsemeniuk@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3947,7 +3935,7 @@ </histogram> <histogram name="PasswordManager.ServerPredictionsWaitDuration" units="ms" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -4017,7 +4005,7 @@ </histogram> <histogram name="PasswordManager.SingleUsername.PasswordFormHadUsernameField" - enum="PasswordFormHadUsernameField" expires_after="2025-12-28"> + enum="PasswordFormHadUsernameField" expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -4049,7 +4037,7 @@ </histogram> <histogram name="PasswordManager.StoreDecryptionResult" - enum="PasswordDecryptionResult" expires_after="2025-12-28"> + enum="PasswordDecryptionResult" expires_after="2026-03-01"> <owner>mamir@chromium.org</owner> <owner>kazinova@google.com</owner> <summary> @@ -4210,7 +4198,7 @@ </histogram> <histogram name="PasswordManager.TimeBetweenStoreAndServer" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -4221,7 +4209,7 @@ </histogram> <histogram name="PasswordManager.TimesReceivedFillDataForForm" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -4232,7 +4220,7 @@ </histogram> <histogram name="PasswordManager.TouchToFill.CredentialIndex" units="index" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ioanap@chromium.org</owner> <owner>friedrichh@chromium.org</owner> <summary> @@ -4462,7 +4450,7 @@ </histogram> <histogram name="PasswordManager.UPMUpdateSignInCredentialsSucces" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>izuzic@google.com</owner> <owner>ioanap@chromium.org</owner> <summary> @@ -4508,14 +4496,14 @@ </histogram> <histogram name="PasswordManager.WeakCheck.Time" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary>The time it took to complete the passwords weak check.</summary> </histogram> <histogram name="PasswordManager.WeakCheck.WeakPasswords" units="passwords" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -4685,7 +4673,7 @@ <histogram name="PasswordManager.{Store}PasswordNotes.CountCredentialsWithNonEmptyNotes2" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>derinel@google.com</owner> <owner>mamir@chromium.org</owner> <summary> @@ -4696,7 +4684,7 @@ </histogram> <histogram name="PasswordManager.{Store}PasswordNotes.CountNotesPerCredential3" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>derinel@google.com</owner> <owner>mamir@chromium.org</owner> <summary> @@ -4915,7 +4903,7 @@ </histogram> <histogram name="PasswordProtection.PasswordProtectionResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-12-28"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-01"> <owner>nwokedi@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/payment/histograms.xml b/tools/metrics/histograms/metadata/payment/histograms.xml index cc899ef..250b7bb 100644 --- a/tools/metrics/histograms/metadata/payment/histograms.xml +++ b/tools/metrics/histograms/metadata/payment/histograms.xml
@@ -71,7 +71,7 @@ </histogram> <histogram name="PaymentRequest.HasEnrolledInstrument.CallAllowedByPref" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>smcgruer@chromium.org</owner> <owner>chrome-payments-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/performance_controls/histograms.xml b/tools/metrics/histograms/metadata/performance_controls/histograms.xml index ec831bdd..861e2c38 100644 --- a/tools/metrics/histograms/metadata/performance_controls/histograms.xml +++ b/tools/metrics/histograms/metadata/performance_controls/histograms.xml
@@ -29,7 +29,7 @@ </histogram> <histogram name="PerformanceControls.BatterySaver.IPHOpenSettings" - enum="BooleanOpened" expires_after="2025-12-28"> + enum="BooleanOpened" expires_after="2026-03-01"> <owner>agale@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> @@ -42,7 +42,7 @@ </histogram> <histogram name="PerformanceControls.BatterySaver.SettingsChangeMode" - enum="BatterySaverModeState" expires_after="2025-12-28"> + enum="BatterySaverModeState" expires_after="2026-03-01"> <owner>charlesmeng@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -282,7 +282,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.BubbleAction" - enum="MemorySaverBubbleActionType" expires_after="2025-12-28"> + enum="MemorySaverBubbleActionType" expires_after="2026-03-01"> <owner>agale@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -294,7 +294,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.ChipState" - enum="MemorySaverChipState" expires_after="2025-12-28"> + enum="MemorySaverChipState" expires_after="2026-03-01"> <owner>agale@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -317,7 +317,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.IPHEnableMode" - enum="BooleanEnabled" expires_after="2025-12-28"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>agale@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -329,7 +329,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.SettingsChangeAggressiveness" - enum="MemorySaverModeAggressiveness" expires_after="2025-12-28"> + enum="MemorySaverModeAggressiveness" expires_after="2026-03-01"> <owner>charlesmeng@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -340,7 +340,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.SettingsChangeExceptionList" - enum="MemorySaverModeExceptionListAction" expires_after="2025-12-28"> + enum="MemorySaverModeExceptionListAction" expires_after="2026-03-01"> <owner>charlesmeng@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -352,7 +352,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.SettingsChangeMode" - enum="MemorySaverModeState" expires_after="2025-12-28"> + enum="MemorySaverModeState" expires_after="2026-03-01"> <owner>charlesmeng@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/performance_manager/histograms.xml b/tools/metrics/histograms/metadata/performance_manager/histograms.xml index 07e4c54bd..6f71ade5 100644 --- a/tools/metrics/histograms/metadata/performance_manager/histograms.xml +++ b/tools/metrics/histograms/metadata/performance_manager/histograms.xml
@@ -219,7 +219,7 @@ </histogram> <histogram name="PerformanceManager.DiskStats.UserDataDirFreeSpacePercent" - units="%" expires_after="2025-12-28"> + units="%" expires_after="2026-03-01"> <owner>anthonyvd@chromium.org</owner> <owner>chrome-catan@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml index db69b878..65ca554 100644 --- a/tools/metrics/histograms/metadata/permissions/histograms.xml +++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -699,7 +699,7 @@ </histogram> <histogram name="Permissions.CrowdDeny.PreloadData.VersionAtAbuseCheckTime" - units="date" expires_after="2025-12-28"> + units="date" expires_after="2026-03-01"> <owner>elklm@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -895,7 +895,7 @@ </histogram> <histogram name="Permissions.MissingOSLevelPermission.Action{PermissionTypes}" - enum="PermissionAction" expires_after="2025-12-28"> + enum="PermissionAction" expires_after="2026-03-01"> <owner>andypaicu@chromium.org</owner> <owner>engedy@chromium.org</owner> <owner>hkamila@chromium.org</owner> @@ -1060,6 +1060,19 @@ </summary> </histogram> +<histogram name="Permissions.PredictionService.Timeout" enum="BooleanTimedOut" + expires_after="2025-12-01"> + <owner>elklm@chromium.org</owner> + <owner>hempjudith@google.com</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> + <summary> + Recorded when the overall timeout for the prediction service is reached. + This indicates that the entire process of selecting a permission UI took + longer than the allowed time. This is not recorded when the request is + cancelled. + </summary> +</histogram> + <histogram name="Permissions.PredictionServiceSource.{PermissionType}" enum="PermissionPredictionSource" expires_after="2025-12-07"> <owner>elklm@chromium.org</owner> @@ -1094,7 +1107,7 @@ <histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount2{PermissionTypes}" - units="units" expires_after="2025-10-31"> + units="units" expires_after="2026-03-01"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1171,7 +1184,7 @@ </histogram> <histogram name="Permissions.Prompt.Accepted{PermissionRequestGesture}" - enum="PermissionRequestType" expires_after="2025-12-28"> + enum="PermissionRequestType" expires_after="2026-03-01"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1223,7 +1236,7 @@ </histogram> <histogram name="Permissions.Prompt.Denied{PermissionRequestGesture}" - enum="PermissionRequestType" expires_after="2025-12-28"> + enum="PermissionRequestType" expires_after="2026-03-01"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1767,7 +1780,7 @@ </histogram> <histogram name="Permissions.Request.SameOrigin.{FrameLevel}" - enum="PermissionType" expires_after="2025-12-28"> + enum="PermissionType" expires_after="2026-03-01"> <owner>elklm@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1866,7 +1879,7 @@ </histogram> <histogram name="Permissions.Usage.ElapsedTimeSinceGrant{PermissionTypes}" - units="seconds" expires_after="2025-12-28"> + units="seconds" expires_after="2026-03-01"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml index 178f9b9..3352b2b33 100644 --- a/tools/metrics/histograms/metadata/platform/histograms.xml +++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -940,7 +940,7 @@ </histogram> <histogram name="Platform.FlexBootMethod" enum="FlexBootMethod" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>justinoue@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -1102,7 +1102,7 @@ </histogram> <histogram name="Platform.Fwupd.ActivateStatus" enum="FwupdReturnValue" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rishbhagr@google.com</owner> <owner>chromeos-fwupd@google.com</owner> <summary> @@ -1112,7 +1112,7 @@ </histogram> <histogram name="Platform.Fwupd.UpdateDuration" units="seconds" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rishabhagr@google.com</owner> <owner>chromeos-fwupd@google.com</owner> <summary> @@ -1122,7 +1122,7 @@ </histogram> <histogram name="Platform.Fwupd.UpdateStatus" enum="FwupdReturnValue" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rishabhagr@google.com</owner> <owner>chromeos-fwupd@google.com</owner> <summary> @@ -2747,7 +2747,7 @@ </histogram> <histogram name="Platform.TPM.VersionFingerprint" enum="TPMVersionFingerprint" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>apronin@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -2966,7 +2966,7 @@ </histogram> <histogram name="Platform.WiFiDeviceCount" units="wifi devices" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml index 508ee1bf..7f4edd7 100644 --- a/tools/metrics/histograms/metadata/power/histograms.xml +++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -462,7 +462,7 @@ </histogram> <histogram name="Power.AdaptiveChargingMinutes.{ReportType}" units="minutes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dbasehore@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -595,7 +595,7 @@ </histogram> <histogram name="Power.BacklightLevel{PrivacyScreenState}{PowerSource}" - units="%" expires_after="2025-12-28"> + units="%" expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>mqg@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> @@ -619,7 +619,7 @@ </histogram> <histogram name="Power.BatteryCapacity.{BatteryCapacityType}" units="mWh" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -629,7 +629,7 @@ </histogram> <histogram name="Power.BatteryChargeHealth" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -724,7 +724,7 @@ </histogram> <histogram name="Power.BatteryDischargeMode5{UsageScenario}{IntervalType}" - enum="BatteryDischargeMode" expires_after="2025-12-28"> + enum="BatteryDischargeMode" expires_after="2026-03-01"> <owner>etiennep@chromium.org</owner> <owner>olivierli@chromium.org</owner> <summary> @@ -754,7 +754,7 @@ </histogram> <histogram name="Power.BatteryDischargeRateMilliwatts6.TenMinutes" - units="milliwatts" expires_after="2025-12-28"> + units="milliwatts" expires_after="2026-03-01"> <owner>pmonette@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -855,7 +855,7 @@ </histogram> <histogram name="Power.BatteryDischargeRateWhileSuspended" units="mW" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -885,7 +885,7 @@ </histogram> <histogram name="Power.BatteryLife.Detail.{BatteryCapacityType}" units="minute" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -903,7 +903,7 @@ </histogram> <histogram name="Power.BatteryLife.RollingAverage.{BatteryCapacityType}" - units="minute" expires_after="2025-12-28"> + units="minute" expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -932,7 +932,7 @@ </histogram> <histogram name="Power.BatteryLifeWhileSuspended.{BatteryCapacityType}" - units="hour" expires_after="2025-12-28"> + units="hour" expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -1022,7 +1022,7 @@ </histogram> <histogram name="Power.CpuTimeSecondsPerProcessType.{Visibility}" - enum="ProcessType2" expires_after="2025-12-28"> + enum="ProcessType2" expires_after="2026-03-01"> <owner>eseckler@chromium.org</owner> <owner>skyostil@chromium.org</owner> <owner>woa-performance@google.com</owner> @@ -1508,7 +1508,7 @@ </histogram> <histogram name="Power.KernelResumeTimeOnAC" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>mhiramat@google.com</owner> <owner>chromeos-platform-power@google.com</owner> @@ -1535,7 +1535,7 @@ </histogram> <histogram name="Power.KernelSuspendTimeOnAC" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>puthik@chromium.org</owner> <owner>mhiramat@google.com</owner> <owner>chromeos-platform-power@google.com</owner> @@ -1565,7 +1565,7 @@ </histogram> <histogram name="Power.KeyboardBacklightLevel" units="%" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>tbroch@chromium.org</owner> <summary> The level of the keyboard backlight as a percentage. Sampled every 30 @@ -1843,7 +1843,7 @@ </histogram> <histogram name="Power.SuspendJourneyResult" enum="SuspendJourneyResult" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>eizan@chromium.org</owner> <owner>chromeos-power-team@google.com</owner> <summary> @@ -1875,7 +1875,7 @@ </histogram> <histogram name="Power.TimeInSuspendAtBoot" units="minutes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS time in minutes spent in suspend-to-RAM mode sampled at boot @@ -1884,7 +1884,7 @@ </histogram> <histogram name="Power.TimeInSuspendAtResume" units="minutes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS time in minutes spent in suspend-to-RAM mode sampled at resume.
diff --git a/tools/metrics/histograms/metadata/preloading/histograms.xml b/tools/metrics/histograms/metadata/preloading/histograms.xml index 862c5eea..5d01203 100644 --- a/tools/metrics/histograms/metadata/preloading/histograms.xml +++ b/tools/metrics/histograms/metadata/preloading/histograms.xml
@@ -209,7 +209,7 @@ <histogram name="Preloading.Prefetch.PrefetchDataPipeTeeCloneFailed.{PrefetchDataPipeTeeStateLoadingOrSizeExceeded}" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -226,7 +226,7 @@ </histogram> <histogram name="Preloading.Prefetch.PrefetchDataPipeTeeDtorState" - enum="PrefetchDataPipeTeeState" expires_after="2025-12-28"> + enum="PrefetchDataPipeTeeState" expires_after="2026-03-01"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/printing/histograms.xml b/tools/metrics/histograms/metadata/printing/histograms.xml index d7b8182..b2372c1 100644 --- a/tools/metrics/histograms/metadata/printing/histograms.xml +++ b/tools/metrics/histograms/metadata/printing/histograms.xml
@@ -263,7 +263,7 @@ </histogram> <histogram name="Printing.CUPS.PrinterAdded" enum="PrinterProtocol" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bmgordon@chromium.org</owner> <owner>src/chromeos/printing/OWNERS</owner> <summary> @@ -323,7 +323,7 @@ </histogram> <histogram name="Printing.CUPS.PrinterSetupResult.PrintPreview" - enum="PrinterSetupResult" expires_after="2025-12-28"> + enum="PrinterSetupResult" expires_after="2026-03-01"> <owner>bmgordon@chromium.org</owner> <owner>cros-printing-dev@chromium.org</owner> <summary> @@ -454,7 +454,7 @@ </histogram> <histogram name="Printing.CUPS.ZeroconfPrinterSetupResult.PrintPreview" - enum="PrinterSetupResult" expires_after="2025-12-28"> + enum="PrinterSetupResult" expires_after="2026-03-01"> <owner>bmgordon@chromium.org</owner> <owner>cros-printing-dev@chromium.org</owner> <summary> @@ -466,7 +466,7 @@ </histogram> <histogram name="Printing.Oop.PrintResult" enum="PrintOopResult" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>awscreen@chromium.org</owner> <owner>thestig@chromium.org</owner> <summary> @@ -578,7 +578,7 @@ </histogram> <histogram name="PrintPreview.InitialDisplayTime.LongTimes" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gavinwill@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -602,7 +602,7 @@ </histogram> <histogram name="PrintPreview.InitialDisplayTimeFirstPrint.LongTimes" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>gavinwill@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -649,7 +649,7 @@ </histogram> <histogram name="PrintPreview.PrintDocumentType" - enum="PrintPreviewPrintDocumentTypeBuckets" expires_after="2025-12-28"> + enum="PrintPreviewPrintDocumentTypeBuckets" expires_after="2026-03-01"> <owner>rbpotter@chromium.org</owner> <owner>awscreen@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml index e2c8f4e..aceddf7 100644 --- a/tools/metrics/histograms/metadata/privacy/histograms.xml +++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -633,7 +633,7 @@ </histogram> <histogram name="Privacy.PageInfo.SiteExceptionsScopeType" - enum="ContentSettingPatternScope" expires_after="2025-12-28"> + enum="ContentSettingPatternScope" expires_after="2026-03-01"> <owner>olesiamarukhno@google.com</owner> <owner>chrome-browser-privacy-team@google.com</owner> <summary> @@ -668,7 +668,7 @@ </histogram> <histogram name="Privacy.SiteExceptionsAdded.ContentSettingType" - enum="ContentType" expires_after="2025-12-28"> + enum="ContentType" expires_after="2026-03-01"> <owner>olesiamarukhno@google.com</owner> <owner>chrome-browser-privacy-team@google.com</owner> <summary> @@ -678,7 +678,7 @@ </histogram> <histogram name="Privacy.SiteExceptionsAdded.ScopeType" - enum="ContentSettingPatternScope" expires_after="2025-12-28"> + enum="ContentSettingPatternScope" expires_after="2026-03-01"> <owner>olesiamarukhno@google.com</owner> <owner>chrome-browser-privacy-team@google.com</owner> <summary> @@ -1184,7 +1184,7 @@ <histogram name="PrivacySandbox.Attestations.InitializationDuration.ComponentReadyFromApplicationStart" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>shivanisha@chromium.org</owner> <owner>xiaochenzh@chromium.org</owner> <summary> @@ -1201,7 +1201,7 @@ <histogram name="PrivacySandbox.Attestations.InitializationDuration.ComponentReadyFromApplicationStartWithInterruption" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>shivanisha@chromium.org</owner> <owner>xiaochenzh@chromium.org</owner> <summary> @@ -1221,7 +1221,7 @@ <histogram name="PrivacySandbox.Attestations.InitializationDuration.ComponentReadyFromBrowserWindowFirstPaint" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>shivanisha@chromium.org</owner> <owner>xiaochenzh@chromium.org</owner> <summary> @@ -1682,7 +1682,7 @@ <histogram name="PrivacySandbox.PrivateAggregation.Host.NumContributionMergeKeysInPipe{ApiAndDelay}" - units="contributions if merged" expires_after="2025-12-28"> + units="contributions if merged" expires_after="2026-03-01"> <owner>alexmt@chromium.org</owner> <owner>dmcardle@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/profile/histograms.xml b/tools/metrics/histograms/metadata/profile/histograms.xml index 76e70ed..3e1daab 100644 --- a/tools/metrics/histograms/metadata/profile/histograms.xml +++ b/tools/metrics/histograms/metadata/profile/histograms.xml
@@ -103,13 +103,13 @@ </histogram> <histogram name="Profile.Avatar" enum="ProfileAvatar" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary>The frequency of selection of each avatar.</summary> </histogram> -<histogram name="Profile.BookmarksSize" units="MB" expires_after="2025-12-28"> +<histogram name="Profile.BookmarksSize" units="MB" expires_after="2026-03-01"> <owner>etienneb@chromium.org</owner> <owner>gab@chromium.org</owner> <summary>Size of the bookmarks database.</summary> @@ -240,7 +240,7 @@ </histogram> <histogram name="Profile.Guest.OTR.Lifetime" units="minutes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>arabm@google.com</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -262,7 +262,7 @@ </histogram> <histogram name="Profile.Incognito.MainFrameNavigationsPerSession" - units="navigations" expires_after="2025-12-28"> + units="navigations" expires_after="2026-03-01"> <owner>rhalavati@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -274,7 +274,7 @@ </histogram> <histogram name="Profile.Incognito.MovedToBackgroundAfterDuration" - units="minutes" expires_after="2025-12-28"> + units="minutes" expires_after="2026-03-01"> <owner>arabm@google.com</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -301,7 +301,7 @@ </histogram> <histogram name="Profile.KeepAliveLeakAtShutdown" enum="ProfileKeepAliveOrigin" - expires_after="2025-12-30"> + expires_after="2026-03-01"> <owner>nicolaso@chromium.org</owner> <owner>cbe-eng@google.com</owner> <summary> @@ -353,7 +353,7 @@ </histogram> <histogram name="Profile.NetUserCount" enum="ProfileNetUserCount" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rogerta@chromium.org</owner> <summary> Counts of users added and deleted. Percentages are not meaningful. Please @@ -362,7 +362,7 @@ </histogram> <histogram name="Profile.NukeFromDisk.Result" enum="NukeProfileResult" - expires_after="2025-12-30"> + expires_after="2026-03-01"> <owner>nicolaso@chromium.org</owner> <owner>cbe-eng@google.com</owner> <summary> @@ -379,7 +379,7 @@ </histogram> <histogram name="Profile.NumberOfAccountsPerProfile" units="units" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>msarda@chromium.org</owner> <owner>droger@chromium.org</owner> <summary> @@ -528,7 +528,7 @@ </histogram> <histogram name="Profile.NumberOfSignedInProfiles" units="profiles" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -676,7 +676,7 @@ </histogram> <histogram name="Profile.State.SyncEnabled{ProfileStateGroup}" - enum="BooleanEnabled" expires_after="2025-12-28"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -704,7 +704,7 @@ </histogram> <histogram name="Profile.TotalSizeRecursive" units="MB" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>anthonyvd@chromium.org</owner> <owner>chrome-catan@google.com</owner> <summary> @@ -745,7 +745,7 @@ </histogram> <histogram name="Profile.ZombieProfileCount" units="profiles" - expires_after="2025-12-30"> + expires_after="2026-03-01"> <owner>nicolaso@chromium.org</owner> <owner>cbe-eng@google.com</owner> <summary> @@ -935,7 +935,7 @@ </histogram> <histogram name="ProfilePicker.Shown" enum="ProfilePickerEntryPoint" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -999,7 +999,7 @@ </histogram> <histogram name="ProfilePicker.UserAction" enum="ProfilePickerAction" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/quota/histograms.xml b/tools/metrics/histograms/metadata/quota/histograms.xml index a929f61..bf1642e4 100644 --- a/tools/metrics/histograms/metadata/quota/histograms.xml +++ b/tools/metrics/histograms/metadata/quota/histograms.xml
@@ -306,7 +306,7 @@ </histogram> <histogram name="Quota.QuotaDatabaseError" enum="SqliteLoggedResultCode" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>Errors reported by SQLite while using the quota database.</summary>
diff --git a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml index 3acae9de..1703133 100644 --- a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml +++ b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml
@@ -38,7 +38,7 @@ </histogram> <histogram name="RegionalCapabilities.FallbackCountryMatching" - enum="CountryMatchingStatus" expires_after="2025-12-28"> + enum="CountryMatchingStatus" expires_after="2026-03-01"> <owner>dgn@chromium.org</owner> <owner>chrome-regionalcapabilities@google.com</owner> <summary> @@ -53,7 +53,7 @@ </histogram> <histogram name="RegionalCapabilities.FetchedCountryMatching" - enum="CountryMatchingStatus" expires_after="2025-12-28"> + enum="CountryMatchingStatus" expires_after="2026-03-01"> <owner>dgn@chromium.org</owner> <owner>chrome-regionalcapabilities@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/renderer/histograms.xml b/tools/metrics/histograms/metadata/renderer/histograms.xml index a760d0ce..518ff5e 100644 --- a/tools/metrics/histograms/metadata/renderer/histograms.xml +++ b/tools/metrics/histograms/metadata/renderer/histograms.xml
@@ -355,7 +355,7 @@ </histogram> <histogram name="Renderer.HungRendererDialog.UserAction" - enum="HungRendererDialogUserAction" expires_after="2025-12-28"> + enum="HungRendererDialogUserAction" expires_after="2026-03-01"> <owner>kerenzhu@chromium.org</owner> <owner>chrome-views-alerts@google.com</owner> <summary> @@ -690,7 +690,7 @@ </histogram> <histogram name="RendererScheduler.RendererMain.TaskOffCpuDuration" units="ms" - expires_after="2025-12-25"> + expires_after="2026-03-01"> <owner>anandrv@google.com</owner> <owner>clank-performance-team@google.com</owner> <summary> @@ -701,7 +701,7 @@ </histogram> <histogram name="RendererScheduler.RendererMain.TaskOnCpuDuration" units="ms" - expires_after="2025-12-25"> + expires_after="2026-03-01"> <owner>anandrv@google.com</owner> <owner>clank-performance-team@google.com</owner> <summary> @@ -712,7 +712,7 @@ </histogram> <histogram name="RendererScheduler.RendererMain.TaskOnCpuPercentage" units="%" - expires_after="2025-12-25"> + expires_after="2026-03-01"> <owner>anandrv@google.com</owner> <owner>clank-performance-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/renderer4/histograms.xml b/tools/metrics/histograms/metadata/renderer4/histograms.xml index 6b0ccd2..7e4e5d0d 100644 --- a/tools/metrics/histograms/metadata/renderer4/histograms.xml +++ b/tools/metrics/histograms/metadata/renderer4/histograms.xml
@@ -141,7 +141,7 @@ </histogram> <histogram name="Renderer4.GpuRasterizationEnabled" enum="BooleanEnabled" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -262,7 +262,7 @@ </histogram> <histogram name="Renderer4.ScrollingThread.{ScrollSourceDevice}" - enum="ScrollingThreadStatus" expires_after="2025-12-28"> + enum="ScrollingThreadStatus" expires_after="2026-03-01"> <owner>bokan@chromium.org</owner> <owner>input-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml index 694e8da..ff4ee71 100644 --- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -281,7 +281,7 @@ </histogram> <histogram name="SafeBrowsing.AsyncCheck.HasPostCommitInterstitialSkipped" - enum="BooleanSkipped" expires_after="2025-12-28"> + enum="BooleanSkipped" expires_after="2026-03-01"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -316,7 +316,7 @@ </histogram> <histogram name="SafeBrowsing.BlockingPage.ThreatType" enum="SBThreatType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -524,7 +524,7 @@ </histogram> <histogram name="SafeBrowsing.CheckUrl.UrlScheme" enum="SafeBrowsingUrlScheme" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -642,7 +642,7 @@ </histogram> <histogram name="SafeBrowsing.ClientSafeBrowsingReport.PersisterWriteResult" - enum="ClientReportPersisterWriteResult" expires_after="2025-12-28"> + enum="ClientReportPersisterWriteResult" expires_after="2026-03-01"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -844,7 +844,7 @@ </histogram> <histogram name="SafeBrowsing.EsbDisabled.LastSecuritySensitiveEventType" - enum="SBMetricsCollectorEventType" expires_after="2025-12-28"> + enum="SBMetricsCollectorEventType" expires_after="2026-03-01"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -884,7 +884,7 @@ </histogram> <histogram name="SafeBrowsing.EsbPromotionFlow.IphShown" - enum="SafeBrowsingReferralMethod" expires_after="2025-12-28"> + enum="SafeBrowsingReferralMethod" expires_after="2026-03-01"> <owner>awado@google.com</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -1796,7 +1796,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.Ineligible.{IneligibleReason}" - enum="BooleanIneligible" expires_after="2025-12-28"> + enum="BooleanIneligible" expires_after="2026-03-01"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1847,7 +1847,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.Network.Result.WhenEnteringBackoff" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-12-28"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-01"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2298,7 +2298,7 @@ </histogram> <histogram name="SafeBrowsing.PakIntegrity.{PakFile}" enum="BooleanSuccess" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>drubery@chromium.org</owner> <owner>rsesek@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> @@ -2342,7 +2342,7 @@ </histogram> <histogram name="SafeBrowsing.Pref.Daily.PasswordLeakToggle" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>awado@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2895,7 +2895,7 @@ </histogram> <histogram name="SafeBrowsing.RT.Request.Size{UserCategory}" units="bytes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3430,7 +3430,7 @@ </histogram> <histogram name="SafeBrowsing.V4Database.UpdateLatency" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>skrakowi@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -4110,7 +4110,7 @@ </histogram> <histogram name="SafeBrowsingBinaryUploadRequest.DlpResult" - enum="BooleanSuccess" expires_after="2025-09-14"> + enum="BooleanSuccess" expires_after="2026-09-14"> <owner>domfc@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -4121,7 +4121,7 @@ </histogram> <histogram name="SafeBrowsingBinaryUploadRequest.Duration" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -4132,7 +4132,7 @@ </histogram> <histogram name="SafeBrowsingBinaryUploadRequest.MalwareResult" - enum="BooleanSuccess" expires_after="2025-12-28"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml index e1d2726f..4d68207 100644 --- a/tools/metrics/histograms/metadata/sb_client/histograms.xml +++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -70,7 +70,7 @@ <histogram name="SBClientDownload.Android.DownloadProtectionOutcome" enum="SBClientDownloadAndroidDownloadProtectionOutcome" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>chlily@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -164,7 +164,7 @@ </histogram> <histogram name="SBClientDownload.DownloadExtensions" - enum="SBClientDownloadExtensions" expires_after="2025-12-28"> + enum="SBClientDownloadExtensions" expires_after="2026-03-01"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <owner>mattm@chromium.org</owner> @@ -501,7 +501,7 @@ </histogram> <histogram name="SBClientPhishing.Classifier.Event{RequestType}" - enum="SBPhishingClassifierEvent" expires_after="2025-12-28"> + enum="SBPhishingClassifierEvent" expires_after="2026-03-01"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -675,7 +675,7 @@ <histogram name="SBClientPhishing.IsOnDeviceModelAvailableAtInquiryTime{OnDeviceModelRequestType}" - enum="BooleanSuccess" expires_after="2025-12-30"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -869,7 +869,7 @@ <histogram name="SBClientPhishing.OnDeviceModelHasSuccessfulResponse{OnDeviceModelRequestType}" - enum="BooleanSuccess" expires_after="2025-12-30"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -982,7 +982,7 @@ </histogram> <histogram name="SBClientPhishing.OptimizationGuide.ModelFetchTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1004,7 +1004,7 @@ </histogram> <histogram name="SBClientPhishing.PhishingDetectionDuration{RequestType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1101,7 +1101,7 @@ </histogram> <histogram name="SBClientPhishing.RTLookupForceRequest" - enum="BooleanForceRequest" expires_after="2025-12-28"> + enum="BooleanForceRequest" expires_after="2026-03-01"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/search/histograms.xml b/tools/metrics/histograms/metadata/search/histograms.xml index a348e4e..0014bbfa4 100644 --- a/tools/metrics/histograms/metadata/search/histograms.xml +++ b/tools/metrics/histograms/metadata/search/histograms.xml
@@ -1182,7 +1182,7 @@ </histogram> <histogram name="Search.OsDefaultsChoice.LaunchChoiceScreenTapHandlingStatus" - enum="LaunchOsChoiceScreenTapHandlingStatus" expires_after="2025-12-28"> + enum="LaunchOsChoiceScreenTapHandlingStatus" expires_after="2026-03-01"> <owner>dgn@chromium.org</owner> <owner>triploblastic@google.com</owner> <owner>chrome-waffle-eng@google.com</owner> @@ -1670,7 +1670,7 @@ </histogram> <histogram name="Search.SearchProviderOverrideStatus" - enum="SearchProviderOverrideStatus" expires_after="2025-12-28"> + enum="SearchProviderOverrideStatus" expires_after="2026-03-01"> <owner>dgn@chromium.org</owner> <owner>droger@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/security/histograms.xml b/tools/metrics/histograms/metadata/security/histograms.xml index c67927d..16b910f 100644 --- a/tools/metrics/histograms/metadata/security/histograms.xml +++ b/tools/metrics/histograms/metadata/security/histograms.xml
@@ -246,7 +246,7 @@ </histogram> <histogram name="Security.HttpsFirstMode.SettingChanged2" - enum="HttpsFirstModeSetting" expires_after="2025-12-28"> + enum="HttpsFirstModeSetting" expires_after="2026-03-01"> <owner>cthomp@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -273,7 +273,7 @@ </histogram> <histogram name="Security.HttpsFirstMode.SettingEnabledAtStartup2" - enum="HttpsFirstModeSetting" expires_after="2025-12-28"> + enum="HttpsFirstModeSetting" expires_after="2026-03-01"> <owner>cthomp@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -285,7 +285,7 @@ <histogram name="Security.HttpsFirstModeWithEngagementHeuristic.AccumulatedHostCount" - units="hostnames" expires_after="2025-12-28"> + units="hostnames" expires_after="2026-03-01"> <owner>meacer@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -296,7 +296,7 @@ </histogram> <histogram name="Security.HttpsFirstModeWithEngagementHeuristic.Duration" - units="seconds" expires_after="2025-12-28"> + units="seconds" expires_after="2026-03-01"> <owner>meacer@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -307,7 +307,7 @@ </histogram> <histogram name="Security.HttpsFirstModeWithEngagementHeuristic.HostCount" - units="hostnames" expires_after="2025-12-28"> + units="hostnames" expires_after="2026-03-01"> <owner>meacer@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -331,7 +331,7 @@ </histogram> <histogram name="Security.HttpsFirstModeWithEngagementHeuristic.State" - enum="SiteEngagementHeuristicState" expires_after="2025-12-28"> + enum="SiteEngagementHeuristicState" expires_after="2026-03-01"> <owner>meacer@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -378,7 +378,7 @@ </histogram> <histogram name="Security.PageEndReason{SafetyTip}" enum="PageEndReason" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>cthomp@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -388,7 +388,7 @@ </histogram> <histogram name="Security.PageInfo.AboutThisSiteInteraction" - enum="AboutThisSiteInteraction" expires_after="2025-12-28"> + enum="AboutThisSiteInteraction" expires_after="2026-03-01"> <owner>dullweber@chromium.org</owner> <owner>olesiamarukhno@chromium.org</owner> <summary> @@ -521,7 +521,7 @@ </histogram> <histogram name="Security.PrivateNetworkAccess.CheckResult" - enum="PrivateNetworkAccessCheckResult" expires_after="2025-12-28"> + enum="PrivateNetworkAccessCheckResult" expires_after="2026-03-01"> <owner>titouan@chromium.org</owner> <owner>clamy@chromium.org</owner> <owner>mkwst@chromium.org</owner> @@ -567,7 +567,7 @@ </histogram> <histogram name="Security.PrivateNetworkAccess.PrivateIpInferrable" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>titouan@chromium.org</owner> <owner>lyf@chromium.org</owner> <owner>clamy@chromium.org</owner> @@ -582,7 +582,7 @@ </histogram> <histogram name="Security.PrivateNetworkAccess.PrivateIpResolveMatch" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>titouan@chromium.org</owner> <owner>lyf@chromium.org</owner> <owner>clamy@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml index 04dc34a..96ae3b0 100644 --- a/tools/metrics/histograms/metadata/service/histograms.xml +++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -204,7 +204,7 @@ </histogram> <histogram name="ServiceWorker.CacheStorageInstalledScript.CachedMetadataSize" - units="bytes" expires_after="2025-12-28"> + units="bytes" expires_after="2026-03-01"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -282,7 +282,7 @@ </histogram> <histogram name="ServiceWorker.CorsExemptHeaderListSize" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sisidovski@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -307,7 +307,7 @@ </histogram> <histogram name="ServiceWorker.CountUse.DedicatedWorker.WebFeature" - units="WebFeature" expires_after="2025-12-28"> + units="WebFeature" expires_after="2026-03-01"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1206,7 +1206,7 @@ </histogram> <histogram name="ServiceWorker.MaybeStartWorker.RunningStatus" - enum="EmbeddedWorkerStatus" expires_after="2025-12-31"> + enum="EmbeddedWorkerStatus" expires_after="2026-03-01"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1270,7 +1270,7 @@ </histogram> <histogram name="ServiceWorker.OnStarted.UpdatedFetchHandlerType" - enum="ServiceWorkerFetchHandlerType" expires_after="2025-12-28"> + enum="ServiceWorkerFetchHandlerType" expires_after="2026-03-01"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1289,7 +1289,7 @@ <histogram name="ServiceWorker.OnStarted.UpdatedFetchHandlerTypeBySourceType_{SourceType}" - enum="ServiceWorkerFetchHandlerType" expires_after="2025-12-28"> + enum="ServiceWorkerFetchHandlerType" expires_after="2026-03-01"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1415,7 +1415,7 @@ </histogram> <histogram name="ServiceWorker.RouterEvaluator.EvaluationTime" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>sisidovski@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1464,7 +1464,7 @@ </histogram> <histogram name="ServiceWorker.RouterEvaluator.SubresourceTotalEvaluationTime" - units="microseconds" expires_after="2025-12-28"> + units="microseconds" expires_after="2026-03-01"> <owner>suzukikeita@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -2161,7 +2161,7 @@ <histogram name="ServiceWorkerCache.CacheStorage.{ServiceWorkerCacheProcessType}.{ProcessOps}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/session/histograms.xml b/tools/metrics/histograms/metadata/session/histograms.xml index 1701df07..e33b0b4f 100644 --- a/tools/metrics/histograms/metadata/session/histograms.xml +++ b/tools/metrics/histograms/metadata/session/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="Session.Android.TabbedSessionContainedGoogleSearch" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>nafisabedin@google.com</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -79,7 +79,7 @@ </histogram> <histogram name="Session.IsActive" enum="BooleanActive" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rogerm@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -98,7 +98,7 @@ </histogram> <histogram name="Session.OpenedTabCounts" units="operations" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rohitrao@chromium.org</owner> <owner>marq@chromium.org</owner> <summary> @@ -1209,7 +1209,7 @@ </histogram> <histogram name="SessionRestore.TabCount{TabType}" units="tabs" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>joenotcharles@google.com</owner> <owner>catan-team@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml index 8454c08..217d6df 100644 --- a/tools/metrics/histograms/metadata/settings/histograms.xml +++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -285,7 +285,7 @@ </histogram> <histogram name="Settings.FirstPartySets.State" enum="FirstPartySetsState" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>alimariam@google.com</owner> <owner>olesiamarukhno@google.com</owner> <owner>sauski@google.com</owner> @@ -339,7 +339,7 @@ </histogram> <histogram name="Settings.Homepage.LocationType" enum="HomepageLocationType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>bttk@chromium.org</owner> <owner>twellington@chromium.org</owner> <owner>wenyufu@chromium.org</owner> @@ -433,7 +433,7 @@ </histogram> <histogram name="Settings.PreloadStatus.OnStartup3" enum="PreloadPagesState" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rainhard@chromium.org</owner> <owner>msramek@chromium.org</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -445,7 +445,7 @@ </histogram> <histogram name="Settings.PrivacyElementInteractions" - enum="SettingsPrivacyElementInteractions" expires_after="2025-12-28"> + enum="SettingsPrivacyElementInteractions" expires_after="2026-03-01"> <owner>harrisonsean@chromium.org</owner> <owner>msramek@chromium.org</owner> <owner>sauski@chromium.org</owner> @@ -456,7 +456,7 @@ </histogram> <histogram name="Settings.PrivacyGuide.EntryExit" - enum="SettingsPrivacyGuideInteractions" expires_after="2025-12-28"> + enum="SettingsPrivacyGuideInteractions" expires_after="2026-03-01"> <owner>harrisonsean@chromium.org</owner> <owner>rainhard@chromium.org</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -467,7 +467,7 @@ </histogram> <histogram name="Settings.PrivacyGuide.FlowLength" units="steps" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rainhard@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -479,7 +479,7 @@ </histogram> <histogram name="Settings.PrivacyGuide.NextNavigation" - enum="SettingsPrivacyGuideInteractions" expires_after="2025-12-28"> + enum="SettingsPrivacyGuideInteractions" expires_after="2026-03-01"> <owner>harrisonsean@chromium.org</owner> <owner>rainhard@chromium.org</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -502,7 +502,7 @@ <histogram name="Settings.PrivacyGuide.StepsEligibleAndReached" enum="SettingsPrivacyGuideStepsEligibleAndReached" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rainhard@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -688,7 +688,7 @@ </histogram> <histogram name="Settings.SafetyCheck.PasswordsResult2" - enum="SafetyCheckPasswordsStatus" expires_after="2025-12-28"> + enum="SafetyCheckPasswordsStatus" expires_after="2026-03-01"> <owner>rainhard@chromium.org</owner> <owner>msramek@chromium.org</owner> <summary> @@ -829,7 +829,7 @@ <histogram name="Settings.SafetyHub.AutorevokeUnusedSitePermissions.StateOnStartup" - enum="BooleanEnabled" expires_after="2025-12-28"> + enum="BooleanEnabled" expires_after="2026-03-01"> <owner>fsenra@google.com</owner> <owner>chrome-browser-privacy-team@google.com</owner> <summary> @@ -1242,7 +1242,7 @@ <histogram name="Settings.SafetyHub.NotificationPermissionsModule.Interactions" enum="SafetyCheckNotificationsModuleInteractions" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sideyilmaz@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -1254,7 +1254,7 @@ </histogram> <histogram name="Settings.SafetyHub.NotificationPermissionsModule.ListCount" - units="suggestions" expires_after="2025-12-28"> + units="suggestions" expires_after="2026-03-01"> <owner>sideyilmaz@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -1302,7 +1302,7 @@ <histogram name="Settings.SafetyHub.UnusedSitePermissionsModule.Interactions" enum="SafetyCheckUnusedSitePermissionsModuleInteractions" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sideyilmaz@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -1314,7 +1314,7 @@ </histogram> <histogram name="Settings.SafetyHub.UnusedSitePermissionsModule.ListCount" - units="suggestions" expires_after="2025-12-28"> + units="suggestions" expires_after="2026-03-01"> <owner>sideyilmaz@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -1449,7 +1449,7 @@ </histogram> <histogram name="Settings.TrackedPreferenceClearedEncrypted" - enum="TrackedPreference" expires_after="2025-12-26"> + enum="TrackedPreference" expires_after="2026-03-01"> <owner>zackhan@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1579,7 +1579,7 @@ </histogram> <histogram name="Settings.TrackedPreferenceUnchangedEncrypted" - enum="TrackedPreference" expires_after="2025-12-26"> + enum="TrackedPreference" expires_after="2026-03-01"> <owner>zackhan@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1590,7 +1590,7 @@ </histogram> <histogram name="Settings.TrackedPreferenceUnchangedViaHmacFallback" - enum="TrackedPreference" expires_after="2025-12-26"> + enum="TrackedPreference" expires_after="2026-03-01"> <owner>zackhan@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1630,7 +1630,7 @@ </histogram> <histogram name="Settings.TrackedPreferenceWantedResetEncrypted" - enum="TrackedPreference" expires_after="2025-12-26"> + enum="TrackedPreference" expires_after="2026-03-01"> <owner>zackhan@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1652,7 +1652,7 @@ </histogram> <histogram name="Settings.TrackingProtection.BlockAllThirdParty" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>fmacintosh@google.com</owner> <owner>koilos@google.com</owner> <summary> @@ -1663,7 +1663,7 @@ </histogram> <histogram name="Settings.TrackingProtection.Enabled" enum="BooleanEnabled" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>fmacintosh@google.com</owner> <owner>koilos@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml index ec57549..ab34fda 100644 --- a/tools/metrics/histograms/metadata/sharing/histograms.xml +++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -326,7 +326,7 @@ </histogram> <histogram name="Sharing.SendMessageUsingSync" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rushans@google.com</owner> <owner>src/chrome/browser/share/OWNERS</owner> <summary> @@ -346,7 +346,7 @@ </histogram> <histogram name="Sharing.SendTabToSelf.NotificationStatus" - enum="SendTabToSelfNotificationStatus" expires_after="2025-12-28"> + enum="SendTabToSelfNotificationStatus" expires_after="2026-03-01"> <owner>jeffreycohen@chromium.org</owner> <owner>src/chrome/browser/share/OWNERS</owner> <summary> @@ -480,7 +480,7 @@ </histogram> <histogram name="Sharing.{ShareSurface}.ShareContentType" - enum="SharingContentTypeAndroid" expires_after="2025-12-28"> + enum="SharingContentTypeAndroid" expires_after="2026-03-01"> <owner>wenyufu@chromium.org</owner> <owner>src/chrome/browser/share/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/signin/enums.xml b/tools/metrics/histograms/metadata/signin/enums.xml index 52cddae..e801cc9c 100644 --- a/tools/metrics/histograms/metadata/signin/enums.xml +++ b/tools/metrics/histograms/metadata/signin/enums.xml
@@ -735,6 +735,10 @@ <int value="44" label="Autofill Payments"/> <int value="45" label="Payments Access Token Fetcher"/> <int value="46" label="Save to Drive"/> + <int value="47" label="Fast Pair"/> + <int value="48" label="Edu Coexistence Login Handler"/> + <int value="49" label="Edu Account Login Handler"/> + <int value="50" label="Chromeos Family Link User Metrics provider"/> </enum> <!-- LINT.ThenChange(//components/signin/public/identity_manager/oauth_consumer_ids.h:OAuthConsumerId) -->
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml index c29e852..d0f9bda 100644 --- a/tools/metrics/histograms/metadata/signin/histograms.xml +++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -782,7 +782,7 @@ </histogram> <histogram name="Signin.AndroidNumberOfDeviceAccounts" units="accounts" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>triploblastic@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -955,7 +955,7 @@ <histogram name="Signin.BoundSessionCredentials.Covered{Type}RequestWasDeferred{Result}" - enum="BooleanWasDeferred" expires_after="2025-12-28"> + enum="BooleanWasDeferred" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1036,7 +1036,7 @@ </histogram> <histogram name="Signin.BoundSessionCredentials.SessionCountOnInit" - units="DBSC sessions" expires_after="2025-12-28"> + units="DBSC sessions" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1108,7 +1108,7 @@ <histogram name="Signin.BoundSessionCredentials.SessionTerminationDebugReportFetcherHttpResult" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-12-28"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1131,7 +1131,7 @@ </histogram> <histogram name="Signin.BoundSessionCredentials.StorageReadError" - enum="BoundSessionParamsReadError" expires_after="2025-12-28"> + enum="BoundSessionParamsReadError" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1144,7 +1144,7 @@ </histogram> <histogram name="Signin.BoundSessionCredentials.StorageWriteError" - enum="BoundSessionParamsWriteError" expires_after="2025-12-28"> + enum="BoundSessionParamsWriteError" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1172,7 +1172,7 @@ </histogram> <histogram name="Signin.CctAccountMismatch" enum="CctAccountMismatchType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>samarchehade@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -1198,7 +1198,7 @@ </histogram> <histogram name="Signin.ChromeSignoutConfirmationPrompt.{Variant}" - enum="ChromeSignoutConfirmationChoice" expires_after="2025-12-28"> + enum="ChromeSignoutConfirmationChoice" expires_after="2026-03-01"> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -1235,7 +1235,7 @@ <histogram name="Signin.CookieJar.SignedInCountWithPrimary{UnconsentedPrimaryAccountType}" - units="accounts" expires_after="2025-12-28"> + units="accounts" expires_after="2026-03-01"> <owner>msarda@chromium.org</owner> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1451,7 +1451,7 @@ </histogram> <histogram name="Signin.DiceTokenBindingOutcome" enum="DiceTokenBindingOutcome" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1761,7 +1761,7 @@ </histogram> <histogram name="Signin.Intercept.BubbleDismissReason{Type}" - enum="SigninInterceptionDismissReason" expires_after="2025-12-28"> + enum="SigninInterceptionDismissReason" expires_after="2026-03-01"> <owner>rsult@google.com</owner> <owner>droger@chromium.org</owner> <summary> @@ -2176,7 +2176,7 @@ </histogram> <histogram name="Signin.IOSNumberOfDeviceAccounts" units="accounts" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jlebel@chromium.org</owner> <owner>msarda@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -2260,7 +2260,7 @@ </histogram> <histogram name="Signin.LoadedIdentities.Count" units="identities" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>jlebel@chromium.org</owner> <owner>msarda@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -2300,7 +2300,7 @@ </histogram> <histogram name="Signin.LoadedIdentities.IdentityWithAuthErrorCount" - units="identities" expires_after="2025-12-28"> + units="identities" expires_after="2026-03-01"> <owner>jlebel@chromium.org</owner> <owner>msarda@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -2436,7 +2436,7 @@ </histogram> <histogram name="Signin.OAuth2MintToken.Response" enum="OAuth2Response" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -2453,7 +2453,7 @@ <histogram name="Signin.OAuth2MintToken.{BindingState}FetchAuthError{TokenBindingAssertionValue}" - enum="GoogleServiceAuthError" expires_after="2025-12-28"> + enum="GoogleServiceAuthError" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -2479,7 +2479,7 @@ </histogram> <histogram name="Signin.OAuth2MintToken.{BindingState}FetchEncryptionError" - enum="TokenBindingResponseEncryptionError" expires_after="2025-12-28"> + enum="TokenBindingResponseEncryptionError" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -2548,7 +2548,7 @@ </histogram> <histogram name="Signin.OAuthMultiloginResponseEncryptionError" - enum="TokenBindingResponseEncryptionError" expires_after="2025-12-28"> + enum="TokenBindingResponseEncryptionError" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -2597,7 +2597,7 @@ </histogram> <histogram name="Signin.PAMInitialize.PrimaryAccountPrefs" - enum="PAMInitializePrimaryAccountPrefs" expires_after="2025-12-28"> + enum="PAMInitializePrimaryAccountPrefs" expires_after="2026-03-01"> <owner>msarda@chromium.org</owner> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -3183,7 +3183,7 @@ </histogram> <histogram name="Signin.SigninPending.Resolution" - enum="PendingResolutionSource" expires_after="2025-12-28"> + enum="PendingResolutionSource" expires_after="2026-03-01"> <owner>rsult@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -3194,7 +3194,7 @@ </histogram> <histogram name="Signin.SigninPending.ResolutionSource{Status}" - enum="SigninAccessPoint" expires_after="2025-12-28"> + enum="SigninAccessPoint" expires_after="2026-03-01"> <owner>rsult@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -3211,7 +3211,7 @@ </histogram> <histogram name="Signin.SigninPending.ResolutionTime.{ResolutionType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>rsult@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -3465,7 +3465,7 @@ </histogram> <histogram name="Signin.SyncErrorMessage{SyncErrorReason}" - enum="SyncErrorPromptUIAction" expires_after="2025-12-28"> + enum="SyncErrorPromptUIAction" expires_after="2026-03-01"> <owner>triploblastic@chromium.org</owner> <owner>bsazonov@chromium.org</owner> <summary> @@ -3583,7 +3583,7 @@ </histogram> <histogram name="Signin.SyncPaused.ResolutionTime.{ResolutionType}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>rsult@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -3656,7 +3656,7 @@ </histogram> <histogram name="Signin.TokenBinding.BoundToTheSameKey" - enum="BooleanBoundToTheSameKey" expires_after="2025-12-28"> + enum="BooleanBoundToTheSameKey" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -3669,7 +3669,7 @@ </histogram> <histogram name="Signin.TokenBinding.GenerateAssertionResult" - enum="TokenBindingGenerateAssertionResult" expires_after="2025-12-28"> + enum="TokenBindingGenerateAssertionResult" expires_after="2026-03-01"> <owner>alexilin@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/simple/histograms.xml b/tools/metrics/histograms/metadata/simple/histograms.xml index f4179f1d..b8d2ced1 100644 --- a/tools/metrics/histograms/metadata/simple/histograms.xml +++ b/tools/metrics/histograms/metadata/simple/histograms.xml
@@ -78,7 +78,7 @@ </histogram> <histogram name="SimpleCache.{CacheInstance}CreationToIndex" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>morlovich@chromium.org</owner> <owner>wanderview@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sql/histograms.xml b/tools/metrics/histograms/metadata/sql/histograms.xml index 7dbc6ef..af3cfebb 100644 --- a/tools/metrics/histograms/metadata/sql/histograms.xml +++ b/tools/metrics/histograms/metadata/sql/histograms.xml
@@ -258,7 +258,7 @@ </histogram> <histogram name="Sql.Statement.{DatabaseTag}.VMSteps" units="count" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>etienneb@chromium.org</owner> <owner>estade@chromium.org</owner> <owner>chrome-catan@google.com</owner> @@ -270,7 +270,7 @@ <token key="DatabaseTag" variants="DatabaseTag"/> </histogram> -<histogram name="Sql.vfs.SyncTime" units="ms" expires_after="2025-12-28"> +<histogram name="Sql.vfs.SyncTime" units="ms" expires_after="2026-03-01"> <owner>etienneb@chromium.org</owner> <owner>estade@chromium.org</owner> <owner>chrome-catan@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/stability/histograms.xml b/tools/metrics/histograms/metadata/stability/histograms.xml index 21ecaa3..33cf1849 100644 --- a/tools/metrics/histograms/metadata/stability/histograms.xml +++ b/tools/metrics/histograms/metadata/stability/histograms.xml
@@ -84,7 +84,7 @@ </histogram> <histogram name="ChildProcess.Launched.UtilityProcessHash" - enum="UtilityProcessNameHash" expires_after="2025-12-28"> + enum="UtilityProcessNameHash" expires_after="2026-03-01"> <owner>wfh@chromium.org</owner> <summary> Count of child utility process launches, bucketed by the hash of their @@ -202,7 +202,7 @@ </histogram> <histogram name="Stability.Android.RendererCrash" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>wnwen@chromium.org</owner> <summary> Counts renderer crashes including OOMs. Android only. Mirrors old stability @@ -685,7 +685,7 @@ </histogram> <histogram name="Stability.MobileSessionShutdownType2" - enum="MobileSessionShutdownType" expires_after="2025-12-28"> + enum="MobileSessionShutdownType" expires_after="2026-03-01"> <owner>justincohen@chromium.org</owner> <owner>bling-fundamentals@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml index 27881b1..b512978 100644 --- a/tools/metrics/histograms/metadata/startup/histograms.xml +++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -516,7 +516,7 @@ </histogram> <histogram name="Startup.Android.MainIntentIsColdStart" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>nafisabedin@google.com</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -536,7 +536,7 @@ </histogram> <histogram name="Startup.Android.PrivacySandbox.AdsNoticeCCTAppIDCheck" - enum="Boolean" expires_after="2025-12-28"> + enum="Boolean" expires_after="2026-03-01"> <owner>jacobstanley@google.com</owner> <owner>koilos@google.com</owner> <summary> @@ -588,7 +588,7 @@ </histogram> <histogram name="Startup.BrowserMainRunnerImplInitializeLongTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>robliao@chromium.org</owner> <summary> The amount of time that elapsed during BrowserMainRunnerImpl::Initialize. @@ -692,7 +692,7 @@ </histogram> <histogram name="Startup.BrowserWindow.FirstPaint" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gab@chromium.org</owner> <owner>mblsha@yandex-team.ru</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml index a093859e..0e15491 100644 --- a/tools/metrics/histograms/metadata/storage/histograms.xml +++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -69,7 +69,7 @@ </histogram> <histogram name="API.StorageAccess.AutograntViaFedCm" - enum="AutograntViaFedCmOutcome" expires_after="2025-12-28"> + enum="AutograntViaFedCmOutcome" expires_after="2026-03-01"> <owner>cfredric@chromium.org</owner> <owner>yigu@chromium.org</owner> <summary> @@ -227,7 +227,7 @@ </histogram> <histogram name="API.TopLevelStorageAccess.RequestStorageAccessFor2" - enum="RequestStorageResult" expires_after="2025-12-28"> + enum="RequestStorageResult" expires_after="2026-03-01"> <owner>cfredric@chromium.org</owner> <owner>mreichhoff@chromium.org</owner> <summary> @@ -832,7 +832,7 @@ </histogram> <histogram name="Storage.Blob.FileReaderLoader.FailureType2" - enum="FileReaderLoaderFailureType" expires_after="2025-12-28"> + enum="FileReaderLoaderFailureType" expires_after="2026-03-01"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -846,7 +846,7 @@ </histogram> <histogram name="Storage.Blob.FileReaderLoader.ReadError2" enum="NetErrorCodes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/structured_metrics/histograms.xml b/tools/metrics/histograms/metadata/structured_metrics/histograms.xml index e009726f..f456d62e 100644 --- a/tools/metrics/histograms/metadata/structured_metrics/histograms.xml +++ b/tools/metrics/histograms/metadata/structured_metrics/histograms.xml
@@ -22,7 +22,7 @@ </histogram> <histogram name="StructuredMetrics.ExternalMetricsDropped2.{Project}" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>andrewbregger@google.com</owner> <owner>troywang@google.com</owner> <owner>chromeos-data-eng@google.com</owner> @@ -53,7 +53,7 @@ </histogram> <histogram name="StructuredMetrics.ExternalMetricsProduced2.{Project}" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>andrewbregger@google.com</owner> <owner>troywang@google.com</owner> <owner>chromeos-data-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml index a7684ed..e5f190c 100644 --- a/tools/metrics/histograms/metadata/sync/histograms.xml +++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -618,7 +618,7 @@ </histogram> <histogram name="Sync.ConfigureTime_{ConfigurationType}.{Result}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>treib@chromium.org</owner> <owner>src/components/sync/OWNERS</owner> <summary> @@ -740,7 +740,7 @@ </histogram> <histogram name="Sync.CustomSync3" enum="SyncDataTypes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -1137,7 +1137,7 @@ </histogram> <histogram name="Sync.EntitySizeOnCommit.Entity.WithMetadata{SyncDataType}" - units="bytes" expires_after="2025-12-28"> + units="bytes" expires_after="2026-03-01"> <owner>ankushkush@google.com</owner> <owner>treib@chromium.org</owner> <summary> @@ -1279,7 +1279,7 @@ </histogram> <histogram name="Sync.InitialState2" enum="SyncInitialState" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -1354,7 +1354,7 @@ </histogram> <histogram name="Sync.Local.ReadPlatformFileError" enum="PlatformFileError" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>igorruvinov@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -1479,7 +1479,7 @@ </histogram> <histogram name="Sync.PassphraseType" enum="SyncPassphraseType" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary>The active sync passphrase type at sync startup.</summary> @@ -1535,7 +1535,7 @@ </histogram> <histogram name="Sync.PassphraseTypeUponNotMyBirthdayOrEncryptionObsolete" - enum="SyncPassphraseType" expires_after="2025-12-28"> + enum="SyncPassphraseType" expires_after="2026-03-01"> <owner>mastiz@chromium.org</owner> <owner>mmoskvitin@google.com</owner> <summary> @@ -1920,7 +1920,7 @@ </histogram> <histogram name="Sync.SharingMessage.CommitResult" - enum="SyncSharingMessageCommitErrorCode" expires_after="2025-12-28"> + enum="SyncSharingMessageCommitErrorCode" expires_after="2026-03-01"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <summary> @@ -2051,7 +2051,7 @@ </histogram> <histogram name="Sync.SyncEverything2" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -2247,7 +2247,7 @@ </histogram> <histogram name="Sync.TrustedVaultErrorShownOnFirstTimeSync2" enum="Boolean" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mmoskvitin@google.com</owner> <owner>mastiz@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml index 377a770..1a8f67f 100644 --- a/tools/metrics/histograms/metadata/tab/histograms.xml +++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -249,7 +249,7 @@ </histogram> <histogram name="Discarding.ReclaimArrivalLatency" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>kalutes@chromium.org</owner> <owner>kawasin@chromium.org</owner> <owner>vovoy@chromium.org</owner> @@ -351,7 +351,7 @@ <token key="TabContextMenuCommand" variants="TabContextMenuCommand"/> </histogram> -<histogram name="Tab.Count.Guest" units="units" expires_after="2025-12-28"> +<histogram name="Tab.Count.Guest" units="units" expires_after="2026-03-01"> <owner>rhalavati@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -367,7 +367,7 @@ </summary> </histogram> -<histogram name="Tab.Count.Incognito" units="units" expires_after="2025-12-28"> +<histogram name="Tab.Count.Incognito" units="units" expires_after="2026-03-01"> <owner>rhalavati@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -718,7 +718,7 @@ </histogram> <histogram name="Tab.PerceivedRestoreTime" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ckitagawa@chromium.org</owner> <owner>dtrainor@chromium.org</owner> <owner>yfriedman@chromium.org</owner> @@ -732,7 +732,7 @@ </histogram> <histogram name="Tab.Preview.TimeToStoreAfterTabSwitch" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dfried@chromium.org</owner> <owner>collinbaker@chromium.org</owner> <summary> @@ -771,7 +771,7 @@ </histogram> <histogram name="Tab.RendererTermination.AliveRenderersCount" units="renderers" - expires_after="2025-12-30"> + expires_after="2026-03-01"> <owner>justincohen@chromium.org</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -843,7 +843,7 @@ </histogram> <histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ckitagawa@chromium.org</owner> <owner>marq@chromium.org</owner> <summary> @@ -1258,8 +1258,8 @@ </histogram> <histogram name="TabGroups.Shared.LoadFromDiskResult" - enum="SharedTabGroupDataLoadFromDiskResult" expires_after="2025-10-10"> - <owner>rushans@google.com</owner> + enum="SharedTabGroupDataLoadFromDiskResult" expires_after="2026-10-10"> + <owner>shaktisahu@chromium.org</owner> <owner>chrome-multiplayer-eng@google.com</owner> <summary> Records the result of loading a SharedTabGroupData entry from disk. Recorded @@ -1848,7 +1848,7 @@ </histogram> <histogram name="TabGroups.TabsPerGroupCountAtStartup" units="tabs" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>gambard@chromium.org</owner> <owner>chromeleon@google.com</owner> <summary>[iOS] The number of tabs per group at cold launch.</summary> @@ -2296,7 +2296,7 @@ </histogram> <histogram name="Tabs.FreezeAndAppendPendingNavigationResult" - enum="BooleanSuccess" expires_after="2025-12-28"> + enum="BooleanSuccess" expires_after="2026-03-01"> <owner>ckitagawa@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -2813,7 +2813,7 @@ </histogram> <histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sonnyrao@chromium.org</owner> <owner>jamescook@chromium.org</owner> <summary> @@ -2824,7 +2824,7 @@ </histogram> <histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>sonnyrao@chromium.org</owner> <owner>jamescook@chromium.org</owner> <summary> @@ -2960,7 +2960,7 @@ </histogram> <histogram name="Tabs.Startup.TabCount2.{TabModelSelectorType}.DuplicateTabIds" - units="count" expires_after="2025-12-28"> + units="count" expires_after="2026-03-01"> <owner>wylieb@google.com</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -3079,7 +3079,7 @@ </summary> </histogram> -<histogram name="Tabs.TabCountPerLoad" units="tabs" expires_after="2025-12-28"> +<histogram name="Tabs.TabCountPerLoad" units="tabs" expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <owner>sbirch@google.com</owner> @@ -3097,7 +3097,7 @@ </histogram> <histogram name="Tabs.TabCountPerWindow" units="tabs" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -3742,7 +3742,7 @@ </histogram> <histogram name="Tabs.Tasks.OrderValidOnStartup" enum="Boolean" - expires_after="2025-12-08"> + expires_after="2026-03-01"> <owner>ckitagawa@chromium.org</owner> <owner>clank-tab-dev@chromium.org</owner> <summary> @@ -3805,7 +3805,7 @@ <token key="BatteryState" variants="BatteryState"/> </histogram> -<histogram name="Tabs.WindowWidth" units="DIPs" expires_after="2025-12-28"> +<histogram name="Tabs.WindowWidth" units="DIPs" expires_after="2026-03-01"> <owner>collinbaker@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -3947,7 +3947,7 @@ </histogram> <histogram name="TabStrip.TabCountOnPageLoad" units="tabs" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>yusufo@chromium.org</owner> <owner>wychen@chromium.org</owner> <summary> @@ -3959,7 +3959,7 @@ </histogram> <histogram name="TabStrip.TimeToCreateNewTabFromPress" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>robliao@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/toasts/histograms.xml b/tools/metrics/histograms/metadata/toasts/histograms.xml index 9ae67b7e..c952a223c 100644 --- a/tools/metrics/histograms/metadata/toasts/histograms.xml +++ b/tools/metrics/histograms/metadata/toasts/histograms.xml
@@ -32,7 +32,7 @@ </histogram> <histogram name="Toast.TriggeredToShow" enum="ToastId" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>agale@chromium.org</owner> <owner>stluong@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/translate/histograms.xml b/tools/metrics/histograms/metadata/translate/histograms.xml index beabe6a9..8cbf631f 100644 --- a/tools/metrics/histograms/metadata/translate/histograms.xml +++ b/tools/metrics/histograms/metadata/translate/histograms.xml
@@ -176,7 +176,7 @@ </histogram> <histogram name="Translate.CompactInfobar.Event" enum="TranslateCompactUIEvent" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary>Various user actions performed in the translate infobar.</summary> @@ -396,7 +396,7 @@ </histogram> <histogram name="Translate.PageLoad.HrefHint.TriggerDecision" - enum="TranslateTriggerDecision" expires_after="2025-12-28"> + enum="TranslateTriggerDecision" expires_after="2026-03-01"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -661,7 +661,7 @@ </histogram> <histogram name="Translate.Translation.ShowErrorUI" enum="TranslateError" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -741,7 +741,7 @@ </histogram> <histogram name="Translate.Translation.TimeToLoad" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -753,7 +753,7 @@ </histogram> <histogram name="Translate.Translation.TimeToTranslate" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -778,7 +778,7 @@ </histogram> <histogram name="Translate.UiInteraction.Event" enum="TranslateUIInteraction" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -792,7 +792,7 @@ </histogram> <histogram name="TranslateModelService.LanguageDetectionModel.WasLoaded" - enum="BooleanLoaded" expires_after="2025-12-28"> + enum="BooleanLoaded" expires_after="2026-03-01"> <owner>mcrouse@chromium.org</owner> <owner>chrome-language@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ui/histograms.xml b/tools/metrics/histograms/metadata/ui/histograms.xml index 023d9896e..b0034c2 100644 --- a/tools/metrics/histograms/metadata/ui/histograms.xml +++ b/tools/metrics/histograms/metadata/ui/histograms.xml
@@ -223,7 +223,7 @@ </histogram> <histogram name="ContextMenu.Shown{Type}" enum="BooleanPresent" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mpearson@chromium.org</owner> <owner>twellington@chromium.org</owner> <owner>clank-app-team@google.com</owner> @@ -584,7 +584,7 @@ </histogram> <histogram name="WebUI.Settings.PathVisited" enum="WebUISettingsPathHashes" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>dschuyler@chromium.org</owner> <owner>tbuckley@chromium.org</owner> <owner>bettes@chromium.org</owner> @@ -787,14 +787,14 @@ </histogram> <histogram name="WrenchMenu.MenuAction" enum="WrenchMenuAction" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ainslie@chromium.org</owner> <owner>edwardjung@chromium.org</owner> <summary>Number of times that each menu item is clicked.</summary> </histogram> <histogram name="WrenchMenu.TimeToAction.{Action}" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>ainslie@chromium.org</owner> <owner>edwardjung@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/update_engine/histograms.xml b/tools/metrics/histograms/metadata/update_engine/histograms.xml index 2cc49d7..7552a81 100644 --- a/tools/metrics/histograms/metadata/update_engine/histograms.xml +++ b/tools/metrics/histograms/metadata/update_engine/histograms.xml
@@ -224,7 +224,7 @@ </histogram> <histogram name="UpdateEngine.CertificateCheck.Download" - enum="UpdateEngineCertificateCheckStatus" expires_after="2025-12-31"> + enum="UpdateEngineCertificateCheckStatus" expires_after="2026-03-01"> <owner>kimjae@chromium.org</owner> <owner>chromeos-core-services@google.com</owner> <summary> @@ -268,7 +268,7 @@ </histogram> <histogram name="UpdateEngine.Check.Reaction" enum="UpdateEngineCheckReaction" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>kimjae@chromium.org</owner> <owner>chromeos-core-services@google.com</owner> <summary> @@ -319,7 +319,7 @@ </histogram> <histogram name="UpdateEngine.Check.TargetVersion" - enum="UpdateEngineChromeOsVersionPrefix" expires_after="2025-12-31"> + enum="UpdateEngineChromeOsVersionPrefix" expires_after="2026-03-01"> <owner>mpolzer@google.com</owner> <owner>chromeos-commercial-remote-management@google.com</owner> <summary> @@ -450,7 +450,7 @@ </histogram> <histogram name="UpdateEngine.FailedUpdateCount" units="count" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>kimjae@chromium.org</owner> <owner>chromeos-core-services@google.com</owner> <summary> @@ -547,7 +547,7 @@ </histogram> <histogram name="UpdateEngine.SuccessfulUpdate.DownloadSourcesUsed" - enum="UpdateEngineDownloadSources" expires_after="2025-12-31"> + enum="UpdateEngineDownloadSources" expires_after="2026-03-01"> <owner>kimjae@chromium.org</owner> <owner>chromeos-core-services@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml index cef9cf8e..75e775e 100644 --- a/tools/metrics/histograms/metadata/v8/histograms.xml +++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -689,7 +689,7 @@ </histogram> <histogram name="V8.GC.Cycle{Priority}.Full.Mark{Heap}" units="ms" - expires_after="M144"> + expires_after="2026-03-01"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -729,7 +729,7 @@ </histogram> <histogram name="V8.GC.Cycle{Priority}.Full.Weak{Heap}" units="ms" - expires_after="M144"> + expires_after="2026-03-01"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -1345,7 +1345,7 @@ </histogram> <histogram name="V8.GCIncrementalMarkingReason" enum="GarbageCollectionReason" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>mlippautz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary>Reason an incremental marking was started in V8.</summary>
diff --git a/tools/metrics/histograms/metadata/variations/histograms.xml b/tools/metrics/histograms/metadata/variations/histograms.xml index e5aab35..9821165 100644 --- a/tools/metrics/histograms/metadata/variations/histograms.xml +++ b/tools/metrics/histograms/metadata/variations/histograms.xml
@@ -338,7 +338,7 @@ </histogram> <histogram name="Variations.LoadSeedSignature" enum="VariationSeedSignature" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/web_apk/histograms.xml b/tools/metrics/histograms/metadata/web_apk/histograms.xml index 8fc1ca12..7fa9525c 100644 --- a/tools/metrics/histograms/metadata/web_apk/histograms.xml +++ b/tools/metrics/histograms/metadata/web_apk/histograms.xml
@@ -196,7 +196,7 @@ </histogram> <histogram name="WebApk.Session.TotalDuration3{WebApkDistributorType}" - units="ms" expires_after="2025-12-28"> + units="ms" expires_after="2026-03-01"> <owner>hartmanng@chromium.org</owner> <owner>src/chrome/android/webapk/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_audio/histograms.xml b/tools/metrics/histograms/metadata/web_audio/histograms.xml index cbb57af..c666711 100644 --- a/tools/metrics/histograms/metadata/web_audio/histograms.xml +++ b/tools/metrics/histograms/metadata/web_audio/histograms.xml
@@ -87,7 +87,7 @@ </histogram> <histogram name="WebAudio.AudioBuffer.NumberOfChannels" units="units" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -98,7 +98,7 @@ </histogram> <histogram name="WebAudio.AudioBuffer.SampleRate384kHz" units="Hz" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -109,7 +109,7 @@ </histogram> <histogram name="WebAudio.AudioBuffer.SampleRateRatio384kHz" units="units" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -121,7 +121,7 @@ </histogram> <histogram name="WebAudio.AudioContext.AudibleTime" units="s" - expires_after="2025-11-16"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -133,7 +133,7 @@ </histogram> <histogram name="WebAudio.AudioContext.ConcurrentAudioContexts" units="count" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -157,7 +157,7 @@ </histogram> <histogram name="WebAudio.AudioContext.DestroyedWithoutClose" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -171,7 +171,7 @@ </histogram> <histogram name="WebAudio.AudioContext.HardwareSampleRate" units="Hz" - expires_after="2025-12-07"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -208,7 +208,7 @@ </histogram> <histogram name="WebAudio.AudioContext.MaxChannelsAvailable" units="units" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -246,7 +246,7 @@ </histogram> <histogram name="WebAudio.AudioContextOptions.sampleRate" units="Hz" - expires_after="2025-12-07"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -270,7 +270,7 @@ </histogram> <histogram name="WebAudio.AudioDestination.CallbackBufferSize" units="units" - expires_after="2025-12-07"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -283,7 +283,7 @@ </histogram> <histogram name="WebAudio.AudioDestination.HardwareBufferSize" units="units" - expires_after="2025-12-07"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -416,7 +416,7 @@ </histogram> <histogram name="WebAudio.AudioNode.ProcessTimeRatio.{NodeTag}" units="%" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -454,7 +454,7 @@ </histogram> <histogram name="WebAudio.Autoplay" enum="WebAudioAutoplayStatus" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -466,7 +466,7 @@ </histogram> <histogram name="WebAudio.Autoplay.CrossOrigin" enum="WebAudioAutoplayStatus" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -488,7 +488,7 @@ </histogram> <histogram name="WebAudio.BiquadFilter.Type" enum="BiquadFilterType" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -512,7 +512,7 @@ </histogram> <histogram name="WebAudio.IIRFilterNode.Order" units="units" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -536,7 +536,7 @@ </histogram> <histogram name="WebAudio.PannerNode.PanningModel" enum="PanningModelType" - expires_after="2025-12-01"> + expires_after="2026-03-01"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml index 68ef6ae..96414ef 100644 --- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml +++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -1228,7 +1228,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.AddIceCandidate" - enum="AddIceCandidateResult" expires_after="2025-12-28"> + enum="AddIceCandidateResult" expires_after="2026-03-01"> <owner>hta@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -1487,7 +1487,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.RestrictedCandidates.MungeAllowed" - enum="Boolean" expires_after="2025-12-31"> + enum="Boolean" expires_after="2026-03-01"> <owner>hta@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <owner>tov@chromium.org</owner> @@ -1549,7 +1549,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.SdpMunging.Outcome" - enum="SdpMungingOutcome" expires_after="2025-12-31"> + enum="SdpMungingOutcome" expires_after="2026-03-01"> <owner>hta@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -1560,7 +1560,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.SdpMunging.SdpOutcome.{Outcome}" - enum="SdpMungingType" expires_after="2025-12-31"> + enum="SdpMungingType" expires_after="2026-03-01"> <owner>hta@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/webapps/histograms.xml b/tools/metrics/histograms/metadata/webapps/histograms.xml index cbbd4507..6c7eb96a 100644 --- a/tools/metrics/histograms/metadata/webapps/histograms.xml +++ b/tools/metrics/histograms/metadata/webapps/histograms.xml
@@ -708,7 +708,7 @@ </histogram> <histogram name="WebApp.Engagement{Context}.{Container}" - enum="SiteEngagementServiceEngagementType" expires_after="2025-12-28"> + enum="SiteEngagementServiceEngagementType" expires_after="2026-03-01"> <owner>dmurph@chromium.org</owner> <owner>pwa-team@google.com</owner> <summary> @@ -2727,7 +2727,7 @@ </histogram> <histogram name="Webapp.WebAppUrlLoaderPrepareForLoadResult" - enum="WebAppUrlLoaderResult" expires_after="2025-12-28"> + enum="WebAppUrlLoaderResult" expires_after="2026-03-01"> <owner>dmurph@chromium.org</owner> <owner>pwa-team@google.com</owner> <summary>Records the result of WebAppUrlLoader::PrepareForLoad().</summary>
diff --git a/tools/metrics/histograms/metadata/webauthn/histograms.xml b/tools/metrics/histograms/metadata/webauthn/histograms.xml index d747195..052dbf3 100644 --- a/tools/metrics/histograms/metadata/webauthn/histograms.xml +++ b/tools/metrics/histograms/metadata/webauthn/histograms.xml
@@ -33,7 +33,7 @@ </histogram> <histogram name="WebAuthentication.Android.CredManConditionalRequest" - enum="CredManGetRequestEnum" expires_after="2025-12-28"> + enum="CredManGetRequestEnum" expires_after="2026-03-01"> <owner>derinel@google.com</owner> <owner>kenrb@chromium.org</owner> <summary> @@ -43,7 +43,7 @@ </histogram> <histogram name="WebAuthentication.Android.CredManCreateRequest" - enum="CredManCreateRequestEnum" expires_after="2025-12-28"> + enum="CredManCreateRequestEnum" expires_after="2026-03-01"> <owner>derinel@google.com</owner> <owner>kenrb@chromium.org</owner> <summary> @@ -113,7 +113,7 @@ </histogram> <histogram name="WebAuthentication.CableV2.TunnelEvent" - enum="WebAuthenticationCableV2TunnelEvent" expires_after="2025-12-31"> + enum="WebAuthenticationCableV2TunnelEvent" expires_after="2026-03-01"> <owner>agl@chromium.org</owner> <owner>martinkr@google.com</owner> <summary> @@ -309,14 +309,14 @@ </histogram> <histogram name="WebAuthentication.GetAssertion.Result" - enum="WebAuthenticationCredentialRequestResult" expires_after="2025-12-28"> + enum="WebAuthenticationCredentialRequestResult" expires_after="2026-03-01"> <owner>nsatragno@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary>Records the result of a get assertion request.</summary> </histogram> <histogram name="WebAuthentication.GetAssertionRequestTransport" - enum="WebAuthenticationFidoTransport" expires_after="2025-12-28"> + enum="WebAuthenticationFidoTransport" expires_after="2026-03-01"> <owner>kenrb@chromium.org</owner> <owner>martinkr@google.com</owner> <summary> @@ -327,7 +327,7 @@ </histogram> <histogram name="WebAuthentication.GetAssertionResponseTransport" - enum="WebAuthenticationFidoTransport" expires_after="2025-12-28"> + enum="WebAuthenticationFidoTransport" expires_after="2026-03-01"> <owner>kenrb@chromium.org</owner> <owner>martinkr@google.com</owner> <summary> @@ -401,7 +401,7 @@ <histogram name="WebAuthentication.MacOS.GetAssertion.LargeBlobSucceeded.{Operation}" - enum="Boolean" expires_after="2025-12-31"> + enum="Boolean" expires_after="2026-03-01"> <owner>kenrb@chromium.org</owner> <owner>nsatragno@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/windows/histograms.xml b/tools/metrics/histograms/metadata/windows/histograms.xml index f73db24..9e671c5c 100644 --- a/tools/metrics/histograms/metadata/windows/histograms.xml +++ b/tools/metrics/histograms/metadata/windows/histograms.xml
@@ -166,7 +166,7 @@ </histogram> <histogram name="Windows.InstallerDownloader.DestinationMatches" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>koretadaniel@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -176,7 +176,7 @@ </histogram> <histogram name="Windows.InstallerDownloader.DownloadSucceed" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>koretadaniel@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -187,7 +187,7 @@ </histogram> <histogram name="Windows.InstallerDownloader.InfobarShown" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>koretadaniel@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -198,7 +198,7 @@ </histogram> <histogram name="Windows.InstallerDownloader.RequestAccepted" enum="Boolean" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>koretadaniel@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -235,7 +235,7 @@ </histogram> <histogram name="Windows.OneDriveSyncState.{SyncedState}" enum="BooleanEnabled" - expires_after="2025-12-31"> + expires_after="2026-03-01"> <owner>koretadaniel@chromium.org</owner> <owner>iclelland@chromium.org</owner> <summary> @@ -396,7 +396,7 @@ </histogram> <histogram name="Windows.TimeInSelectFileDialog" units="ms" - expires_after="2025-12-28"> + expires_after="2026-03-01"> <owner>fdoray@chromium.org</owner> <owner>pmonette@chromium.org</owner> <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index c05e9cc..8f1ccb0 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -17,12 +17,12 @@ "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/881ad50c05049ca13d4b34e4f92f4167de5ac52a/trace_processor_shell" }, "mac_arm64": { - "hash": "efcaf0c731d241a3d5dca8acac662cad87c8ba66", - "full_remote_path": "perfetto-luci-artifacts/de0ede0cf3ffb20fec4108c0df17d0ee473bc4c2/mac-arm64/trace_processor_shell" + "hash": "441290c3f23d12c619d0bbe82c0ea88b02c10d56", + "full_remote_path": "perfetto-luci-artifacts/d17b40b3b5e36f3744f1d010fe3ba2d3c55559c0/mac-arm64/trace_processor_shell" }, "linux": { "hash": "bcb0bf8bc8af7c097b0389189bbb3c6cd7d5fc3e", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/b4a0cf9ed523f19da6e5eaeeeb47126e8e64837c/trace_processor_shell" + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/9e99848ef108842c9c6f1fefe5bf8d4fd44c8496/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 1e25d5b5..b2b9595 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -218,6 +218,7 @@ crbug.com/815193 [ android ] rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html [ Skip ] crbug.com/873011 [ android-webview ] rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html [ Skip ] crbug.com/1228228 [ android-webview ] rasterize_and_record_micro.top_25/file://static_top_25/gmail.html [ Skip ] +crbug.com/441684585 [ android-pixel-6-pro ] rasterize_and_record_micro.top_25/file://static_top_25/youtube.html [ Skip ] # Benchmark: speedometer2 crbug.com/1452148 [ chromeos-board-eve ] speedometer2/Speedometer2 [ Skip ]
diff --git a/tools/rust/build_rust.py b/tools/rust/build_rust.py index 983cf36..aa6dc4a 100755 --- a/tools/rust/build_rust.py +++ b/tools/rust/build_rust.py
@@ -60,7 +60,10 @@ GitRevert, LLVM_DIR, IsGitAncestorToHead, LLVM_BUILD_TOOLS_DIR, RunCommand) from update import (CHROMIUM_DIR, DownloadAndUnpack, EnsureDirExists, - GetDefaultHostOs, RmTree, WriteStampFile, UpdatePackage) + GetDefaultHostOs, RmTree, ReadStampFile, WriteStampFile, + UpdatePackage, STAMP_FILENAME as LLVM_STAMP_FILENAME, + FORCE_HEAD_REVISION_FILENAME as + LLVM_FORCE_HEAD_REVISION_FILENAME) from update_rust import (RUST_REVISION, RUST_TOOLCHAIN_OUT_DIR, STAGE0_JSON_SHA256, THIRD_PARTY_DIR, VERSION_SRC_PATH, @@ -508,17 +511,33 @@ return args -def MakeVersionStamp(git_hash): +def MakeVersionStamp(rust_hash, rust_force_head_revision, + llvm_force_head_revision): # We must generate a version stamp that contains the full version of the # built Rust compiler: # * The version number returned from `rustc --version`. - # * The git hash. - # * The chromium revision name of the compiler build, which includes the - # associated clang/llvm version. + # * The git hash of rust. + # * The chromium package version tag, which includes the + # associated clang/llvm version as well as the rust subrevision. with open(RUST_SRC_VERSION_FILE_PATH) as version_file: rust_version = version_file.readline().rstrip() - return (f'rustc {rust_version} {git_hash}' - f' ({GetRustClangRevision()} chromium)\n') + + # Compute the package version. + # If we're building from head we need to construct our own package version + # because it won't match the one in update.py + if rust_force_head_revision or llvm_force_head_revision: + if llvm_force_head_revision: + llvm_stamp_file = os.path.join(RUST_HOST_LLVM_BUILD_DIR, '..', + LLVM_FORCE_HEAD_REVISION_FILENAME) + else: + llvm_stamp_file = os.path.join(RUST_HOST_LLVM_BUILD_DIR, + LLVM_STAMP_FILENAME) + package_version = f'{rust_hash}-0-{ReadStampFile(llvm_stamp_file)}' + else: + package_version = GetRustClangRevision() + + return (f'rustc {rust_version} {rust_hash}' + f' ({package_version} chromium)\n') def GetLatestRustCommit(): @@ -893,8 +912,10 @@ xpy.run('install', xpy_args + []) - WriteStampFile(MakeVersionStamp(checkout_revision), VERSION_SRC_PATH, - args.preserve_gcs_signature) + WriteStampFile( + MakeVersionStamp(checkout_revision, args.rust_force_head_revision, + args.llvm_force_head_revision), VERSION_SRC_PATH, + args.preserve_gcs_signature) # The Rust stdlib deps are vendored to rust-src/library/vendor, and later # the x.py install process copies all subdirs of rust-src/library to the
diff --git a/tools/rust/update_rust.py b/tools/rust/update_rust.py index 103de9d9..06cf6951 100755 --- a/tools/rust/update_rust.py +++ b/tools/rust/update_rust.py
@@ -82,26 +82,38 @@ def main(): - parser = argparse.ArgumentParser(description='Update Rust package') + parser = argparse.ArgumentParser( + description='Update Rust package', + formatter_class=argparse.RawTextHelpFormatter) parser.add_argument( - '--print-rust-revision', - action='store_true', - help='Print Rust revision (without Clang revision) and ' - 'quit. Can be run outside of a Chromium checkout.') + '--print-revision', + choices=['rust', 'installed', 'validate'], + help='Print the rust revision then quit. Possible formats:\n' + '- rust: print only the expected rust revision (without clang).\n' + ' Can be run outside of a Chromium checkout.\n' + '- installed: print the installed package version (including both\n' + ' rust and clang revisions), without checking that it matches the\n' + ' expected version in this file.\n' + '- validate: print the expected package version, and ensure it\n' + ' matches the installed package.') + parser.add_argument('--output-dir', help='Where to extract the package.') + # TODO(crbug.com/407563488): Remove this argument once all uses are removed parser.add_argument('--print-package-version', action='store_true', - help='Print Rust package version (including both the ' - 'Rust and Clang revisions) and quit.') - parser.add_argument('--output-dir', help='Where to extract the package.') + help='Deprecated and will be removed in the future.\n' + 'Use `--print-revision validate` instead.') args = parser.parse_args() - if args.print_rust_revision: + if args.print_package_version: + args.print_revision = 'validate' + + if args.print_revision == 'rust': print(f'{RUST_REVISION}-{RUST_SUB_REVISION}') return 0 - - if args.print_package_version: + elif args.print_revision: stamp_version = GetStampVersion() - if stamp_version != GetRustClangRevision(): + if (args.print_revision == 'validate' + and stamp_version != GetRustClangRevision()): print(f'The expected Rust version is {GetRustClangRevision()} ' f'but the actual version is {stamp_version}') print('Did you run "gclient sync"?')
diff --git a/tools/traffic_annotation/scripts/auditor/auditor.py b/tools/traffic_annotation/scripts/auditor/auditor.py index d1260c5..927c7d2 100755 --- a/tools/traffic_annotation/scripts/auditor/auditor.py +++ b/tools/traffic_annotation/scripts/auditor/auditor.py
@@ -1819,7 +1819,6 @@ self.path_filters, self.skip_compdb) errors = [] - errors.extend(self.auditor.parse_extractor_output(all_annotations)) # If we already have errors from parsing annotations, report them. Otherwise @@ -1875,6 +1874,9 @@ 'pyproto/chrome/browser/privacy/traffic_annotation_pb2.py')) return src_proto_mtime > build_proto_mtime +def is_cog() -> bool: + """Returns true if the script is running inside a Cog workspace.""" + return SRC_DIR.as_posix().startswith('/google/cog/cloud') if __name__ == "__main__": args_parser = argparse.ArgumentParser( @@ -1940,6 +1942,12 @@ args = args_parser.parse_args() build_path = Path(args.build_path) + # Check if in cog - if so, fail early. + if is_cog(): + print("This script must not be run from cog workspaces.") + print("Note that running this script from Cider-G is not supported.") + sys.exit(1) + print("Starting traffic annotation auditor. This may take a few minutes.") print("If you find a bug in this script, file bugs against the 'Enterprise>" "TrafficAnnotations' component and CC nicolaso@chromium.org.") @@ -1947,7 +1955,6 @@ args.test_only, args.limit, args.annotations_file, args.errors_file, args.skip_compdb, args.skip_stale_build_check) - try: sys.exit(auditor_ui.main()) except extractor.SourceCodeParsingError:
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index 09f7bc14..1d1841d1 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -242,7 +242,6 @@ <item id="managed_acccount_signin_restrictions_secure_connect" added_in_milestone="97" content_hash_code="0119d88f" os_list="linux,windows,chromeos,android" file_path="components/policy/core/browser/signin/user_cloud_signin_restriction_policy_fetcher.cc" /> <item id="ambient_photo_cache" added_in_milestone="98" content_hash_code="07dbf21e" os_list="chromeos" file_path="ash/ambient/ambient_photo_cache.cc" /> <item id="ambient_photo_controller" added_in_milestone="98" content_hash_code="03284b8a" os_list="chromeos" file_path="ash/ambient/ambient_weather_controller.cc" /> - <item id="image_downloader" added_in_milestone="98" content_hash_code="05b52680" os_list="chromeos" file_path="ash/assistant/assistant_controller_impl.cc" /> <item id="fast_pair_footprints_request" added_in_milestone="102" type="partial" second_id="oauth2_api_call_flow" content_hash_code="01d3d58d" os_list="chromeos" semantics_fields="1,2,3,4,5" policy_fields="-1,3,4" file_path="ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc" /> <item id="kiosk_app_icon" added_in_milestone="98" content_hash_code="04a3a6a4" os_list="chromeos" file_path="chrome/browser/ash/app_mode/web_app/kiosk_web_app_data.cc" /> <item id="arc_auth_code_fetcher" added_in_milestone="98" content_hash_code="021af0fe" os_list="chromeos" file_path="chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc" />
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml index 5f7fd20..b33ea22b 100644 --- a/tools/traffic_annotation/summary/grouping.xml +++ b/tools/traffic_annotation/summary/grouping.xml
@@ -57,7 +57,6 @@ <annotation id="fwupd_firmware_update"/> <annotation id="gaia_reauth_token_fetcher"/> <annotation id="help_content_provider"/> - <annotation id="image_downloader"/> <annotation id="ime_url_downloader"/> <annotation id="kiosk_app_icon"/> <annotation id="launcher_item_suggest"/>
diff --git a/ui/android/junit/src/org/chromium/ui/util/MotionEventUtilsTest.java b/ui/android/junit/src/org/chromium/ui/util/MotionEventUtilsTest.java index 44f4f19..d10c396 100644 --- a/ui/android/junit/src/org/chromium/ui/util/MotionEventUtilsTest.java +++ b/ui/android/junit/src/org/chromium/ui/util/MotionEventUtilsTest.java
@@ -12,15 +12,13 @@ import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.Robolectric; -import org.robolectric.android.controller.ActivityController; import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.ui.base.TestActivity; /** Unit tests for {@link MotionEventUtils}. */ @RunWith(BaseRobolectricTestRunner.class) public class MotionEventUtilsTest { + @Test public void testIsPointerEvent() { assertTrue( @@ -57,10 +55,6 @@ } private MotionEvent createEventWithSourceAndToolType(int source, int toolType) { - ActivityController<TestActivity> activityController = - Robolectric.buildActivity(TestActivity.class); - activityController.setup(); - TestActivity activity = activityController.get(); MotionEvent.PointerProperties[] properties = new MotionEvent.PointerProperties[1]; properties[0] = new MotionEvent.PointerProperties(); properties[0].id = 0;
diff --git a/ui/events/devices/BUILD.gn b/ui/events/devices/BUILD.gn index 765acaf..31e12b0 100644 --- a/ui/events/devices/BUILD.gn +++ b/ui/events/devices/BUILD.gn
@@ -65,6 +65,7 @@ "input_device_observer_ios.h", "input_device_observer_ios.mm", ] + frameworks = [ "GameController.framework" ] } defines = [ "EVENTS_DEVICES_IMPLEMENTATION" ]
diff --git a/ui/gfx/win/singleton_hwnd.cc b/ui/gfx/win/singleton_hwnd.cc index bcb00a6..478d067 100644 --- a/ui/gfx/win/singleton_hwnd.cc +++ b/ui/gfx/win/singleton_hwnd.cc
@@ -4,7 +4,7 @@ #include "ui/gfx/win/singleton_hwnd.h" -#include "base/memory/singleton.h" +#include "base/no_destructor.h" #include "base/task/current_thread.h" #include "ui/gfx/win/singleton_hwnd_observer.h" @@ -12,7 +12,8 @@ // static SingletonHwnd* SingletonHwnd::GetInstance() { - return base::Singleton<SingletonHwnd>::get(); + static base::NoDestructor<SingletonHwnd> s_hwnd; + return s_hwnd.get(); } BOOL SingletonHwnd::ProcessWindowMessage(HWND window, @@ -21,37 +22,29 @@ LPARAM lparam, LRESULT& result, DWORD msg_map_id) { - if (!base::CurrentUIThread::IsSet()) { - // If there is no MessageLoop and SingletonHwnd is receiving messages, this - // means it is receiving messages via an external message pump such as COM - // uninitialization. - // - // It is unsafe to forward these messages as observers may depend on the - // existence of a MessageLoop to proceed. - return false; + // If there is no MessageLoop and SingletonHwnd is receiving messages, this + // means it is receiving messages via an external message pump such as COM + // uninitialization. + // + // It is unsafe to forward these messages as observers may depend on the + // existence of a MessageLoop to proceed. + if (base::CurrentUIThread::IsSet()) { + observer_list_.Notify(&SingletonHwndObserver::OnWndProc, window, message, + wparam, lparam); } - - observer_list_.Notify(&SingletonHwndObserver::OnWndProc, window, message, - wparam, lparam); return false; } SingletonHwnd::SingletonHwnd() { - if (!base::CurrentUIThread::IsSet()) { - // Creating this window in (e.g.) a renderer inhibits shutdown on - // Windows. See http://crbug.com/230122 and http://crbug.com/236039. - return; + // Creating this window in (e.g.) a renderer inhibits Windows shutdown. See + // http://crbug.com/40312501 and http://crbug.com/40315446. + if (base::CurrentUIThread::IsSet()) { + WindowImpl::Init(NULL, Rect()); } - WindowImpl::Init(NULL, Rect()); } SingletonHwnd::~SingletonHwnd() { - // WindowImpl will clean up the hwnd value on WM_NCDESTROY. - if (hwnd()) - DestroyWindow(hwnd()); - - // Tell all of our current observers to clean themselves up. - observer_list_.Notify(&SingletonHwndObserver::ClearWndProc); + NOTREACHED(); // Never destroyed. } void SingletonHwnd::AddObserver(SingletonHwndObserver* observer) {
diff --git a/ui/gfx/win/singleton_hwnd.h b/ui/gfx/win/singleton_hwnd.h index 33e74e1..eceae7d 100644 --- a/ui/gfx/win/singleton_hwnd.h +++ b/ui/gfx/win/singleton_hwnd.h
@@ -12,7 +12,8 @@ #include "ui/gfx/win/window_impl.h" namespace base { -template<typename T> struct DefaultSingletonTraits; +template <typename T> +class NoDestructor; } namespace gfx { @@ -38,7 +39,7 @@ private: friend class SingletonHwndObserver; - friend struct base::DefaultSingletonTraits<SingletonHwnd>; + friend class base::NoDestructor<SingletonHwnd>; SingletonHwnd(); ~SingletonHwnd() override;
diff --git a/ui/gfx/win/singleton_hwnd_observer.cc b/ui/gfx/win/singleton_hwnd_observer.cc index 229b98a..85d4db93 100644 --- a/ui/gfx/win/singleton_hwnd_observer.cc +++ b/ui/gfx/win/singleton_hwnd_observer.cc
@@ -10,19 +10,12 @@ SingletonHwndObserver::SingletonHwndObserver(const WndProc& wnd_proc) : wnd_proc_(wnd_proc) { - DCHECK(!wnd_proc.is_null()); + CHECK(!wnd_proc.is_null()); SingletonHwnd::GetInstance()->AddObserver(this); } SingletonHwndObserver::~SingletonHwndObserver() { - ClearWndProc(); -} - -void SingletonHwndObserver::ClearWndProc() { - if (!wnd_proc_.is_null()) { - SingletonHwnd::GetInstance()->RemoveObserver(this); - wnd_proc_.Reset(); - } + SingletonHwnd::GetInstance()->RemoveObserver(this); } void SingletonHwndObserver::OnWndProc(HWND hwnd,
diff --git a/ui/gfx/win/singleton_hwnd_observer.h b/ui/gfx/win/singleton_hwnd_observer.h index 2677d98..ca60139 100644 --- a/ui/gfx/win/singleton_hwnd_observer.h +++ b/ui/gfx/win/singleton_hwnd_observer.h
@@ -14,8 +14,6 @@ class SingletonHwnd; -// Singleton lifetime management is tricky. This observer handles the correct -// cleanup if either the SingletonHwnd or forwarded object is destroyed first. // Note that if you want to register a hot key on the SingletonHwnd, you need to // use a SingletonHwndHotKeyObserver instead for each hot key. class COMPONENT_EXPORT(GFX) SingletonHwndObserver { @@ -32,7 +30,6 @@ private: friend class SingletonHwnd; - void ClearWndProc(); void OnWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); WndProc wnd_proc_;
diff --git a/ui/linux/fallback_linux_ui.cc b/ui/linux/fallback_linux_ui.cc index a6ec960..6c56538 100644 --- a/ui/linux/fallback_linux_ui.cc +++ b/ui/linux/fallback_linux_ui.cc
@@ -7,6 +7,7 @@ #include "base/notimplemented.h" #include "base/time/time.h" #include "ui/base/ime/linux/linux_input_method_context.h" +#include "ui/base/ime/text_edit_commands.h" #include "ui/base/ui_base_switches.h" #include "ui/events/keycodes/dom/dom_keyboard_layout_map.h" #include "ui/gfx/font_render_params.h" @@ -16,7 +17,6 @@ #include "ui/linux/nav_button_provider.h" #include "ui/native_theme/native_theme.h" #include "ui/shell_dialogs/select_file_policy.h" -#include "ui/views/controls/textfield/textfield.h" namespace ui { @@ -95,7 +95,7 @@ void FallbackLinuxUi::GetInactiveSelectionFgColor(SkColor* color) const {} base::TimeDelta FallbackLinuxUi::GetCursorBlinkInterval() const { - return views::Textfield::GetCaretBlinkInterval(); + return NativeTheme::GetInstanceForNativeUi()->GetCaretBlinkInterval(); } gfx::Image FallbackLinuxUi::GetIconForContentType(
diff --git a/ui/native_theme/BUILD.gn b/ui/native_theme/BUILD.gn index 3a09571..3da69c8 100644 --- a/ui/native_theme/BUILD.gn +++ b/ui/native_theme/BUILD.gn
@@ -23,53 +23,6 @@ "overlay_scrollbar_constants.h", ] - if (is_android) { - sources += [ - "native_theme_android.cc", - "native_theme_android.h", - ] - } - - if (is_mac) { - frameworks = [ - "Accessibility.framework", - "AppKit.framework", - "CoreGraphics.framework", - "MediaAccessibility.framework", - ] - sources += [ - "caption_style_mac.mm", - "native_theme_mac.h", - "native_theme_mac.mm", - "scrollbar_animator_mac.cc", - "scrollbar_animator_mac.h", - ] - } - - if (is_ios) { - sources += [ - "native_theme_ios.h", - "native_theme_ios.mm", - ] - } - - if (is_win) { - sources += [ - "caption_style_win.cc", - "native_theme_win.cc", - "native_theme_win.h", - ] - - libs = [ "uxtheme.lib" ] - } - - if (use_aura || toolkit_views) { - sources += [ - "native_theme_aura.cc", - "native_theme_aura.h", - ] - } - defines = [ "IS_NATIVE_THEME_IMPL" ] public_deps = [ @@ -91,20 +44,62 @@ "//ui/gfx/geometry", "//ui/resources", ] + + if (is_android || is_ios) { + sources += [ + "native_theme_mobile.cc", + "native_theme_mobile.h", + ] + } + + if (is_mac) { + frameworks = [ + "Accessibility.framework", + "AppKit.framework", + "CoreGraphics.framework", + "MediaAccessibility.framework", + ] + sources += [ + "caption_style_mac.mm", + "native_theme_mac.h", + "native_theme_mac.mm", + "scrollbar_animator_mac.cc", + "scrollbar_animator_mac.h", + ] + } + + if (is_win) { + sources += [ + "caption_style_win.cc", + "native_theme_win.cc", + "native_theme_win.h", + ] + + libs = [ "uxtheme.lib" ] + } + + # Mac uses `NativeThemeAura` for the web instance. That class does not depend + # on any other Aura-specific code. + if (use_aura || is_mac) { + sources += [ + "native_theme_aura.cc", + "native_theme_aura.h", + ] + } } source_set("test_support") { testonly = true - deps = [ - ":native_theme", - "//base", - ] - sources = [ "test_native_theme.cc", "test_native_theme.h", ] + + deps = [ + ":native_theme", + "//base", + ] } test("native_theme_unittests") { @@ -116,17 +111,6 @@ "native_theme_unittest.cc", ] - if (use_aura) { - sources += [ "native_theme_aura_unittest.cc" ] - } - - if (is_win) { - sources += [ - "caption_style_win_unittest.cc", - "native_theme_win_unittest.cc", - ] - } - deps = [ ":native_theme", ":test_support", @@ -147,4 +131,15 @@ ] deps += [ "//ui/gfx:test_support" ] } + + if (is_win) { + sources += [ + "caption_style_win_unittest.cc", + "native_theme_win_unittest.cc", + ] + } + + if (use_aura) { + sources += [ "native_theme_aura_unittest.cc" ] + } }
diff --git a/ui/native_theme/native_theme.cc b/ui/native_theme/native_theme.cc index e761050..54f22e5 100644 --- a/ui/native_theme/native_theme.cc +++ b/ui/native_theme/native_theme.cc
@@ -106,10 +106,6 @@ return base_color; } -SkColor4f NativeTheme::FocusRingColorForBaseColor(SkColor4f base_color) const { - return base_color; -} - float NativeTheme::GetBorderRadiusForPart(Part part, float width, float height) const { @@ -252,16 +248,6 @@ return forced_colors_; } -NativeTheme::PlatformHighContrastColorScheme -NativeTheme::GetPlatformHighContrastColorScheme() const { - if (!InForcedColorsMode()) { - return PlatformHighContrastColorScheme::kNone; - } - return (GetPreferredColorScheme() == PreferredColorScheme::kDark) - ? PlatformHighContrastColorScheme::kDark - : PlatformHighContrastColorScheme::kLight; -} - NativeTheme::PageColors NativeTheme::GetPageColors() const { return page_colors_; }
diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h index cbe76bb..6fa1314 100644 --- a/ui/native_theme/native_theme.h +++ b/ui/native_theme/native_theme.h
@@ -147,19 +147,6 @@ kMaxValue = kCustom, }; - // IMPORTANT! - // This enum is reported in metrics. Do not reorder; add additional values at - // the end. - // - // This represents the OS-level high contrast theme. kNone unless the default - // system color scheme is kPlatformHighContrast. - enum class PlatformHighContrastColorScheme { - kNone = 0, - kDark = 1, - kLight = 2, - kMaxValue = kLight, - }; - // The color scheme used for painting the native controls. enum class ColorScheme { kDefault, @@ -495,11 +482,6 @@ // setting that triggers forced colors mode. bool InForcedColorsMode() const; - // Returns the PlatformHighContrastColorScheme used by the OS. Returns a value - // other than kNone only if the default system color scheme is - // kPlatformHighContrast. - PlatformHighContrastColorScheme GetPlatformHighContrastColorScheme() const; - // Returns true when the NativeTheme uses a light-on-dark color scheme. If // you're considering using this function to choose between two hard-coded // colors, you probably shouldn't. Instead, use ColorProvider::GetColor(). @@ -593,9 +575,6 @@ // pressed states. virtual SkColor GetSystemButtonPressedColor(SkColor base_color) const; - // Assign the focus-ring-appropriate alpha value to the provided base_color. - virtual SkColor4f FocusRingColorForBaseColor(SkColor4f base_color) const; - float AdjustBorderWidthByZoom(float border_width, float zoom_level) const; float AdjustBorderRadiusByZoom(Part part,
diff --git a/ui/native_theme/native_theme_android.cc b/ui/native_theme/native_theme_android.cc deleted file mode 100644 index 5f3696a..0000000 --- a/ui/native_theme/native_theme_android.cc +++ /dev/null
@@ -1,143 +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. - -#include "ui/native_theme/native_theme_android.h" - -#include "base/no_destructor.h" -#include "base/notreached.h" -#include "ui/gfx/geometry/size.h" - -namespace ui { - -// static -NativeTheme* NativeTheme::GetInstanceForWeb() { - return NativeThemeAndroid::instance(); -} - -NativeTheme* NativeTheme::GetInstanceForNativeUi() { - return NativeThemeAndroid::instance(); -} - -// static -NativeThemeAndroid* NativeThemeAndroid::instance() { - static base::NoDestructor<NativeThemeAndroid> s_native_theme; - return s_native_theme.get(); -} - -gfx::Size NativeThemeAndroid::GetPartSize(Part part, - State state, - const ExtraParams& extra) const { - if (part == kCheckbox || part == kRadio) { - // Define the dimensions of radio buttons and checkboxes on Android. They - // are slightly bigger than the defaults in native_theme_base.cc, to make - // touch easier on small form factor devices. - static constexpr gfx::Size kCheckboxAndRadioSize(16, 16); - return kCheckboxAndRadioSize; - } - return NativeThemeBase::GetPartSize(part, state, extra); -} - -void NativeThemeAndroid::AdjustCheckboxRadioRectForPadding(SkRect* rect) const { - // Take 1px for padding around the checkbox/radio button. - rect->setLTRB(static_cast<int>(rect->x()) + 1, - static_cast<int>(rect->y()) + 1, - static_cast<int>(rect->right()) - 1, - static_cast<int>(rect->bottom()) - 1); -} - -SkColor NativeThemeAndroid::ControlsAccentColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedAccent; - } else if (state == kDisabled) { - color_id = kDisabledAccent; - } else { - color_id = kAccent; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeAndroid::ControlsSliderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedSlider; - } else if (state == kDisabled) { - color_id = kDisabledSlider; - } else { - color_id = kSlider; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeAndroid::ControlsBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedBorder; - } else if (state == kDisabled) { - color_id = kDisabledBorder; - } else { - color_id = kBorder; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeAndroid::ButtonBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kButtonPressedBorder; - } else if (state == kDisabled) { - color_id = kButtonDisabledBorder; - } else { - color_id = kButtonBorder; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeAndroid::ControlsFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedFill; - } else if (state == kDisabled) { - color_id = kDisabledFill; - } else { - color_id = kFill; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeAndroid::ButtonFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kButtonPressedFill; - } else if (state == kDisabled) { - color_id = kButtonDisabledFill; - } else { - color_id = kButtonFill; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -NativeThemeAndroid::NativeThemeAndroid() = default; - -NativeThemeAndroid::~NativeThemeAndroid() = default; - -} // namespace ui
diff --git a/ui/native_theme/native_theme_android.h b/ui/native_theme/native_theme_android.h deleted file mode 100644 index ee7bcbc38..0000000 --- a/ui/native_theme/native_theme_android.h +++ /dev/null
@@ -1,65 +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. - -#ifndef UI_NATIVE_THEME_NATIVE_THEME_ANDROID_H_ -#define UI_NATIVE_THEME_NATIVE_THEME_ANDROID_H_ - -#include "base/no_destructor.h" -#include "ui/native_theme/native_theme_base.h" - -namespace ui { - -// Android implementation of native theme support. -class NativeThemeAndroid : public NativeThemeBase { - public: - NativeThemeAndroid(const NativeThemeAndroid&) = delete; - NativeThemeAndroid& operator=(const NativeThemeAndroid&) = delete; - - // NativeThemeBase: - gfx::Size GetPartSize(Part part, - State state, - const ExtraParams& extra) const override; - - protected: - friend class NativeTheme; - friend class base::NoDestructor<NativeThemeAndroid>; - static NativeThemeAndroid* instance(); - - // NativeThemeBase: - void AdjustCheckboxRadioRectForPadding(SkRect* rect) const override; - // TODO(crbug.com/40741411): Refine hover state behavior on available pointing - // devices. - SkColor ControlsAccentColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ControlsSliderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ButtonBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ButtonFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ControlsBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ControlsFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - - private: - NativeThemeAndroid(); - ~NativeThemeAndroid() override; -}; - -} // namespace ui - -#endif // UI_NATIVE_THEME_NATIVE_THEME_ANDROID_H_
diff --git a/ui/native_theme/native_theme_aura.cc b/ui/native_theme/native_theme_aura.cc index 44db5f8..f7e0819 100644 --- a/ui/native_theme/native_theme_aura.cc +++ b/ui/native_theme/native_theme_aura.cc
@@ -123,17 +123,6 @@ return s_native_theme_for_web.get(); } -SkColor4f NativeThemeAura::FocusRingColorForBaseColor( - SkColor4f base_color) const { -#if BUILDFLAG(IS_APPLE) - // On Mac OSX, the system Accent Color setting is darkened a bit - // for better contrast. - return SkColor4f(base_color.fR, base_color.fG, base_color.fB, 166 / 255.0f); -#else - return base_color; -#endif // BUILDFLAG(IS_APPLE) -} - void NativeThemeAura::ConfigureWebInstance() { // Add the web native theme as an observer to stay in sync with color scheme // changes.
diff --git a/ui/native_theme/native_theme_aura.h b/ui/native_theme/native_theme_aura.h index 8434f7f2..6e1a458 100644 --- a/ui/native_theme/native_theme_aura.h +++ b/ui/native_theme/native_theme_aura.h
@@ -31,7 +31,6 @@ static NativeThemeAura* web_instance(); // Overridden from NativeTheme: - SkColor4f FocusRingColorForBaseColor(SkColor4f base_color) const override; void ConfigureWebInstance() override; // NativeThemeBase:
diff --git a/ui/native_theme/native_theme_base.h b/ui/native_theme/native_theme_base.h index ea732b44..713c9275b 100644 --- a/ui/native_theme/native_theme_base.h +++ b/ui/native_theme/native_theme_base.h
@@ -281,30 +281,27 @@ State state, Part part) const; - virtual SkColor ControlsAccentColorForState( + SkColor ControlsAccentColorForState( State state, ColorScheme color_scheme, const ColorProvider* color_provider) const; - virtual SkColor ControlsSliderColorForState( + SkColor ControlsSliderColorForState( State state, ColorScheme color_scheme, const ColorProvider* color_provider) const; - virtual SkColor ButtonBorderColorForState( + SkColor ButtonBorderColorForState(State state, + ColorScheme color_scheme, + const ColorProvider* color_provider) const; + SkColor ButtonFillColorForState(State state, + ColorScheme color_scheme, + const ColorProvider* color_provider) const; + SkColor ControlsBorderColorForState( State state, ColorScheme color_scheme, const ColorProvider* color_provider) const; - virtual SkColor ButtonFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const; - virtual SkColor ControlsBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const; - virtual SkColor ControlsFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const; + SkColor ControlsFillColorForState(State state, + ColorScheme color_scheme, + const ColorProvider* color_provider) const; virtual float GetContrastRatioForState(State state, Part part) const; // Only scrollbar parts that change colors when hovered are supported. bool SupportedPartsForContrastingColor(Part part) const;
diff --git a/ui/native_theme/native_theme_ios.h b/ui/native_theme/native_theme_ios.h deleted file mode 100644 index 420f74f1..0000000 --- a/ui/native_theme/native_theme_ios.h +++ /dev/null
@@ -1,65 +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. - -#ifndef UI_NATIVE_THEME_NATIVE_THEME_IOS_H_ -#define UI_NATIVE_THEME_NATIVE_THEME_IOS_H_ - -#include "base/no_destructor.h" -#include "ui/native_theme/native_theme_base.h" - -namespace ui { - -// iOS implementation of native theme support. -class NativeThemeIOS : public NativeThemeBase { - public: - NativeThemeIOS(const NativeThemeIOS&) = delete; - NativeThemeIOS& operator=(const NativeThemeIOS&) = delete; - - // NativeThemeBase: - gfx::Size GetPartSize(Part part, - State state, - const ExtraParams& extra) const override; - - protected: - friend class NativeTheme; - friend class base::NoDestructor<NativeThemeIOS>; - static NativeThemeIOS* instance(); - - // NativeThemeBase: - void AdjustCheckboxRadioRectForPadding(SkRect* rect) const override; - // TODO(crbug.com/40741411): Refine hover state behavior on available pointing - // devices. - SkColor ControlsAccentColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ControlsSliderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ButtonBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ButtonFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ControlsBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - SkColor ControlsFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const override; - - private: - NativeThemeIOS(); - ~NativeThemeIOS() override; -}; - -} // namespace ui - -#endif // UI_NATIVE_THEME_NATIVE_THEME_IOS_H_
diff --git a/ui/native_theme/native_theme_ios.mm b/ui/native_theme/native_theme_ios.mm deleted file mode 100644 index cd81d421..0000000 --- a/ui/native_theme/native_theme_ios.mm +++ /dev/null
@@ -1,145 +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. - -#include "ui/native_theme/native_theme_ios.h" - -#include "base/no_destructor.h" -#include "base/notreached.h" -#include "ui/gfx/geometry/size.h" - -namespace ui { - -namespace { -// These are the default dimensions of radio buttons and checkboxes on Android. -const int kCheckboxAndRadioWidth = 16; -const int kCheckboxAndRadioHeight = 16; -} // namespace - -// static -NativeTheme* NativeTheme::GetInstanceForWeb() { - return NativeThemeIOS::instance(); -} - -NativeTheme* NativeTheme::GetInstanceForNativeUi() { - NOTREACHED(); -} - -// static -NativeThemeIOS* NativeThemeIOS::instance() { - static base::NoDestructor<NativeThemeIOS> s_native_theme; - return s_native_theme.get(); -} - -gfx::Size NativeThemeIOS::GetPartSize(Part part, - State state, - const ExtraParams& extra) const { - if (part == kCheckbox || part == kRadio) { - return gfx::Size(kCheckboxAndRadioWidth, kCheckboxAndRadioHeight); - } - return NativeThemeBase::GetPartSize(part, state, extra); -} - -void NativeThemeIOS::AdjustCheckboxRadioRectForPadding(SkRect* rect) const { - // Take 1px for padding around the checkbox/radio button. - rect->setLTRB(static_cast<int>(rect->x()) + 1, - static_cast<int>(rect->y()) + 1, - static_cast<int>(rect->right()) - 1, - static_cast<int>(rect->bottom()) - 1); -} - -SkColor NativeThemeIOS::ControlsAccentColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedAccent; - } else if (state == kDisabled) { - color_id = kDisabledAccent; - } else { - color_id = kAccent; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeIOS::ControlsSliderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedSlider; - } else if (state == kDisabled) { - color_id = kDisabledSlider; - } else { - color_id = kSlider; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeIOS::ControlsBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedBorder; - } else if (state == kDisabled) { - color_id = kDisabledBorder; - } else { - color_id = kBorder; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeIOS::ButtonBorderColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kButtonPressedBorder; - } else if (state == kDisabled) { - color_id = kButtonDisabledBorder; - } else { - color_id = kButtonBorder; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeIOS::ControlsFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kPressedFill; - } else if (state == kDisabled) { - color_id = kDisabledFill; - } else { - color_id = kFill; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -SkColor NativeThemeIOS::ButtonFillColorForState( - State state, - ColorScheme color_scheme, - const ColorProvider* color_provider) const { - ControlColorId color_id; - if (state == kPressed) { - color_id = kButtonPressedFill; - } else if (state == kDisabled) { - color_id = kButtonDisabledFill; - } else { - color_id = kButtonFill; - } - return GetControlColor(color_id, color_scheme, color_provider); -} - -NativeThemeIOS::NativeThemeIOS() = default; - -NativeThemeIOS::~NativeThemeIOS() = default; - -} // namespace ui
diff --git a/ui/native_theme/native_theme_mac_unittest.mm b/ui/native_theme/native_theme_mac_unittest.mm index 6a97027..4785704 100644 --- a/ui/native_theme/native_theme_mac_unittest.mm +++ b/ui/native_theme/native_theme_mac_unittest.mm
@@ -18,31 +18,6 @@ ~TestNativeThemeMac() override = default; }; -TEST(NativeThemeMacTest, GetPlatformHighContrastColorScheme) { - using PrefScheme = NativeTheme::PreferredColorScheme; - using PrefContrast = NativeTheme::PreferredContrast; - - constexpr NativeTheme::PlatformHighContrastColorScheme kNone = - NativeTheme::PlatformHighContrastColorScheme::kNone; - - NativeTheme* native_theme = NativeTheme::GetInstanceForNativeUi(); - ASSERT_TRUE(native_theme); - - native_theme->SetPreferredContrast(PrefContrast::kNoPreference); - native_theme->set_preferred_color_scheme(PrefScheme::kDark); - EXPECT_EQ(native_theme->GetPlatformHighContrastColorScheme(), kNone); - - native_theme->set_preferred_color_scheme(PrefScheme::kLight); - EXPECT_EQ(native_theme->GetPlatformHighContrastColorScheme(), kNone); - - native_theme->SetPreferredContrast(PrefContrast::kMore); - native_theme->set_preferred_color_scheme(PrefScheme::kDark); - EXPECT_EQ(native_theme->GetPlatformHighContrastColorScheme(), kNone); - - native_theme->set_preferred_color_scheme(PrefScheme::kLight); - EXPECT_EQ(native_theme->GetPlatformHighContrastColorScheme(), kNone); -} - TEST(NativeThemeMacTest, ThumbSize) { EXPECT_EQ(gfx::Size(6.0, 18.0), NativeThemeMac::GetThumbMinSize(true, 1.0)); EXPECT_EQ(gfx::Size(18.0, 6.0), NativeThemeMac::GetThumbMinSize(false, 1.0));
diff --git a/ui/native_theme/native_theme_mobile.cc b/ui/native_theme/native_theme_mobile.cc new file mode 100644 index 0000000..995c062 --- /dev/null +++ b/ui/native_theme/native_theme_mobile.cc
@@ -0,0 +1,52 @@ +// 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. + +#include "ui/native_theme/native_theme_mobile.h" + +#include "base/no_destructor.h" +#include "base/notreached.h" +#include "ui/gfx/geometry/size.h" + +namespace ui { + +// static +NativeTheme* NativeTheme::GetInstanceForWeb() { + return NativeThemeMobile::instance(); +} + +NativeTheme* NativeTheme::GetInstanceForNativeUi() { + return NativeThemeMobile::instance(); +} + +// static +NativeThemeMobile* NativeThemeMobile::instance() { + static base::NoDestructor<NativeThemeMobile> s_native_theme; + return s_native_theme.get(); +} + +gfx::Size NativeThemeMobile::GetPartSize(Part part, + State state, + const ExtraParams& extra) const { + if (part == kCheckbox || part == kRadio) { + // Radio buttons and checkboxes are slightly bigger than the defaults in + // `NativeThemeBase`, to make touch easier on small form factor devices. + static constexpr gfx::Size kCheckboxAndRadioSize(16, 16); + return kCheckboxAndRadioSize; + } + return NativeThemeBase::GetPartSize(part, state, extra); +} + +void NativeThemeMobile::AdjustCheckboxRadioRectForPadding(SkRect* rect) const { + // Take 1px for padding around the checkbox/radio button. + rect->setLTRB(static_cast<int>(rect->x()) + 1, + static_cast<int>(rect->y()) + 1, + static_cast<int>(rect->right()) - 1, + static_cast<int>(rect->bottom()) - 1); +} + +NativeThemeMobile::NativeThemeMobile() = default; + +NativeThemeMobile::~NativeThemeMobile() = default; + +} // namespace ui
diff --git a/ui/native_theme/native_theme_mobile.h b/ui/native_theme/native_theme_mobile.h new file mode 100644 index 0000000..5efa2f9 --- /dev/null +++ b/ui/native_theme/native_theme_mobile.h
@@ -0,0 +1,39 @@ +// 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. + +#ifndef UI_NATIVE_THEME_NATIVE_THEME_MOBILE_H_ +#define UI_NATIVE_THEME_NATIVE_THEME_MOBILE_H_ + +#include "base/no_destructor.h" +#include "ui/native_theme/native_theme_base.h" + +namespace ui { + +// Android implementation of native theme support. +class NativeThemeMobile : public NativeThemeBase { + public: + NativeThemeMobile(const NativeThemeMobile&) = delete; + NativeThemeMobile& operator=(const NativeThemeMobile&) = delete; + + // NativeThemeBase: + gfx::Size GetPartSize(Part part, + State state, + const ExtraParams& extra) const override; + + protected: + friend class NativeTheme; + friend class base::NoDestructor<NativeThemeMobile>; + static NativeThemeMobile* instance(); + + // NativeThemeBase: + void AdjustCheckboxRadioRectForPadding(SkRect* rect) const override; + + private: + NativeThemeMobile(); + ~NativeThemeMobile() override; +}; + +} // namespace ui + +#endif // UI_NATIVE_THEME_NATIVE_THEME_MOBILE_H_
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc index 0ca923fb..6fcc320 100644 --- a/ui/native_theme/native_theme_win.cc +++ b/ui/native_theme/native_theme_win.cc
@@ -316,11 +316,24 @@ ConfigureWebInstance(); } -#if BUILDFLAG(IS_WIN) + // Histogram high contrast state. + // NOTE: Reported in metrics; do not reorder, add additional values at end. + enum class HighContrastColorScheme { + kNone = 0, + kDark = 1, + kLight = 2, + kMaxValue = kLight, + }; + auto color_scheme = HighContrastColorScheme::kNone; + if (InForcedColorsMode()) { + color_scheme = + (GetPreferredColorScheme() == NativeTheme::PreferredColorScheme::kDark) + ? HighContrastColorScheme::kDark + : HighContrastColorScheme::kLight; + } base::UmaHistogramEnumeration("Accessibility.WinHighContrastTheme", - GetPlatformHighContrastColorScheme(), - PlatformHighContrastColorScheme::kMaxValue); -#endif + color_scheme, + HighContrastColorScheme::kMaxValue); } void NativeThemeWin::ConfigureWebInstance() {
diff --git a/ui/native_theme/native_theme_win_unittest.cc b/ui/native_theme/native_theme_win_unittest.cc index 550bef9..8225a71e 100644 --- a/ui/native_theme/native_theme_win_unittest.cc +++ b/ui/native_theme/native_theme_win_unittest.cc
@@ -87,28 +87,6 @@ EXPECT_EQ(theme.CalculatePreferredContrast(), PrefContrast::kNoPreference); } -TEST(NativeThemeWinTest, GetPlatformHighContrastColorScheme) { - using HCColorScheme = NativeTheme::PlatformHighContrastColorScheme; - - TestNativeThemeWin theme; - theme.set_forced_colors(false); - theme.set_preferred_color_scheme(PrefScheme::kDark); - EXPECT_EQ(theme.GetPlatformHighContrastColorScheme(), HCColorScheme::kNone); - - theme.set_preferred_color_scheme(PrefScheme::kLight); - EXPECT_EQ(theme.GetPlatformHighContrastColorScheme(), HCColorScheme::kNone); - - theme.set_forced_colors(true); - theme.set_preferred_color_scheme(PrefScheme::kDark); - EXPECT_EQ(theme.GetPlatformHighContrastColorScheme(), HCColorScheme::kDark); - - theme.set_preferred_color_scheme(PrefScheme::kLight); - EXPECT_EQ(theme.GetPlatformHighContrastColorScheme(), HCColorScheme::kLight); - - theme.set_forced_colors(false); - EXPECT_EQ(theme.GetPlatformHighContrastColorScheme(), HCColorScheme::kNone); -} - TEST(NativeThemeWinTest, TestColorProviderKeyColorMode) { TestNativeThemeWin theme;
diff --git a/ui/ozone/platform/drm/BUILD.gn b/ui/ozone/platform/drm/BUILD.gn index 8ac8b96..9d94262 100644 --- a/ui/ozone/platform/drm/BUILD.gn +++ b/ui/ozone/platform/drm/BUILD.gn
@@ -126,6 +126,7 @@ deps = [ "//base", "//build/config/linux/libdrm", + "//components/viz/common:shared_image_format", "//gpu/vulkan:buildflags", "//ipc", "//media:media_buildflags", @@ -222,6 +223,7 @@ deps = [ ":gbm", "//base/test:test_support", + "//components/viz/common:shared_image_format", "//skia", "//testing/gtest",
diff --git a/ui/ozone/platform/drm/gpu/DEPS b/ui/ozone/platform/drm/gpu/DEPS index 313c9c2..55dac31a 100644 --- a/ui/ozone/platform/drm/gpu/DEPS +++ b/ui/ozone/platform/drm/gpu/DEPS
@@ -8,3 +8,12 @@ # TODO remove this once AFBC works for modesetting buffers. "+third_party/libdrm/src/include/drm/drm_fourcc.h", ] + +specific_include_rules = { + "mock_drm_modifiers_filter\.(cc|h)": [ + "+components/viz/common/resources/shared_image_format.h", + ], + "hardware_display_controller.cc": [ + "+components/viz/common/resources/shared_image_format_utils.h", + ], +}
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc index 98e774d..1d8b54af 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
@@ -18,6 +18,7 @@ #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/trace_event/typed_macros.h" +#include "components/viz/common/resources/shared_image_format_utils.h" #include "third_party/libdrm/src/include/drm/drm_fourcc.h" #include "third_party/perfetto/include/perfetto/tracing/traced_value.h" #include "third_party/skia/include/core/SkCanvas.h" @@ -366,9 +367,9 @@ crtc_controllers_[0]->GetFormatModifiers(fourcc_format); if (drm_modifiers_filter_) { - gfx::BufferFormat buffer_format = - GetBufferFormatFromFourCCFormat(fourcc_format); - modifiers = drm_modifiers_filter_->Filter(buffer_format, modifiers); + viz::SharedImageFormat si_format = + GetSharedImageFormatFromFourCCFormat(fourcc_format); + modifiers = drm_modifiers_filter_->Filter(si_format, modifiers); } for (size_t i = 1; i < crtc_controllers_.size(); ++i) {
diff --git a/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.cc b/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.cc index f2a3eff..314e789 100644 --- a/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.cc +++ b/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.cc
@@ -13,7 +13,7 @@ MockDrmModifiersFilter::~MockDrmModifiersFilter() = default; std::vector<uint64_t> MockDrmModifiersFilter::Filter( - gfx::BufferFormat format, + viz::SharedImageFormat format, const std::vector<uint64_t>& modifiers) { std::vector<uint64_t> intersection; for (const auto& modifier : modifiers) {
diff --git a/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.h b/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.h index 05f4e7e0..67dcf6e 100644 --- a/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.h +++ b/ui/ozone/platform/drm/gpu/mock_drm_modifiers_filter.h
@@ -9,7 +9,7 @@ #include <vector> #include "base/containers/flat_set.h" -#include "ui/gfx/buffer_types.h" +#include "components/viz/common/resources/shared_image_format.h" #include "ui/ozone/public/drm_modifiers_filter.h" namespace ui { @@ -23,7 +23,7 @@ ~MockDrmModifiersFilter() override; - std::vector<uint64_t> Filter(gfx::BufferFormat format, + std::vector<uint64_t> Filter(viz::SharedImageFormat format, const std::vector<uint64_t>& modifiers) override; private:
diff --git a/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.cc b/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.cc index be3b54e..6d93444 100644 --- a/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.cc +++ b/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.cc
@@ -12,6 +12,7 @@ #include "base/task/single_thread_task_runner.h" #include "base/trace_event/trace_event.h" #include "base/version.h" +#include "components/viz/common/resources/shared_image_format_utils.h" #include "ui/gfx/geometry/rect_conversions.h" #include "ui/gfx/geometry/rrect_f.h" #include "ui/gfx/linux/drm_util_linux.h" @@ -351,7 +352,8 @@ auto it = supported_buffer_formats_with_modifiers_.find(buffer_format); if (it != supported_buffer_formats_with_modifiers_.end()) { if (drm_modifiers_filter_) { - return drm_modifiers_filter_->Filter(buffer_format, it->second); + return drm_modifiers_filter_->Filter( + viz::GetSharedImageFormat(buffer_format), it->second); } return it->second; }
diff --git a/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc b/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc index 5db7ef4..a03030238 100644 --- a/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc +++ b/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc
@@ -19,7 +19,7 @@ BASE_FEATURE(kWaylandWpColorManagerV1, "WaylandWpColorManagerV1", - base::FEATURE_ENABLED_BY_DEFAULT); + base::FEATURE_DISABLED_BY_DEFAULT); std::optional<wp_color_manager_v1_primaries> ColorSpaceToPrimaries( gfx::ColorSpace::PrimaryID primary_id) {
diff --git a/ui/ozone/platform/wayland/test/test_selection_device_manager.cc b/ui/ozone/platform/wayland/test/test_selection_device_manager.cc index 1c6e998..b221956 100644 --- a/ui/ozone/platform/wayland/test/test_selection_device_manager.cc +++ b/ui/ozone/platform/wayland/test/test_selection_device_manager.cc
@@ -90,7 +90,11 @@ task_runner_( base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})) {} -TestSelectionSource::~TestSelectionSource() = default; +TestSelectionSource::~TestSelectionSource() { + if (manager_) { + manager_->set_source(nullptr); + } +} void TestSelectionSource::ReadData(const std::string& mime_type, ReadDataCallback callback) { @@ -163,8 +167,10 @@ auto* src = source ? GetUserDataAs<TestSelectionSource>(source) : nullptr; self->selection_serial_ = serial; self->delegate_->HandleSetSelection(src, serial); - if (self->manager_) + if (self->manager_) { self->manager_->set_source(src); + src->set_manager(self->manager_); + } } TestSelectionDeviceManager::TestSelectionDeviceManager(
diff --git a/ui/ozone/platform/wayland/test/test_selection_device_manager.h b/ui/ozone/platform/wayland/test/test_selection_device_manager.h index dd15464..8970aaa 100644 --- a/ui/ozone/platform/wayland/test/test_selection_device_manager.h +++ b/ui/ozone/platform/wayland/test/test_selection_device_manager.h
@@ -76,7 +76,7 @@ private: const std::unique_ptr<Delegate> delegate_; raw_ptr<TestSelectionDevice> device_ = nullptr; - raw_ptr<TestSelectionSource, DanglingUntriaged> source_ = nullptr; + raw_ptr<TestSelectionSource> source_ = nullptr; }; class TestSelectionOffer : public ServerObject { @@ -132,6 +132,8 @@ void OnDndAction(uint32_t action); void OnDndDropPerformed(); + void set_manager(TestSelectionDeviceManager* manager) { manager_ = manager; } + const std::vector<std::string>& mime_types() const { return mime_types_; } // Protocol object requests: @@ -144,6 +146,7 @@ std::vector<std::string> mime_types_; const scoped_refptr<base::SequencedTaskRunner> task_runner_; + raw_ptr<TestSelectionDeviceManager> manager_ = nullptr; }; class TestSelectionDevice : public ServerObject {
diff --git a/ui/ozone/public/drm_modifiers_filter.h b/ui/ozone/public/drm_modifiers_filter.h index ee7d875..c956b32 100644 --- a/ui/ozone/public/drm_modifiers_filter.h +++ b/ui/ozone/public/drm_modifiers_filter.h
@@ -8,7 +8,10 @@ #include <vector> #include "base/component_export.h" -#include "ui/gfx/buffer_types.h" + +namespace viz { +class SharedImageFormat; +} // namespace viz namespace ui { @@ -29,7 +32,7 @@ virtual ~DrmModifiersFilter() = default; virtual std::vector<uint64_t> Filter( - gfx::BufferFormat format, + viz::SharedImageFormat format, const std::vector<uint64_t>& modifiers) = 0; };
diff --git a/ui/qt/BUILD.gn b/ui/qt/BUILD.gn index 1e39126..2b37cc66 100644 --- a/ui/qt/BUILD.gn +++ b/ui/qt/BUILD.gn
@@ -142,6 +142,7 @@ deps = [ ":qt_interface", "//base", + "//cc/paint", "//printing/buildflags", "//ui/base/ime/linux", "//ui/color", @@ -158,6 +159,8 @@ } sources = [ + "native_theme_qt.cc", + "native_theme_qt.h", "qt_ui.cc", "qt_ui.h", ]
diff --git a/ui/qt/DEPS b/ui/qt/DEPS index 5d7b954..3705cde 100644 --- a/ui/qt/DEPS +++ b/ui/qt/DEPS
@@ -1,5 +1,5 @@ include_rules = [ - "+cc/paint/paint_canvas.h", + "+cc/paint", "+chrome/browser/themes/theme_properties.h", "+printing", "+third_party/skia",
diff --git a/ui/qt/native_theme_qt.cc b/ui/qt/native_theme_qt.cc new file mode 100644 index 0000000..42680cdd --- /dev/null +++ b/ui/qt/native_theme_qt.cc
@@ -0,0 +1,62 @@ +// 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. + +#include "ui/qt/native_theme_qt.h" + +#include <cstdlib> +#include <utility> + +#include "base/memory/raw_ptr.h" +#include "cc/paint/paint_canvas.h" +#include "cc/paint/paint_image.h" +#include "third_party/skia/include/core/SkAlphaType.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "third_party/skia/include/core/SkColorType.h" +#include "third_party/skia/include/core/SkImageInfo.h" +#include "ui/color/system_theme.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/native_theme/native_theme.h" +#include "ui/native_theme/native_theme_aura.h" +#include "ui/qt/qt_interface.h" + +namespace qt { + +NativeThemeQt::NativeThemeQt(QtInterface* shim) + : ui::NativeThemeAura(/*use_overlay_scrollbars=*/false, + /*should_only_use_dark_colors=*/false, + ui::SystemTheme::kQt), + shim_(shim) {} + +NativeThemeQt::~NativeThemeQt() = default; + +void NativeThemeQt::ThemeChanged(bool prefer_dark_theme) { + set_use_dark_colors(IsForcedDarkMode() || prefer_dark_theme); + set_preferred_color_scheme(CalculatePreferredColorScheme()); + + NotifyOnNativeThemeUpdated(); +} + +DISABLE_CFI_VCALL +void NativeThemeQt::PaintFrameTopArea( + cc::PaintCanvas* canvas, + State state, + const gfx::Rect& rect, + const FrameTopAreaExtraParams& frame_top_area, + ColorScheme color_scheme) const { + auto image = shim_->DrawHeader( + rect.width(), rect.height(), frame_top_area.default_background_color, + frame_top_area.is_active ? ColorState::kNormal : ColorState::kInactive, + frame_top_area.use_custom_frame); + SkImageInfo image_info = SkImageInfo::Make( + image.width, image.height, kBGRA_8888_SkColorType, kPremul_SkAlphaType); + SkBitmap bitmap; + bitmap.installPixels( + image_info, image.data_argb.Take(), image_info.minRowBytes(), + [](void* data, void*) { free(data); }, nullptr); + bitmap.setImmutable(); + canvas->drawImage(cc::PaintImage::CreateFromBitmap(std::move(bitmap)), + rect.x(), rect.y()); +} + +} // namespace qt
diff --git a/ui/qt/native_theme_qt.h b/ui/qt/native_theme_qt.h new file mode 100644 index 0000000..2de5dcf --- /dev/null +++ b/ui/qt/native_theme_qt.h
@@ -0,0 +1,40 @@ +// 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. + +#ifndef UI_QT_NATIVE_THEME_QT_H_ +#define UI_QT_NATIVE_THEME_QT_H_ + +#include "base/memory/raw_ptr.h" +#include "ui/native_theme/native_theme_aura.h" + +namespace qt { + +class QtInterface; + +class NativeThemeQt : public ui::NativeThemeAura { + public: + explicit NativeThemeQt(QtInterface* shim); + NativeThemeQt(const NativeThemeQt&) = delete; + NativeThemeQt& operator=(const NativeThemeQt&) = delete; + ~NativeThemeQt() override; + + void ThemeChanged(bool prefer_dark_theme); + + protected: + // ui::NativeThemeAura: + void PaintFrameTopArea(cc::PaintCanvas* canvas, + State state, + const gfx::Rect& rect, + const FrameTopAreaExtraParams& frame_top_area, + ColorScheme color_scheme) const override; + + private: + // IMPORTANT NOTE: All members that use `shim_` must be decorated with + // `DISABLE_CFI_VCALL`. + raw_ptr<QtInterface> const shim_; +}; + +} // namespace qt + +#endif // UI_QT_NATIVE_THEME_QT_H_
diff --git a/ui/qt/qt_ui.cc b/ui/qt/qt_ui.cc index ba332ce..e62c722 100644 --- a/ui/qt/qt_ui.cc +++ b/ui/qt/qt_ui.cc
@@ -47,8 +47,7 @@ #include "ui/linux/linux_ui.h" #include "ui/linux/linux_ui_delegate.h" #include "ui/linux/nav_button_provider.h" -#include "ui/native_theme/native_theme_aura.h" -#include "ui/native_theme/native_theme_base.h" +#include "ui/qt/native_theme_qt.h" #include "ui/qt/qt_interface.h" #include "ui/shell_dialogs/select_file_dialog.h" #include "ui/shell_dialogs/select_file_policy.h" @@ -127,50 +126,6 @@ } // namespace -class QtNativeTheme : public ui::NativeThemeAura { - public: - explicit QtNativeTheme(QtInterface* shim) - : ui::NativeThemeAura(/*use_overlay_scrollbars=*/false, - /*should_only_use_dark_colors=*/false, - ui::SystemTheme::kQt), - shim_(shim) {} - QtNativeTheme(const QtNativeTheme&) = delete; - QtNativeTheme& operator=(const QtNativeTheme&) = delete; - ~QtNativeTheme() override = default; - - void ThemeChanged(bool prefer_dark_theme) { - set_use_dark_colors(IsForcedDarkMode() || prefer_dark_theme); - set_preferred_color_scheme(CalculatePreferredColorScheme()); - - NotifyOnNativeThemeUpdated(); - } - - // ui::NativeTheme: - DISABLE_CFI_VCALL - void PaintFrameTopArea(cc::PaintCanvas* canvas, - State state, - const gfx::Rect& rect, - const FrameTopAreaExtraParams& frame_top_area, - ColorScheme color_scheme) const override { - auto image = shim_->DrawHeader( - rect.width(), rect.height(), frame_top_area.default_background_color, - frame_top_area.is_active ? ColorState::kNormal : ColorState::kInactive, - frame_top_area.use_custom_frame); - SkImageInfo image_info = SkImageInfo::Make( - image.width, image.height, kBGRA_8888_SkColorType, kPremul_SkAlphaType); - SkBitmap bitmap; - bitmap.installPixels( - image_info, image.data_argb.Take(), image_info.minRowBytes(), - [](void* data, void*) { free(data); }, nullptr); - bitmap.setImmutable(); - canvas->drawImage(cc::PaintImage::CreateFromBitmap(std::move(bitmap)), - rect.x(), rect.y()); - } - - private: - raw_ptr<QtInterface> const shim_; -}; - QtUi::QtUi(ui::LinuxUi* fallback_linux_ui) : fallback_linux_ui_(fallback_linux_ui) {} @@ -255,7 +210,7 @@ cmd_line_ = CopyCmdLine(cmd_line); shim_.reset((reinterpret_cast<decltype(&CreateQtInterface)>( create_qt_interface)(this, &cmd_line_.argc, cmd_line_.argv.data()))); - native_theme_ = std::make_unique<QtNativeTheme>(shim_.get()); + native_theme_ = std::make_unique<NativeThemeQt>(shim_.get()); ui::ColorProviderManager::Get().AppendColorProviderInitializer( base::BindRepeating(&QtUi::AddNativeColorMixer, base::Unretained(this))); ScaleFactorMaybeChangedImpl();
diff --git a/ui/qt/qt_ui.h b/ui/qt/qt_ui.h index a73906e..3543fd1 100644 --- a/ui/qt/qt_ui.h +++ b/ui/qt/qt_ui.h
@@ -23,7 +23,7 @@ namespace qt { -class QtNativeTheme; +class NativeThemeQt; // Interface to QT desktop features. class QtUi : public ui::LinuxUiAndTheme, QtInterface::Delegate { @@ -111,7 +111,7 @@ std::optional<gfx::FontRenderParams> font_params_; std::unique_ptr<QtInterface> shim_; - std::unique_ptr<QtNativeTheme> native_theme_; + std::unique_ptr<NativeThemeQt> native_theme_; std::optional<SkColor> accent_color_;
diff --git a/ui/views/controls/button/label_button_unittest.cc b/ui/views/controls/button/label_button_unittest.cc index e955351..e6b70c4 100644 --- a/ui/views/controls/button/label_button_unittest.cc +++ b/ui/views/controls/button/label_button_unittest.cc
@@ -726,8 +726,6 @@ // Ensure the label resets the enabled color after LabelButton::OnThemeChanged() // is invoked. TEST_F(LabelButtonTest, OnThemeChanged) { - ASSERT_NE(button()->GetNativeTheme()->GetPlatformHighContrastColorScheme(), - ui::NativeTheme::PlatformHighContrastColorScheme::kDark); ASSERT_NE(button()->label()->GetBackgroundColor(), SK_ColorBLACK); EXPECT_EQ(themed_normal_text_color_, button()->label()->GetEnabledColor());
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc index 5002b5a..7f3c3a2 100644 --- a/ui/views/controls/textfield/textfield.cc +++ b/ui/views/controls/textfield/textfield.cc
@@ -203,11 +203,6 @@ } // namespace // static -base::TimeDelta Textfield::GetCaretBlinkInterval() { - return ui::NativeTheme::GetInstanceForNativeUi()->GetCaretBlinkInterval(); -} - -// static const gfx::FontList& Textfield::GetDefaultFontList() { ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); return rb.GetFontListWithDelta(ui::kLabelFontSizeDelta); @@ -3083,13 +3078,17 @@ } bool Textfield::ShouldBlinkCursor() const { - return ShouldShowCursor() && !Textfield::GetCaretBlinkInterval().is_zero(); + return ShouldShowCursor() && !ui::NativeTheme::GetInstanceForNativeUi() + ->GetCaretBlinkInterval() + .is_zero(); } void Textfield::StartBlinkingCursor() { DCHECK(ShouldBlinkCursor()); - cursor_blink_timer_.Start(FROM_HERE, Textfield::GetCaretBlinkInterval(), this, - &Textfield::OnCursorBlinkTimerFired); + cursor_blink_timer_.Start( + FROM_HERE, + ui::NativeTheme::GetInstanceForNativeUi()->GetCaretBlinkInterval(), this, + &Textfield::OnCursorBlinkTimerFired); } void Textfield::StopBlinkingCursor() {
diff --git a/ui/views/controls/textfield/textfield.h b/ui/views/controls/textfield/textfield.h index ba0b37c..516e0a0 100644 --- a/ui/views/controls/textfield/textfield.h +++ b/ui/views/controls/textfield/textfield.h
@@ -110,9 +110,6 @@ // Pair of |text_changed|, |cursor_changed|. using EditCommandResult = std::pair<bool, bool>; - // Returns the text cursor blink time, or 0 for no blinking. - static base::TimeDelta GetCaretBlinkInterval(); - // Returns the default FontList used by all textfields. static const gfx::FontList& GetDefaultFontList();
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc index 76777c23..bf86ce3 100644 --- a/ui/views/view_unittest.cc +++ b/ui/views/view_unittest.cc
@@ -55,7 +55,6 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/geometry/transform.h" #include "ui/native_theme/native_theme.h" -#include "ui/native_theme/test_native_theme.h" #include "ui/strings/grit/ui_strings.h" #include "ui/views/background.h" #include "ui/views/controls/native/native_view_host.h" @@ -6429,19 +6428,17 @@ Widget::InitParams params = CreateParams( Widget::InitParams::CLIENT_OWNS_WIDGET, Widget::InitParams::TYPE_WINDOW); widget->Init(std::move(params)); + EXPECT_TRUE(widget->GetNativeTheme()); TestView* test_view_ptr = widget->GetRootView()->AddChildView(std::move(test_view)); - EXPECT_TRUE(test_view_ptr->native_theme_); EXPECT_EQ(widget->GetNativeTheme(), test_view_ptr->native_theme_); - EXPECT_TRUE(test_view_child->native_theme_); EXPECT_EQ(widget->GetNativeTheme(), test_view_child->native_theme_); // Child view added after the widget hierarchy exists should also get the // notification. TestView* test_view_child_2 = test_view_ptr->AddChildView(std::make_unique<TestView>()); - EXPECT_TRUE(test_view_child_2->native_theme_); EXPECT_EQ(widget->GetNativeTheme(), test_view_child_2->native_theme_); } @@ -6498,23 +6495,6 @@ } // See comment above test for details. -class WidgetWithCustomTheme : public Widget { - public: - explicit WidgetWithCustomTheme(ui::TestNativeTheme* theme) : theme_(theme) {} - - WidgetWithCustomTheme(const WidgetWithCustomTheme&) = delete; - WidgetWithCustomTheme& operator=(const WidgetWithCustomTheme&) = delete; - - ~WidgetWithCustomTheme() override = default; - - // Widget: - const ui::NativeTheme* GetNativeTheme() const override { return theme_; } - - private: - raw_ptr<ui::TestNativeTheme> theme_; -}; - -// See comment above test for details. class ViewThatAddsViewInOnThemeChanged : public View { METADATA_HEADER(ViewThatAddsViewInOnThemeChanged, View) @@ -6528,19 +6508,17 @@ ~ViewThatAddsViewInOnThemeChanged() override = default; - bool on_native_theme_changed_called() const { - return on_native_theme_changed_called_; - } + bool on_theme_changed_called() const { return on_theme_changed_called_; } // View: void OnThemeChanged() override { View::OnThemeChanged(); - on_native_theme_changed_called_ = true; + on_theme_changed_called_ = true; GetWidget()->GetRootView()->AddChildView(std::make_unique<View>()); } private: - bool on_native_theme_changed_called_ = false; + bool on_theme_changed_called_ = false; }; BEGIN_METADATA(ViewThatAddsViewInOnThemeChanged) @@ -6560,22 +6538,16 @@ // called before the layer hierarchy was updated. OnThemeChanged() should be // called after the layer hierarchy matches the view hierarchy. TEST_F(ViewTest, CrashOnAddFromFromOnThemeChanged) { - ui::TestNativeTheme theme; - auto widget = std::make_unique<WidgetWithCustomTheme>(&theme); - test::WidgetDestroyedWaiter waiter(widget.get()); + auto widget = std::make_unique<Widget>(); Widget::InitParams params = CreateParams( Widget::InitParams::CLIENT_OWNS_WIDGET, Widget::InitParams::TYPE_POPUP); params.bounds = gfx::Rect(50, 50, 350, 350); widget->Init(std::move(params)); AddViewWithChildLayer(widget->GetRootView()); - ViewThatAddsViewInOnThemeChanged* v = widget->GetRootView()->AddChildView( + const auto* const v = widget->GetRootView()->AddChildView( std::make_unique<ViewThatAddsViewInOnThemeChanged>()); - EXPECT_TRUE(v->on_native_theme_changed_called()); - // Initiate an explicit close and wait to ensure the |theme| outlives the - // |widget|. - widget->Close(); - waiter.Wait(); + EXPECT_TRUE(v->on_theme_changed_called()); } // A View that removes its Layer when hidden.