diff --git a/DEPS b/DEPS index 3646202..4be3570 100644 --- a/DEPS +++ b/DEPS
@@ -310,11 +310,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': 'b4e35d03eabbf984521b008315144df3c1b6e22c', + 'src_internal_revision': '51b17dd381f1ca4883e97b476749b20fdeebff1c', # 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': 'fcd1b7521805ab1cde2947be6118f329e4ace14d', + 'skia_revision': '064f144adedd8ad8ac9c613c54e6354268041912', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -322,7 +322,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': '32ef34df48920cff6f6b629c515e052fa4baa968', + 'angle_revision': '4ace4da1c446a0f89eb26c7af5455845565d1a4a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -385,11 +385,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '4f81c1e295978227d83f1b42ceff40b4f9b5b08c', + 'catapult_revision': 'b018f901e807db6fcb44dfc45deb658b9810aa46', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling chromium_variations # and whatever else without interference from each other. - 'chromium_variations_revision': '990efdd6cf54f2124621d065e2de629856c395e4', + 'chromium_variations_revision': 'a6b4cf7146484726d6b671f171ee35f93dbdd12a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. @@ -405,7 +405,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': '46268f4b777d9e3812ae478fd3254f82fea73f3a', + 'devtools_frontend_revision': 'fc2efdf6318dc3caa2d8e5ed0b1eb6b087467417', # 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. @@ -445,7 +445,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': 'e1f1c0135a5eca328a320d4f14d21b24576eea9b', + 'dawn_revision': 'e82fe98bd900efceca25ee39099315c2ad8468e0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -477,7 +477,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling nearby # and whatever else without interference from each other. - 'nearby_revision': 'd477a2d174fc0e31f6dd06264ff3f47ff8da5378', + 'nearby_revision': '3fdcbe4ddc69ce73907305b1ae18f76e438b4180', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling securemessage # and whatever else without interference from each other. @@ -501,7 +501,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. - 'libunwind_revision': '43e5a34c5b7066a7ee15c74f09dc37b4b9b5630e', + 'libunwind_revision': '7608093d21b209a23ccac7c0d5af5cc47e148887', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -521,7 +521,7 @@ # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '7cf98622abaf832e2d4784889ebc69d5b6fde4d8', + 'libcxx_revision': 'a094e2535c54dd295d22c56bd088691459708b46', # GN CIPD package version. 'gn_version': 'git_revision:991530ce394efb58fcd848195469022fa17ae126', @@ -845,7 +845,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'aa3c18d7af25c04cdf5ff613708d191707815647', + 'fd3c2ef103a6345bca3075730c1cb70dedbdd9ec', 'condition': 'checkout_android and checkout_src_internal', }, @@ -854,7 +854,7 @@ }, 'src/ios/third_party/earl_grey2/src': { - 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + 'bbf8b94d59079db24bc49ca3aa03ed860f53a3d0', + 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '7bad4a3eeb8536e0bf0aa7b8768ef8fed527b943', 'condition': 'checkout_ios', }, @@ -1051,7 +1051,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'IrpbN40qmrgJhRlrreSznX0-bvcK-SQ73XYHV4x-Y0gC', + 'version': 'tfNYaYQPGwu8upYGYo38upn04cSQFYR49Ai89gPC0PAC', }, ], 'condition': 'checkout_android', @@ -1295,13 +1295,13 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '90a30a5b5357636fa05bb315c393275be7ca705c', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'f90b3b035c31a13a08922ff0270dfc55fe5a176c', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '5c18380d0cee521d0eb41984f178253763d2f7c1', + 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '0af74cb7da0e98564b4b022f8e78b9a5e24e004e', 'condition': 'checkout_src_internal', }, @@ -1779,7 +1779,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '09a4f3ec842a8932341b195c5b01e141c8a16eb7', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '934f2462ad01c407a596641dbc611df49e2017b4', + Var('chromium_git') + '/openscreen' + '@' + '16eeee9b9ee295e6119f24bf2282712d6055eb66', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '58a00cf85c39ad5ec4dc43a769624e420c06179a', @@ -1790,7 +1790,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'a3d4c1de9bcf2a0471ab183c45cf111efd29571e', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'd44dbe4ad2af5f2148e8a879bca8aa6dd6b10dfa', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1972,7 +1972,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'f4bf599a8b575df685c31d9c4729a70a04e377ed', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '609645eb5b272668cbfb120d1aa9549eee86e02d', + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'd253683c9379d5a02b0cbcb04f6c0e9b26f15b0c', 'src/third_party/webrtc': Var('webrtc_git') + '/src.git' + '@' + 'bce7ce7ba054ac0e79fed49b84ef52fb24c31778', @@ -4137,7 +4137,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - 'd1898d6f4bafeaedb7e6d9e61ace74701449b609', + 'f0d821553c841aa2c7d0ddbfd879a7d8943a5dec', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 1f00e761..6d4f20d 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -1026,21 +1026,6 @@ ], ), BanRule( - r'/\bstd::optional\b', - ( - 'std::optional is not allowed yet (https://crbug.com/1373619). Use ', - 'absl::optional instead.', - ), - True, - [ - # Clang plugins have different build config. - '^tools/clang/blink_gc_plugin/', - '^tools/clang/plugins/', - # Not an error in third_party folders. - _THIRD_PARTY_EXCEPT_BLINK, - ], - ), - BanRule( r'/#include <chrono>', ( '<chrono> is banned. Use base/time instead.', @@ -1723,6 +1708,16 @@ 'test.cc', ), ), + BanRule( + pattern = r'\bg_signal_connect', + explanation = ( + 'Use ScopedGSignal instead of g_signal_connect*()', + ), + treat_as_error = True, + excluded_paths = ( + '^ui/base/glib/scoped_gsignal.h', + ), + ), ) _BANNED_MOJOM_PATTERNS : Sequence[BanRule] = (
diff --git a/android_webview/renderer/aw_render_frame_ext.cc b/android_webview/renderer/aw_render_frame_ext.cc index dd8f382d..0403c212 100644 --- a/android_webview/renderer/aw_render_frame_ext.cc +++ b/android_webview/renderer/aw_render_frame_ext.cc
@@ -79,11 +79,10 @@ if (base::StartsWith(spec, prefix)) { url::RawCanonOutputW<1024> output; - url::DecodeURLEscapeSequences( - spec.data() + prefix.length(), spec.length() - prefix.length(), - url::DecodeURLMode::kUTF8OrIsomorphic, &output); - *dest = - base::UTF16ToUTF8(base::StringPiece16(output.data(), output.length())); + url::DecodeURLEscapeSequences(spec.substr(prefix.length()), + url::DecodeURLMode::kUTF8OrIsomorphic, + &output); + *dest = base::UTF16ToUTF8(output.view()); return true; } return false;
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 8f15bfa..b29eb064 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -2080,8 +2080,6 @@ "system/toast/toast_overlay.h", "system/tracing_notification_controller.cc", "system/tracing_notification_controller.h", - "system/tray/actionable_view.cc", - "system/tray/actionable_view.h", "system/tray/detailed_view_delegate.cc", "system/tray/detailed_view_delegate.h", "system/tray/fake_detailed_view_delegate.cc",
diff --git a/ash/accelerators/accelerator_commands.cc b/ash/accelerators/accelerator_commands.cc index 76f54eb..0ac636bf 100644 --- a/ash/accelerators/accelerator_commands.cc +++ b/ash/accelerators/accelerator_commands.cc
@@ -1687,6 +1687,13 @@ void VolumeDown() { auto* audio_handler = CrasAudioHandler::Get(); if (features::IsQsRevampEnabled()) { + if (audio_handler->IsOutputMuted() && + !audio_handler->IsOutputVolumeBelowDefaultMuteLevel()) { + // The output node can be muted while the previous level is preserved. + // First update the mute state to update the slider style if the level is + // greater than `kMuteThresholdPercent`, and then adjust the volume level. + audio_handler->SetOutputMute(false); + } // Only plays the audio if unmuted. if (!audio_handler->IsOutputMuted()) { AcceleratorController::PlayVolumeAdjustmentSound();
diff --git a/ash/accelerators/accelerator_commands_unittest.cc b/ash/accelerators/accelerator_commands_unittest.cc index fe4a5c3..01839f5 100644 --- a/ash/accelerators/accelerator_commands_unittest.cc +++ b/ash/accelerators/accelerator_commands_unittest.cc
@@ -176,40 +176,16 @@ // Volume down, should decrease to zero and no mute. PressAndReleaseKey(ui::VKEY_VOLUME_DOWN, ui::EF_NONE); EXPECT_EQ(audio_handler->GetOutputVolumePercent(), 0); - EXPECT_FALSE(audio_handler->IsOutputMuted()); + // For QsRevamp: the muted state is equivalent to the zero volume state. + if (features::IsQsRevampEnabled()) { + EXPECT_TRUE(audio_handler->IsOutputMuted()); + } else { + EXPECT_FALSE(audio_handler->IsOutputMuted()); + } // Volume down again, should decrease to zero and mute. PressAndReleaseKey(ui::VKEY_VOLUME_DOWN, ui::EF_NONE); EXPECT_EQ(audio_handler->GetOutputVolumePercent(), 0); - // For QsRevamp: output node mute state will not change. - if (features::IsQsRevampEnabled()) { - EXPECT_FALSE(audio_handler->IsOutputMuted()); - } else { - EXPECT_TRUE(audio_handler->IsOutputMuted()); - } -} - -TEST_F(AcceleratorCommandsAudioTest, ChangeVolumeAfterMuted) { - // This behavior is for QsRevamp. - if (!features::IsQsRevampEnabled()) { - return; - } - - SetUpAudioNode(); - auto* audio_handler = CrasAudioHandler::Get(); - // Make sure that output node is in mute state. - audio_handler->SetOutputVolumePercent(80); - audio_handler->SetOutputMute(true); EXPECT_TRUE(audio_handler->IsOutputMuted()); - EXPECT_EQ(audio_handler->GetOutputVolumePercent(), 80); - // Press the volume down key will decrease the volume but won't change the - // muted state. - PressAndReleaseKey(ui::VKEY_VOLUME_DOWN, ui::EF_NONE); - EXPECT_TRUE(audio_handler->IsOutputMuted()); - EXPECT_LE(audio_handler->GetOutputVolumePercent(), 80); - // Volume up, should bring back the volume to its original level and unmute. - PressAndReleaseKey(ui::VKEY_VOLUME_UP, ui::EF_NONE); - EXPECT_EQ(audio_handler->GetOutputVolumePercent(), 80); - EXPECT_FALSE(audio_handler->IsOutputMuted()); } TEST_F(AcceleratorCommandsAudioTest, VolumeMuteToggle) {
diff --git a/ash/accessibility/ui/focus_ring_controller.cc b/ash/accessibility/ui/focus_ring_controller.cc index afb5957..25f566f0 100644 --- a/ash/accessibility/ui/focus_ring_controller.cc +++ b/ash/accessibility/ui/focus_ring_controller.cc
@@ -9,7 +9,6 @@ #include "ash/accessibility/ui/focus_ring_layer.h" #include "ash/public/cpp/shell_window_ids.h" #include "ash/shell.h" -#include "ash/system/tray/actionable_view.h" #include "ash/system/tray/tray_background_view.h" #include "ash/wm/window_util.h" #include "ui/aura/window.h" @@ -64,15 +63,6 @@ view_bounds.Inset(2); } - // Workarounds for system tray items that have customized focus borders. The - // insets here must be consistent with the ones used by those classes. - if (view->GetClassName() == ActionableView::kViewClassName) { - view_bounds = view->GetLocalBounds(); - view_bounds.Inset(gfx::Insets::TLBR(1, 1, 3, 3)); - } else if (view->GetClassName() == TrayBackgroundView::kViewClassName) { - view_bounds.Inset(gfx::Insets::TLBR(1, 1, 3, 3)); - } - // Convert view bounds to widget/window coordinates. view_bounds = view->ConvertRectToWidget(view_bounds);
diff --git a/ash/app_list/BUILD.gn b/ash/app_list/BUILD.gn index 81238a8..49cc48c0 100644 --- a/ash/app_list/BUILD.gn +++ b/ash/app_list/BUILD.gn
@@ -109,8 +109,6 @@ "views/folder_header_view_delegate.h", "views/ghost_image_view.cc", "views/ghost_image_view.h", - "views/launcher_search_iph_view.cc", - "views/launcher_search_iph_view.h", "views/page_switcher.cc", "views/page_switcher.h", "views/paged_apps_grid_view.cc",
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc index 58d993f..0bd7ab8 100644 --- a/ash/app_list/views/apps_grid_view.cc +++ b/ash/app_list/views/apps_grid_view.cc
@@ -1832,10 +1832,16 @@ drag_icon_drop_bounds = items_container_->GetMirroredRect(drag_icon_drop_bounds); + // Convert target bounds to in screen coordinates expected by drag icon proxy. views::View::ConvertRectToScreen(items_container_, &drag_icon_drop_bounds); if (is_drag_and_drop_refactor_enabled) { + // Ensure target bounds are in the same coordinates as the drag image layer. + wm::ConvertRectFromScreen( + items_container_->GetWidget()->GetNativeWindow()->GetRootWindow(), + &drag_icon_drop_bounds); + ui::Layer* target_layer = drag_image_layer_->root(); if (target_layer) { target_layer->GetAnimator()->AbortAllAnimations();
diff --git a/ash/app_list/views/search_box_view.cc b/ash/app_list/views/search_box_view.cc index ccbb174..bf41dbe 100644 --- a/ash/app_list/views/search_box_view.cc +++ b/ash/app_list/views/search_box_view.cc
@@ -15,11 +15,11 @@ #include "ash/app_list/app_list_view_delegate.h" #include "ash/app_list/model/search/search_box_model.h" #include "ash/app_list/model/search/search_model.h" -#include "ash/app_list/views/launcher_search_iph_view.h" #include "ash/app_list/views/result_selection_controller.h" #include "ash/app_list/views/search_box_view_delegate.h" #include "ash/app_list/views/search_result_base_view.h" #include "ash/ash_element_identifiers.h" +#include "ash/assistant/ui/main_stage/launcher_search_iph_view.h" #include "ash/constants/ash_features.h" #include "ash/keyboard/ui/keyboard_ui_controller.h" #include "ash/public/cpp/app_list/app_list_config.h"
diff --git a/ash/app_list/views/search_box_view.h b/ash/app_list/views/search_box_view.h index 9a7ecd2..43db8ff 100644 --- a/ash/app_list/views/search_box_view.h +++ b/ash/app_list/views/search_box_view.h
@@ -14,8 +14,8 @@ #include "ash/app_list/app_list_view_delegate.h" #include "ash/app_list/model/search/search_box_model.h" #include "ash/app_list/model/search/search_box_model_observer.h" -#include "ash/app_list/views/launcher_search_iph_view.h" #include "ash/ash_export.h" +#include "ash/assistant/ui/main_stage/launcher_search_iph_view.h" #include "ash/public/cpp/app_list/app_list_types.h" #include "ash/search_box/search_box_view_base.h" #include "base/memory/raw_ptr.h"
diff --git a/ash/assistant/ui/BUILD.gn b/ash/assistant/ui/BUILD.gn index 7c43df3d..a6b07d1 100644 --- a/ash/assistant/ui/BUILD.gn +++ b/ash/assistant/ui/BUILD.gn
@@ -77,6 +77,8 @@ "main_stage/chip_view.h", "main_stage/element_animator.cc", "main_stage/element_animator.h", + "main_stage/launcher_search_iph_view.cc", + "main_stage/launcher_search_iph_view.h", "main_stage/suggestion_chip_view.cc", "main_stage/suggestion_chip_view.h", "main_stage/suggestion_container_view.cc",
diff --git a/ash/app_list/views/launcher_search_iph_view.cc b/ash/assistant/ui/main_stage/launcher_search_iph_view.cc similarity index 98% rename from ash/app_list/views/launcher_search_iph_view.cc rename to ash/assistant/ui/main_stage/launcher_search_iph_view.cc index 0b15253d..284836b 100644 --- a/ash/app_list/views/launcher_search_iph_view.cc +++ b/ash/assistant/ui/main_stage/launcher_search_iph_view.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/app_list/views/launcher_search_iph_view.h" +#include "ash/assistant/ui/main_stage/launcher_search_iph_view.h" #include <memory> #include <string>
diff --git a/ash/app_list/views/launcher_search_iph_view.h b/ash/assistant/ui/main_stage/launcher_search_iph_view.h similarity index 91% rename from ash/app_list/views/launcher_search_iph_view.h rename to ash/assistant/ui/main_stage/launcher_search_iph_view.h index 7467a412..7915b75 100644 --- a/ash/app_list/views/launcher_search_iph_view.h +++ b/ash/assistant/ui/main_stage/launcher_search_iph_view.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_APP_LIST_VIEWS_LAUNCHER_SEARCH_IPH_VIEW_H_ -#define ASH_APP_LIST_VIEWS_LAUNCHER_SEARCH_IPH_VIEW_H_ +#ifndef ASH_ASSISTANT_UI_MAIN_STAGE_LAUNCHER_SEARCH_IPH_VIEW_H_ +#define ASH_ASSISTANT_UI_MAIN_STAGE_LAUNCHER_SEARCH_IPH_VIEW_H_ #include <memory> #include <string> @@ -70,4 +70,4 @@ } // namespace ash -#endif // ASH_APP_LIST_VIEWS_LAUNCHER_SEARCH_IPH_VIEW_H_ +#endif // ASH_ASSISTANT_UI_MAIN_STAGE_LAUNCHER_SEARCH_IPH_VIEW_H_
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 8396656..ead7480a1 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -1090,7 +1090,7 @@ base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kUpdateNotification, "UpdateNotification", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); // Allows borealis on certain boards whose features are determined by // FeatureManagement. This feature does not apply to all boards, and does not @@ -2894,7 +2894,7 @@ // Enables settings to be split per device. BASE_FEATURE(kInputDeviceSettingsSplit, "InputDeviceSettingsSplit", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); // Enables bug fix for dead keys on the Terminal app. // When enabled, dead keys correctly emit the 'Dead' event on key down for the
diff --git a/ash/game_dashboard/game_dashboard_context_unittest.cc b/ash/game_dashboard/game_dashboard_context_unittest.cc index 0afc22d..a52b88c 100644 --- a/ash/game_dashboard/game_dashboard_context_unittest.cc +++ b/ash/game_dashboard/game_dashboard_context_unittest.cc
@@ -20,6 +20,7 @@ #include "ash/game_dashboard/game_dashboard_utils.h" #include "ash/game_dashboard/game_dashboard_widget.h" #include "ash/game_dashboard/test_game_dashboard_delegate.h" +#include "ash/public/cpp/arc_game_controls_flag.h" #include "ash/public/cpp/capture_mode/capture_mode_test_api.h" #include "ash/public/cpp/style/dark_light_mode_controller.h" #include "ash/public/cpp/window_properties.h" @@ -595,6 +596,49 @@ /*setup_exists=*/false); } +// Verify Game Dashboard button is disabled and toolbar hides in the edit mode. +TEST_F(GameDashboardContextTest, GameControlsEditMode) { + CreateGameWindow(/*is_arc_window=*/true); + // Game Controls is available, not empty, enabled and hint on. + game_window_->SetProperty( + kArcGameControlsFlagsKey, + static_cast<ArcGameControlsFlag>( + ArcGameControlsFlag::kKnown | ArcGameControlsFlag::kAvailable | + ArcGameControlsFlag::kEnabled | ArcGameControlsFlag::kHint)); + auto* game_dashboard_button = test_api_->GetGameDashboardButton(); + EXPECT_TRUE(game_dashboard_button->GetEnabled()); + LeftClickOn(game_dashboard_button); + EXPECT_TRUE(test_api_->GetMainMenuWidget()); + // Show the toolbar. + test_api_->OpenTheToolbar(); + auto* tool_bar_widget = test_api_->GetToolbarWidget(); + EXPECT_TRUE(tool_bar_widget); + EXPECT_TRUE(tool_bar_widget->IsVisible()); + + // Enter Game Controls edit mode. + LeftClickOn(test_api_->GetMainMenuGameControlsDetailsButton()); + EXPECT_TRUE(game_dashboard_utils::IsFlagSet( + game_window_->GetProperty(kArcGameControlsFlagsKey), + ArcGameControlsFlag::kEdit)); + EXPECT_FALSE(test_api_->GetMainMenuWidget()); + EXPECT_FALSE(tool_bar_widget->IsVisible()); + // In the edit mode, Game Dashboard button is disabled and it doesn't show + // menu after clicked. The toolbar is also hidden if it shows up. + EXPECT_FALSE(game_dashboard_button->GetEnabled()); + LeftClickOn(game_dashboard_button); + EXPECT_FALSE(test_api_->GetMainMenuWidget()); + // Exit edit mode and verify Game Dashboard button and toolbar are resumed. + ArcGameControlsFlag flags = + game_window_->GetProperty(kArcGameControlsFlagsKey); + flags = game_dashboard_utils::UpdateFlag(flags, ArcGameControlsFlag::kEdit, + /*enable_flag=*/false); + game_window_->SetProperty(kArcGameControlsFlagsKey, flags); + EXPECT_TRUE(game_dashboard_button->GetEnabled()); + LeftClickOn(game_dashboard_button); + EXPECT_TRUE(test_api_->GetMainMenuWidget()); + EXPECT_TRUE(tool_bar_widget->IsVisible()); +} + // Verifies that when one game window starts a recording session, it's // record game buttons are enabled and the other game's record game buttons // are disabled.
diff --git a/ash/game_dashboard/game_dashboard_controller.cc b/ash/game_dashboard/game_dashboard_controller.cc index 6fdcbbb..cdadb6e0 100644 --- a/ash/game_dashboard/game_dashboard_controller.cc +++ b/ash/game_dashboard/game_dashboard_controller.cc
@@ -257,9 +257,11 @@ auto it = game_window_contexts_.find(window); if (it != game_window_contexts_.end()) { - it->second->SetGameDashboardButtonEnabled(game_dashboard_utils::IsFlagSet( - window->GetProperty(kArcGameControlsFlagsKey), - ArcGameControlsFlag::kKnown)); + const ArcGameControlsFlag flags = + window->GetProperty(kArcGameControlsFlagsKey); + it->second->SetGameDashboardButtonEnabled( + game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kKnown) && + !game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kEdit)); } }
diff --git a/ash/game_dashboard/game_dashboard_toolbar_view.cc b/ash/game_dashboard/game_dashboard_toolbar_view.cc index f79aa3972..cfa6de7 100644 --- a/ash/game_dashboard/game_dashboard_toolbar_view.cc +++ b/ash/game_dashboard/game_dashboard_toolbar_view.cc
@@ -385,23 +385,37 @@ IDS_ASH_GAME_DASHBOARD_CONTROLS_TILE_BUTTON_TITLE), /*is_togglable=*/true)); - UpdateGameControlsButton(*flags); + UpdateViewForGameControls(*flags); } -void GameDashboardToolbarView::UpdateGameControlsButton( +void GameDashboardToolbarView::UpdateViewForGameControls( ArcGameControlsFlag flags) { DCHECK(game_controls_button_); - game_controls_button_->SetEnabled( - game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kEnabled) && - !game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kEmpty)); - if (game_controls_button_->GetEnabled()) { - game_controls_button_->SetToggled( - game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kHint)); - } + auto* widget = GetWidget(); + if (game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kEdit)) { + CHECK(widget); + widget->Hide(); + } else { + // Show the widget in an inactive state. + if (widget) { + // `widget` is null when this function is indirectly called from the + // constructor. + widget->ShowInactive(); + } - game_dashboard_utils::UpdateGameControlsHintButtonToolTipText( - game_controls_button_, flags); + // Update game_controls_button_. + game_controls_button_->SetEnabled( + game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kEnabled) && + !game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kEmpty)); + if (game_controls_button_->GetEnabled()) { + game_controls_button_->SetToggled( + game_dashboard_utils::IsFlagSet(flags, ArcGameControlsFlag::kHint)); + } + + game_dashboard_utils::UpdateGameControlsHintButtonToolTipText( + game_controls_button_, flags); + } } void GameDashboardToolbarView::UpdateRecordGameButton( @@ -433,7 +447,7 @@ return; } - UpdateGameControlsButton(new_flags); + UpdateViewForGameControls(new_flags); } BEGIN_METADATA(GameDashboardToolbarView, views::BoxLayoutView)
diff --git a/ash/game_dashboard/game_dashboard_toolbar_view.h b/ash/game_dashboard/game_dashboard_toolbar_view.h index 26533287..99de8f4 100644 --- a/ash/game_dashboard/game_dashboard_toolbar_view.h +++ b/ash/game_dashboard/game_dashboard_toolbar_view.h
@@ -79,9 +79,9 @@ // Adds Game Controls button if needed. void MayAddGameControlsTile(); - // Updates the `game_controls_button_` states and tooltip text according to - // `flags`. - void UpdateGameControlsButton(ArcGameControlsFlag flags); + // Updates this view's widget visibility. If it is visible, updates + // game_controls_button_'s state, and the tooltip text according to flags. + void UpdateViewForGameControls(ArcGameControlsFlag flags); // Updates the `record_game_button_` UI. If `is_recording_game_window` is // true, then the button will change to a stop button, otherwise it will show
diff --git a/ash/metrics/login_unlock_throughput_recorder.cc b/ash/metrics/login_unlock_throughput_recorder.cc index dea10a9..e6932e9 100644 --- a/ash/metrics/login_unlock_throughput_recorder.cc +++ b/ash/metrics/login_unlock_throughput_recorder.cc
@@ -144,15 +144,6 @@ "Ash.LoginAnimation.Duration.", "Ash.LoginAnimation.Duration2."); } -void ReportLoginFinished() { - LoginEventRecorder::Get()->AddLoginTimeMarker("LoginFinished", - /*send_to_uma=*/false, - /*write_to_file=*/false); - ash::Shell::Get()->login_unlock_throughput_recorder()->AddLoginTimeMarker( - "LoginFinished"); - LoginEventRecorder::Get()->RunScheduledWriteLoginTimes(); -} - void RecordSmoothnessMetrics( const cc::FrameSequenceMetrics::CustomReportData& data, const char* smoothness_name) { @@ -251,7 +242,7 @@ auto* rec = new ui::TotalAnimationThroughputReporter( primary_root->GetHost()->compositor(), base::BindOnce(&LoginUnlockThroughputRecorder::OnLoginAnimationFinish, - weak_ptr_factory_.GetWeakPtr(), base::TimeTicks::Now()), + weak_ptr_factory_.GetWeakPtr(), primary_user_logged_in_), /*should_delete=*/true); login_animation_throughput_reporter_ = rec->GetWeakPtr(); DCHECK(!scoped_throughput_reporter_blocker_); @@ -571,6 +562,8 @@ REPORT_LOGIN_THROUGHPUT_EVENT("Ash.LoginAnimation.Duration.TabletMode"); REPORT_LOGIN_THROUGHPUT_EVENT("Ash.LoginAnimation.Duration2.ClamshellMode"); REPORT_LOGIN_THROUGHPUT_EVENT("Ash.LoginAnimation.Duration2.TabletMode"); + REPORT_LOGIN_THROUGHPUT_EVENT("BootTime.Login2"); + REPORT_LOGIN_THROUGHPUT_EVENT("BootTime.Login3"); REPORT_LOGIN_THROUGHPUT_EVENT( "Ash.UnlockAnimation.Smoothness.ClamshellMode"); REPORT_LOGIN_THROUGHPUT_EVENT("Ash.UnlockAnimation.Smoothness.TabletMode"); @@ -621,7 +614,19 @@ login_finished_reported_ = true; ui_recorder_.OnPostLoginAnimationFinish(); - ReportLoginFinished(); + + AddLoginTimeMarker("LoginFinished"); + LoginEventRecorder::Get()->AddLoginTimeMarker("LoginFinished", + /*send_to_uma=*/false, + /*write_to_file=*/false); + + AddLoginTimeMarker("BootTime.Login3"); + base::UmaHistogramCustomTimes( + "BootTime.Login3", base::TimeTicks::Now() - primary_user_logged_in_, + base::Milliseconds(100), base::Seconds(100), 100); + + LoginEventRecorder::Get()->RunScheduledWriteLoginTimes(); + login_animation_finished_timer_.Stop(); if (!post_login_deferred_task_runner_->Started()) { post_login_deferred_task_runner_->Start();
diff --git a/ash/public/cpp/resources/ash_public_unscaled_resources.grd b/ash/public/cpp/resources/ash_public_unscaled_resources.grd index fb0ef36..192cbf2 100644 --- a/ash/public/cpp/resources/ash_public_unscaled_resources.grd +++ b/ash/public/cpp/resources/ash_public_unscaled_resources.grd
@@ -29,6 +29,9 @@ <include name="IDR_SETTINGS_RGB_KEYBOARD_RAINBOW_COLOR_48_PNG" file="unscaled_resources/rgb_keyboard_rainbow_color_48.png" type="BINDATA" /> <!-- Accessibility animations --> <include name="IDR_DICTATION_BUBBLE_ANIMATION" file="unscaled_resources/dictation_bubble_animation.json" type="BINDATA"/> + <!-- CBX notification images --> + <include name="IDR_UPDATE_CHROME_DARK" file="unscaled_resources/update_chrome_dark.png" type="BINDATA" /> + <include name="IDR_UPDATE_CHROME_LIGHT" file="unscaled_resources/update_chrome_light.png" type="BINDATA" /> <!-- System tray Cast images --> <include name="IDR_TRAY_CAST_ZERO_STATE_DARK" file="unscaled_resources/tray_cast_zero_state_dark.png" type="BINDATA" /> <include name="IDR_TRAY_CAST_ZERO_STATE_LIGHT" file="unscaled_resources/tray_cast_zero_state_light.png" type="BINDATA" />
diff --git a/ash/public/cpp/resources/unscaled_resources/update_chrome_dark.png b/ash/public/cpp/resources/unscaled_resources/update_chrome_dark.png new file mode 100644 index 0000000..70dedc6 --- /dev/null +++ b/ash/public/cpp/resources/unscaled_resources/update_chrome_dark.png Binary files differ
diff --git a/ash/public/cpp/resources/unscaled_resources/update_chrome_light.png b/ash/public/cpp/resources/unscaled_resources/update_chrome_light.png new file mode 100644 index 0000000..8db04b0 --- /dev/null +++ b/ash/public/cpp/resources/unscaled_resources/update_chrome_light.png Binary files differ
diff --git a/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc b/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc index 08682e9..37ad5fd 100644 --- a/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc +++ b/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc
@@ -13,7 +13,6 @@ #include "ash/system/accessibility/floating_menu_utils.h" #include "ash/system/accessibility/select_to_speak/select_to_speak_constants.h" #include "ash/system/accessibility/select_to_speak/select_to_speak_speed_view.h" -#include "ash/system/tray/actionable_view.h" #include "ash/system/tray/tray_background_view.h" #include "ash/system/tray/tray_constants.h" #include "ash/system/unified/unified_system_tray_view.h" @@ -63,7 +62,7 @@ bubble_view_ = new TrayBubbleView(init_params); bubble_view_->SetArrow(views::BubbleBorder::BOTTOM_RIGHT); bubble_view_->SetCanActivate(true); - bubble_view_->SetFocusBehavior(ActionableView::FocusBehavior::ALWAYS); + bubble_view_->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); speed_view_ = new SelectToSpeakSpeedView(this, speech_rate); bubble_view_->AddChildView(speed_view_.get());
diff --git a/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc b/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc index ee697ec..447fcebb 100644 --- a/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc +++ b/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc
@@ -735,15 +735,20 @@ CrasAudioHandler::ACTIVATE_BY_USER); EXPECT_EQ(kHeadphoneId, cras_audio_handler_->GetPrimaryActiveOutputNode()); - // Sets a volume level greater than 0 and the device is unmuted. + // Sets the device level to 0 to mute the device. + cras_audio_handler_->SetVolumeGainPercentForDevice(kHeadphoneId, /*value=*/0); + + // For QsRevamp: level is 0 state should be equal to the muted state. + if (IsQsRevampEnabled()) { + EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphoneId)); + } else { + EXPECT_FALSE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphoneId)); + } + + // Unmute the device by setting a volume level greater than 0. cras_audio_handler_->SetVolumeGainPercentForDevice(kHeadphoneId, /*value=*/10); EXPECT_FALSE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphoneId)); - - // Sets the device level to 0. The mute state is controlled by the mute - // button so the output is still unmuted. - cras_audio_handler_->SetVolumeGainPercentForDevice(kHeadphoneId, /*value=*/0); - EXPECT_FALSE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphoneId)); } class UnifiedAudioDetailedViewControllerSodaTest
diff --git a/ash/system/audio/unified_volume_view.cc b/ash/system/audio/unified_volume_view.cc index 352ca80..d49a3e71 100644 --- a/ash/system/audio/unified_volume_view.cc +++ b/ash/system/audio/unified_volume_view.cc
@@ -179,11 +179,7 @@ IDS_ASH_STATUS_TRAY_VOLUME, state_tooltip_text)); } else { level = audio_handler->GetOutputVolumePercentForDevice(device_id_) / 100.f; - - // Still needs to check if `level` is 0 because toggling the output mute by - // keyboard will not set it to be muted in `UnifiedVolumeSliderController`. - const bool is_muted = - audio_handler->IsOutputMutedForDevice(device_id_) || level == 0; + const bool is_muted = audio_handler->IsOutputMutedForDevice(device_id_); auto active_device_id = audio_handler->GetPrimaryActiveOutputNode(); @@ -275,6 +271,11 @@ void UnifiedVolumeView::OnOutputNodeVolumeChanged(uint64_t node_id, int volume) { + // For QsRevamp: we don't distinguish volume is 0 and muted state. Also unmute + // the output node if volume is not 0. + if (features::IsQsRevampEnabled()) { + CrasAudioHandler::Get()->SetOutputMute(/*mute_on=*/volume == 0); + } Update(/*by_user=*/true); }
diff --git a/ash/system/audio/unified_volume_view_unittest.cc b/ash/system/audio/unified_volume_view_unittest.cc index a5355d3..32ed6dfb 100644 --- a/ash/system/audio/unified_volume_view_unittest.cc +++ b/ash/system/audio/unified_volume_view_unittest.cc
@@ -160,8 +160,7 @@ } // Tests that pressing the keyboard volume mute key will mute the slider, and -// pressing the volume up key will unmute and increase the volume level by one -// step. +// pressing the volume up key will restore the volume level. TEST_F(UnifiedVolumeViewTest, VolumeMuteThenVolumeUp) { // Sets the volume level by user. const float level = 0.8; @@ -171,26 +170,22 @@ EXPECT_EQ(slider()->GetValue(), level); CheckSliderIcon(level); - const bool is_muted = CrasAudioHandler::Get()->IsOutputMuted(); PressAndReleaseKey(ui::KeyboardCode::VKEY_VOLUME_MUTE); - // The slider level should remain as `level` and the mute state toggles. + // The slider level should remain as `level`. EXPECT_EQ(slider()->GetValue(), level); CheckSliderIcon(level); - EXPECT_EQ(CrasAudioHandler::Get()->IsOutputMuted(), !is_muted); PressAndReleaseKey(ui::KeyboardCode::VKEY_VOLUME_UP); // The slider level should increase by `kVolumeStepChange` and the icon should - // change accordingly. The mute state toggles back to the original state. + // change accordingly. const float new_level = level + kVolumeStepChange; EXPECT_FLOAT_EQ(slider()->GetValue(), new_level); CheckSliderIcon(new_level); - EXPECT_EQ(CrasAudioHandler::Get()->IsOutputMuted(), is_muted); } // Tests that pressing the keyboard volume mute key will mute the slider, and -// pressing the volume down key will preserve the mute state and decrease the -// volume level by one step. +// pressing the volume down key will preserve the mute state. TEST_F(UnifiedVolumeViewTest, VolumeMuteThenVolumeDown) { // Sets the volume level by user. const float level = 0.8; @@ -200,22 +195,18 @@ EXPECT_EQ(slider()->GetValue(), level); CheckSliderIcon(level); - const bool is_muted = CrasAudioHandler::Get()->IsOutputMuted(); PressAndReleaseKey(ui::KeyboardCode::VKEY_VOLUME_MUTE); - // The slider level should remain as `level` and the mute state toggles. + // The slider level should remain as `level`. EXPECT_EQ(slider()->GetValue(), level); CheckSliderIcon(level); - EXPECT_EQ(CrasAudioHandler::Get()->IsOutputMuted(), !is_muted); PressAndReleaseKey(ui::KeyboardCode::VKEY_VOLUME_DOWN); // The slider level should decrease by `kVolumeStepChange` and the icon should - // change accordingly. The mute state remains the same as before pressing the - // volume down. + // change accordingly. const float new_level = level - kVolumeStepChange; EXPECT_FLOAT_EQ(slider()->GetValue(), new_level); CheckSliderIcon(new_level); - EXPECT_EQ(CrasAudioHandler::Get()->IsOutputMuted(), !is_muted); } // Tests when the slider is focused, press enter will toggle the mute state.
diff --git a/ash/system/ime_menu/ime_list_view.cc b/ash/system/ime_menu/ime_list_view.cc index bcd7faf..c592364 100644 --- a/ash/system/ime_menu/ime_list_view.cc +++ b/ash/system/ime_menu/ime_list_view.cc
@@ -22,7 +22,6 @@ #include "ash/style/rounded_container.h" #include "ash/style/switch.h" #include "ash/style/typography.h" -#include "ash/system/tray/actionable_view.h" #include "ash/system/tray/system_menu_button.h" #include "ash/system/tray/tray_detailed_view.h" #include "ash/system/tray/tray_popup_utils.h" @@ -44,6 +43,7 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/views/animation/ink_drop.h" #include "ui/views/background.h" +#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/toggle_button.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" @@ -61,7 +61,7 @@ // Represents a row in the scrollable IME list; each row is either an IME or // an IME property. A checkmark icon is shown in the row if selected. -class ImeListItemView : public ActionableView { +class ImeListItemView : public views::Button { public: METADATA_HEADER(ImeListItemView); @@ -70,10 +70,13 @@ const std::u16string& label, bool selected, const ui::ColorId button_color_id) - : ActionableView(TrayPopupInkDropStyle::FILL_BOUNDS), - ime_list_view_(list_view), - selected_(selected) { - views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON); + : ime_list_view_(list_view), selected_(selected) { + SetCallback(base::BindRepeating(&ImeListItemView::PerformAction, + base::Unretained(this))); + TrayPopupUtils::ConfigureRowButtonInkdrop(views::InkDrop::Get(this)); + SetHasInkDropActionOnClick(true); + + views::FocusRing::Get(this)->SetColorId(cros_tokens::kCrosSysFocusRing); const bool is_qs_revamp = features::IsQsRevampEnabled(); const bool is_jelly_enabled = chromeos::features::IsJellyEnabled(); @@ -136,34 +139,33 @@ ImeListItemView& operator=(const ImeListItemView&) = delete; ~ImeListItemView() override = default; - // ActionableView: - bool PerformAction(const ui::Event& event) override { - ime_list_view_->set_last_item_selected_with_keyboard( - ime_list_view_->should_focus_ime_after_selection_with_keyboard() && - event.type() == ui::EventType::ET_KEY_PRESSED); - ime_list_view_->HandleViewClicked(this); - return true; - } - + // views::Button: void OnFocus() override { - ActionableView::OnFocus(); + views::Button::OnFocus(); if (ime_list_view_) ime_list_view_->ScrollItemToVisible(this); } void GetAccessibleNodeData(ui::AXNodeData* node_data) override { - ActionableView::GetAccessibleNodeData(node_data); + views::Button::GetAccessibleNodeData(node_data); node_data->role = ax::mojom::Role::kCheckBox; node_data->SetCheckedState(selected_ ? ax::mojom::CheckedState::kTrue : ax::mojom::CheckedState::kFalse); } + void PerformAction(const ui::Event& event) { + ime_list_view_->set_last_item_selected_with_keyboard( + ime_list_view_->should_focus_ime_after_selection_with_keyboard() && + event.type() == ui::EventType::ET_KEY_PRESSED); + ime_list_view_->HandleViewClicked(this); + } + private: raw_ptr<ImeListView, ExperimentalAsh> ime_list_view_; bool selected_; }; -BEGIN_METADATA(ImeListItemView, ActionableView) +BEGIN_METADATA(ImeListItemView, views::Button) END_METADATA } // namespace
diff --git a/ash/system/locale/locale_detailed_view.cc b/ash/system/locale/locale_detailed_view.cc index 4cffb63..5718056f 100644 --- a/ash/system/locale/locale_detailed_view.cc +++ b/ash/system/locale/locale_detailed_view.cc
@@ -14,9 +14,9 @@ #include "ash/style/typography.h" #include "ash/system/model/locale_model.h" #include "ash/system/model/system_tray_model.h" -#include "ash/system/tray/actionable_view.h" #include "ash/system/tray/tray_popup_utils.h" #include "base/check.h" +#include "base/functional/bind.h" #include "base/i18n/case_conversion.h" #include "base/memory/raw_ptr.h" #include "base/strings/utf_string_conversions.h" @@ -43,7 +43,7 @@ // portion of |iso_code| is shown at the beginning of the row, and // |display_name| is shown in the middle. A checkmark is shown in the end if // |checked| is true. -class LocaleItemView : public ActionableView { +class LocaleItemView : public views::Button { public: METADATA_HEADER(LocaleItemView); @@ -51,10 +51,10 @@ const std::string& iso_code, const std::u16string& display_name, bool checked) - : ActionableView(TrayPopupInkDropStyle::FILL_BOUNDS), - locale_detailed_view_(locale_detailed_view), - checked_(checked) { - views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON); + : locale_detailed_view_(locale_detailed_view), checked_(checked) { + SetCallback(base::BindRepeating(&LocaleItemView::PerformAction, + base::Unretained(this))); + TrayPopupUtils::ConfigureRowButtonInkdrop(views::InkDrop::Get(this)); TriView* tri_view = TrayPopupUtils::CreateDefaultRowView( /*use_wide_layout=*/false); @@ -107,20 +107,18 @@ LocaleItemView& operator=(const LocaleItemView&) = delete; ~LocaleItemView() override = default; - // ActionableView: - bool PerformAction(const ui::Event& event) override { + void PerformAction(const ui::Event& event) { locale_detailed_view_->HandleViewClicked(this); - return true; } // views::View: void OnFocus() override { - ActionableView::OnFocus(); + views::Button::OnFocus(); ScrollViewToVisible(); } void GetAccessibleNodeData(ui::AXNodeData* node_data) override { - ActionableView::GetAccessibleNodeData(node_data); + views::Button::GetAccessibleNodeData(node_data); node_data->role = ax::mojom::Role::kCheckBox; node_data->SetCheckedState(checked_ ? ax::mojom::CheckedState::kTrue : ax::mojom::CheckedState::kFalse); @@ -131,7 +129,7 @@ const bool checked_; }; -BEGIN_METADATA(LocaleItemView, ActionableView) +BEGIN_METADATA(LocaleItemView, views::Button) END_METADATA } // namespace
diff --git a/ash/system/media/media_tray_unittest.cc b/ash/system/media/media_tray_unittest.cc index 23dd228..df094dd 100644 --- a/ash/system/media/media_tray_unittest.cc +++ b/ash/system/media/media_tray_unittest.cc
@@ -208,7 +208,6 @@ // Tap and show bubble. GestureTapOn(media_tray()); - EXPECT_NE(GetBubbleWrapper(), nullptr); EXPECT_TRUE(media_tray()->is_active());
diff --git a/ash/system/network/vpn_detailed_view.cc b/ash/system/network/vpn_detailed_view.cc index eee0bef..f763b53 100644 --- a/ash/system/network/vpn_detailed_view.cc +++ b/ash/system/network/vpn_detailed_view.cc
@@ -26,7 +26,6 @@ #include "ash/system/network/network_icon_animation_observer.h" #include "ash/system/network/tray_network_state_model.h" #include "ash/system/network/vpn_list.h" -#include "ash/system/tray/actionable_view.h" #include "ash/system/tray/hover_highlight_view.h" #include "ash/system/tray/system_menu_button.h" #include "ash/system/tray/tray_popup_utils.h" @@ -228,20 +227,22 @@ BEGIN_METADATA(VPNListProviderEntry, views::View) END_METADATA -// A view for a VPN provider with QsRevamp. Derives from ActionableView so the +// A view for a VPN provider with QsRevamp. Derives from views::Button so the // entire row is clickable. -class VPNListProviderEntryRevamp : public ActionableView { +class VPNListProviderEntryRevamp : public views::Button { public: METADATA_HEADER(VPNListProviderEntryRevamp); VPNListProviderEntryRevamp(const VpnProviderPtr& vpn_provider, const std::string& name, bool enabled) - : ActionableView(TrayPopupInkDropStyle::FILL_BOUNDS), - vpn_provider_type_(vpn_provider->type), + : vpn_provider_type_(vpn_provider->type), vpn_provider_app_id_(vpn_provider->app_id) { DCHECK(features::IsQsRevampEnabled()); - views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON); + SetCallback(base::BindRepeating(&VPNListProviderEntryRevamp::PerformAction, + base::Unretained(this))); + TrayPopupUtils::ConfigureRowButtonInkdrop(views::InkDrop::Get(this)); + SetHasInkDropActionOnClick(true); // Disable focus on the row because we want the keyboard focus ring to // appear on the add network button. SetFocusBehavior(FocusBehavior::NEVER); @@ -307,10 +308,8 @@ tri_view->AddView(TriView::Container::END, add_vpn_button.release()); } - // ActionableView: - bool PerformAction(const ui::Event& event) override { + void PerformAction() { ShowAddVpnDialog(vpn_provider_type_, vpn_provider_app_id_); - return true; } private: @@ -318,7 +317,7 @@ std::string vpn_provider_app_id_; }; -BEGIN_METADATA(VPNListProviderEntryRevamp, ActionableView) +BEGIN_METADATA(VPNListProviderEntryRevamp, views::Button) END_METADATA // A list entry that represents a network. If the network is currently
diff --git a/ash/system/time/calendar_event_list_item_view.cc b/ash/system/time/calendar_event_list_item_view.cc index dbb6c5f..101fd16 100644 --- a/ash/system/time/calendar_event_list_item_view.cc +++ b/ash/system/time/calendar_event_list_item_view.cc
@@ -163,11 +163,12 @@ CalendarEventListItemView::CalendarEventListItemView( CalendarViewController* calendar_view_controller, google_apis::calendar::CalendarEvent event) - : ActionableView(TrayPopupInkDropStyle::FILL_BOUNDS), - calendar_view_controller_(calendar_view_controller), + : calendar_view_controller_(calendar_view_controller), summary_(new views::Label()), time_range_(new views::Label()), event_url_(event.html_link()) { + SetCallback(base::BindRepeating(&CalendarEventListItemView::PerformAction, + base::Unretained(this))); SetLayoutManager(std::make_unique<views::FillLayout>()); DCHECK(calendar_view_controller_->selected_date().has_value()); @@ -227,7 +228,7 @@ time_range_->SetEnabledColor(calendar_utils::GetPrimaryTextColor()); } -bool CalendarEventListItemView::PerformAction(const ui::Event& event) { +void CalendarEventListItemView::PerformAction(const ui::Event& event) { DCHECK(event_url_.is_empty() || event_url_.is_valid()); calendar_metrics::RecordEventListItemActivated(event); @@ -239,7 +240,6 @@ Shell::Get()->system_tray_model()->client()->ShowCalendarEvent( event_url_, calendar_view_controller_->selected_date_midnight(), opened_pwa, finalized_url); - return true; } BEGIN_METADATA(CalendarEventListItemView, views::View);
diff --git a/ash/system/time/calendar_event_list_item_view.h b/ash/system/time/calendar_event_list_item_view.h index cc5e30e..ec04884 100644 --- a/ash/system/time/calendar_event_list_item_view.h +++ b/ash/system/time/calendar_event_list_item_view.h
@@ -6,9 +6,9 @@ #define ASH_SYSTEM_TIME_CALENDAR_EVENT_LIST_ITEM_VIEW_H_ #include "ash/ash_export.h" -#include "ash/system/tray/actionable_view.h" #include "base/memory/raw_ptr.h" #include "google_apis/calendar/calendar_api_response_types.h" +#include "ui/views/controls/button/button.h" #include "url/gurl.h" namespace ui { @@ -28,7 +28,7 @@ class CalendarViewController; // This view displays a calendar event entry. -class ASH_EXPORT CalendarEventListItemView : public ActionableView { +class ASH_EXPORT CalendarEventListItemView : public views::Button { public: METADATA_HEADER(CalendarEventListItemView); @@ -42,8 +42,7 @@ // views::View: void OnThemeChanged() override; - // ActionableView: - bool PerformAction(const ui::Event& event) override; + void PerformAction(const ui::Event& event); private: friend class CalendarViewEventListViewTest;
diff --git a/ash/system/time/calendar_event_list_item_view_jelly.cc b/ash/system/time/calendar_event_list_item_view_jelly.cc index 05e3c94..858ca19 100644 --- a/ash/system/time/calendar_event_list_item_view_jelly.cc +++ b/ash/system/time/calendar_event_list_item_view_jelly.cc
@@ -20,6 +20,7 @@ #include "ash/system/time/calendar_view_controller.h" #include "ash/system/time/event_date_formatter_util.h" #include "base/containers/fixed_flat_map.h" +#include "base/functional/bind.h" #include "base/strings/utf_string_conversions.h" #include "google_apis/calendar/calendar_api_response_types.h" #include "ui/base/l10n/l10n_util.h" @@ -181,11 +182,13 @@ google_apis::calendar::CalendarEvent event, UIParams ui_params, EventListItemIndex event_list_item_index) - : ActionableView(TrayPopupInkDropStyle::FILL_BOUNDS), - calendar_view_controller_(calendar_view_controller), + : calendar_view_controller_(calendar_view_controller), selected_date_params_(selected_date_params), event_url_(event.html_link()), video_conference_url_(event.conference_data_uri()) { + SetCallback(base::BindRepeating( + &CalendarEventListItemViewJelly::PerformAction, base::Unretained(this))); + SetLayoutManager(std::make_unique<views::FillLayout>()); const auto [start_time, end_time] = calendar_utils::GetStartAndEndTime( @@ -306,7 +309,7 @@ GetColorProvider()->GetColor(cros_tokens::kCrosSysSurface5))); } -bool CalendarEventListItemViewJelly::PerformAction(const ui::Event& event) { +void CalendarEventListItemViewJelly::PerformAction(const ui::Event& event) { DCHECK(event_url_.is_empty() || event_url_.is_valid()); calendar_view_controller_->RecordEventListItemActivated(event); @@ -317,7 +320,6 @@ Shell::Get()->system_tray_model()->client()->ShowCalendarEvent( event_url_, selected_date_params_.selected_date_midnight, opened_pwa, finalized_url); - return true; } void CalendarEventListItemViewJelly::SetUpFocusHighlight( @@ -333,7 +335,7 @@ views::HighlightPathGenerator::Install( this, std::make_unique<RoundedCornerHighlightPathGenerator>( item_corner_radius)); - // Unset the focus painter set by `ActionableView`. + // Unset the focus painter set by `HoverHighlightView`. SetFocusPainter(nullptr); }
diff --git a/ash/system/time/calendar_event_list_item_view_jelly.h b/ash/system/time/calendar_event_list_item_view_jelly.h index 7b870fb..d43d637 100644 --- a/ash/system/time/calendar_event_list_item_view_jelly.h +++ b/ash/system/time/calendar_event_list_item_view_jelly.h
@@ -6,10 +6,10 @@ #define ASH_SYSTEM_TIME_CALENDAR_EVENT_LIST_ITEM_VIEW_JELLY_H_ #include "ash/ash_export.h" -#include "ash/system/tray/actionable_view.h" #include "base/memory/raw_ptr.h" #include "google_apis/calendar/calendar_api_response_types.h" #include "ui/base/metadata/metadata_header_macros.h" +#include "ui/views/controls/button/button.h" #include "url/gurl.h" namespace ui { @@ -60,7 +60,7 @@ }; // This view displays a jelly version of a calendar event entry. -class ASH_EXPORT CalendarEventListItemViewJelly : public ActionableView { +class ASH_EXPORT CalendarEventListItemViewJelly : public views::Button { public: METADATA_HEADER(CalendarEventListItemViewJelly); @@ -79,8 +79,7 @@ // views::View: void OnThemeChanged() override; - // ActionableView: - bool PerformAction(const ui::Event& event) override; + void PerformAction(const ui::Event& event); // Sets up a custom highlight path for when the // `CalendarEventListItemViewJelly` view is focused. Conditionally follows the
diff --git a/ash/system/time/calendar_event_list_view_unittest.cc b/ash/system/time/calendar_event_list_view_unittest.cc index 20db9cd..f81ed8305 100644 --- a/ash/system/time/calendar_event_list_view_unittest.cc +++ b/ash/system/time/calendar_event_list_view_unittest.cc
@@ -133,12 +133,10 @@ ->GetText(); } - ActionableView* GetActionableView(int child_index) { + views::View* GetHighlightView(int child_index) { return features::IsCalendarJellyEnabled() - ? static_cast<ActionableView*>( - GetSameDayEventsContainer()->children()[child_index]) - : static_cast<ActionableView*>( - content_view()->children()[child_index]); + ? GetSameDayEventsContainer()->children()[child_index] + : content_view()->children()[child_index]; } size_t GetContentViewSize() { @@ -232,7 +230,7 @@ EXPECT_EQ(3u, GetContentViewSize()); // Launch the first item. - ActionableView* first_item = GetActionableView(0); + views::View* first_item = GetHighlightView(0); first_item->AcceleratorPressed( ui::Accelerator(ui::KeyboardCode::VKEY_SPACE, /*modifiers=*/0));
diff --git a/ash/system/time/time_view.cc b/ash/system/time/time_view.cc index 4cd96cae..a4ee8cc8 100644 --- a/ash/system/time/time_view.cc +++ b/ash/system/time/time_view.cc
@@ -150,9 +150,7 @@ } TimeView::TimeView(ClockLayout clock_layout, ClockModel* model, Type type) - : ActionableView(TrayPopupInkDropStyle::INSET_BOUNDS), - model_(model), - type_(type) { + : model_(model), type_(type) { SetTimer(GetTimeToShow()); SetFocusBehavior(FocusBehavior::NEVER); model_->AddObserver(this); @@ -295,12 +293,8 @@ return model_->hour_clock_type(); } -bool TimeView::PerformAction(const ui::Event& event) { - return false; -} - void TimeView::GetAccessibleNodeData(ui::AXNodeData* node_data) { - ActionableView::GetAccessibleNodeData(node_data); + views::View::GetAccessibleNodeData(node_data); node_data->role = ax::mojom::Role::kTime; } @@ -454,7 +448,7 @@ this, &TimeView::UpdateText); } -BEGIN_METADATA(TimeView, ActionableView) +BEGIN_METADATA(TimeView, views::View) END_METADATA } // namespace ash
diff --git a/ash/system/time/time_view.h b/ash/system/time/time_view.h index 3909bb6..7ab7095 100644 --- a/ash/system/time/time_view.h +++ b/ash/system/time/time_view.h
@@ -9,7 +9,6 @@ #include "ash/ash_export.h" #include "ash/system/model/clock_observer.h" -#include "ash/system/tray/actionable_view.h" #include "base/i18n/time_formatting.h" #include "base/memory/raw_ptr.h" #include "base/timer/timer.h" @@ -17,6 +16,7 @@ #include "ui/base/metadata/metadata_header_macros.h" #include "ui/gfx/font_list.h" #include "ui/gfx/shadow_value.h" +#include "ui/views/controls/button/button.h" #include "ui/views/view.h" namespace base { @@ -59,7 +59,7 @@ // Tray view used to display the current date or time based on the passed in // `Type`. Exported for tests. -class ASH_EXPORT TimeView : public ActionableView, public ClockObserver { +class ASH_EXPORT TimeView : public views::View, public ClockObserver { public: METADATA_HEADER(TimeView); @@ -113,9 +113,6 @@ friend class TimeViewTest; friend class TimeTrayItemViewTest; - // ActionableView: - bool PerformAction(const ui::Event& event) override; - // views::View: void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void ChildPreferredSizeChanged(views::View* child) override;
diff --git a/ash/system/tray/actionable_view.cc b/ash/system/tray/actionable_view.cc deleted file mode 100644 index c71b588..0000000 --- a/ash/system/tray/actionable_view.cc +++ /dev/null
@@ -1,93 +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 "ash/system/tray/actionable_view.h" - -#include "ash/style/style_util.h" -#include "ash/system/tray/tray_popup_utils.h" -#include "ash/system/tray/tray_utils.h" -#include "base/functional/bind.h" -#include "ui/accessibility/ax_enums.mojom.h" -#include "ui/accessibility/ax_node_data.h" -#include "ui/events/keycodes/keyboard_codes.h" -#include "ui/gfx/canvas.h" -#include "ui/gfx/geometry/rect_f.h" -#include "ui/views/animation/ink_drop.h" -#include "ui/views/animation/ink_drop_highlight.h" -#include "ui/views/animation/ink_drop_ripple.h" -#include "ui/views/painter.h" - -namespace ash { - -// static -const char ActionableView::kViewClassName[] = "tray/ActionableView"; - -ActionableView::ActionableView(TrayPopupInkDropStyle ink_drop_style) - : views::Button(base::BindRepeating(&ActionableView::ButtonPressed, - base::Unretained(this))), - ink_drop_style_(ink_drop_style) { - SetFocusBehavior(FocusBehavior::ALWAYS); - SetHasInkDropActionOnClick(false); - SetNotifyEnterExitOnChild(true); - // TODO(pbos): Replace the use of FocusPainter with the FocusRing (using the - // below HighlightPathGenerator). - SetInstallFocusRingOnFocus(false); - SetFocusPainter(TrayPopupUtils::CreateFocusPainter()); - TrayPopupUtils::InstallHighlightPathGenerator(this, ink_drop_style_); - views::InkDrop::Get(this)->SetCreateInkDropCallback(base::BindRepeating( - [](Button* host) { return StyleUtil::CreateInkDrop(host); }, this)); - views::InkDrop::Get(this)->SetCreateHighlightCallback( - base::BindRepeating(&StyleUtil::CreateInkDropHighlight, - base::Unretained(this), gfx::kPlaceholderColor)); - views::InkDrop::Get(this)->SetCreateRippleCallback(base::BindRepeating( - [](ActionableView* host) { - return StyleUtil::CreateInkDropRipple( - GetInkDropInsets(host->ink_drop_style_), host); - }, - this)); -} - -ActionableView::~ActionableView() { - if (destroyed_) - *destroyed_ = true; -} - -void ActionableView::HandlePerformActionResult(bool action_performed, - const ui::Event& event) { - views::InkDrop::Get(this)->AnimateToState( - action_performed ? views::InkDropState::ACTION_TRIGGERED - : views::InkDropState::HIDDEN, - ui::LocatedEvent::FromIfValid(&event)); -} - -const char* ActionableView::GetClassName() const { - return kViewClassName; -} - -bool ActionableView::OnKeyPressed(const ui::KeyEvent& event) { - if (GetState() != STATE_DISABLED && event.key_code() == ui::VKEY_SPACE) { - NotifyClick(event); - return true; - } - return Button::OnKeyPressed(event); -} - -void ActionableView::GetAccessibleNodeData(ui::AXNodeData* node_data) { - node_data->role = ax::mojom::Role::kButton; - node_data->SetName(GetAccessibleName()); -} - - -void ActionableView::ButtonPressed(const ui::Event& event) { - bool destroyed = false; - destroyed_ = &destroyed; - const bool action_performed = PerformAction(event); - if (destroyed) - return; - destroyed_ = nullptr; - - HandlePerformActionResult(action_performed, event); -} - -} // namespace ash
diff --git a/ash/system/tray/actionable_view.h b/ash/system/tray/actionable_view.h deleted file mode 100644 index bce9ec1..0000000 --- a/ash/system/tray/actionable_view.h +++ /dev/null
@@ -1,69 +0,0 @@ -// Copyright 2013 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ASH_SYSTEM_TRAY_ACTIONABLE_VIEW_H_ -#define ASH_SYSTEM_TRAY_ACTIONABLE_VIEW_H_ - -#include "ash/ash_export.h" -#include "ash/system/tray/tray_popup_ink_drop_style.h" -#include "base/memory/raw_ptr.h" -#include "ui/gfx/geometry/rect.h" -#include "ui/views/controls/button/button.h" - -namespace ash { - -// A focusable view that performs an action when user clicks on it, or presses -// enter or space when focused. Note that the action is triggered on mouse-up, -// instead of on mouse-down. So if user presses the mouse on the view, then -// moves the mouse out of the view and then releases, then the action will not -// be performed. -// Exported for SystemTray. -// -// TODO(bruthig): Consider removing ActionableView and make clients use -// Buttons instead. (See crbug.com/614453) -class ASH_EXPORT ActionableView : public views::Button { - public: - static const char kViewClassName[]; - - explicit ActionableView(TrayPopupInkDropStyle ink_drop_style); - - ActionableView(const ActionableView&) = delete; - ActionableView& operator=(const ActionableView&) = delete; - - ~ActionableView() override; - - protected: - // Performs an action when user clicks on the view (on mouse-press event), or - // presses a key when this view is in focus. Returns true if the event has - // been handled and an action was performed. Returns false otherwise. - virtual bool PerformAction(const ui::Event& event) = 0; - - // Called after PerformAction() to act upon its result, including showing - // appropriate ink drop ripple. This will not get called if the view is - // destroyed during PerformAction(). Default implementation shows triggered - // ripple if action is performed or hides existing ripple if no action is - // performed. Subclasses can override to change the default behavior. - virtual void HandlePerformActionResult(bool action_performed, - const ui::Event& event); - - // Overridden from views::Button. - const char* GetClassName() const override; - bool OnKeyPressed(const ui::KeyEvent& event) override; - void GetAccessibleNodeData(ui::AXNodeData* node_data) override; - - private: - void ButtonPressed(const ui::Event& event); - - // Used by ButtonPressed() to determine whether |this| has been destroyed as a - // result of performing the associated action. This is necessary because in - // the not-destroyed case ButtonPressed() uses member variables. - raw_ptr<bool, ExperimentalAsh> destroyed_ = nullptr; - - // Defines the flavor of ink drop ripple/highlight that should be constructed. - const TrayPopupInkDropStyle ink_drop_style_; -}; - -} // namespace ash - -#endif // ASH_SYSTEM_TRAY_ACTIONABLE_VIEW_H_
diff --git a/ash/system/tray/hover_highlight_view.cc b/ash/system/tray/hover_highlight_view.cc index cc94fe4..1fc811cd 100644 --- a/ash/system/tray/hover_highlight_view.cc +++ b/ash/system/tray/hover_highlight_view.cc
@@ -10,22 +10,28 @@ #include "ash/resources/vector_icons/vector_icons.h" #include "ash/strings/grit/ash_strings.h" #include "ash/style/ash_color_id.h" +#include "ash/style/style_util.h" #include "ash/style/typography.h" #include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_popup_utils.h" +#include "ash/system/tray/tray_utils.h" #include "ash/system/tray/tri_view.h" #include "ash/system/tray/unfocusable_label.h" #include "ash/system/tray/view_click_listener.h" +#include "base/functional/bind.h" #include "chromeos/constants/chromeos_features.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_node_data.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/models/image_model.h" -#include "ui/gfx/canvas.h" +#include "ui/chromeos/styles/cros_tokens_color_mappings.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/animation/ink_drop.h" +#include "ui/views/animation/ink_drop_highlight.h" +#include "ui/views/animation/ink_drop_state.h" #include "ui/views/border.h" +#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" @@ -34,10 +40,17 @@ namespace ash { +// TODO(https://b/302232457): Rename this class since UX no longer requires a +// highlight to be shown when this view has a mouse hovered on it. HoverHighlightView::HoverHighlightView(ViewClickListener* listener) - : ActionableView(TrayPopupInkDropStyle::FILL_BOUNDS), listener_(listener) { - SetNotifyEnterExitOnChild(true); - views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON); + : listener_(listener) { + SetCallback(base::BindRepeating(&HoverHighlightView::PerformAction, + base::Unretained(this))); + + TrayPopupUtils::ConfigureRowButtonInkdrop(views::InkDrop::Get(this)); + SetHasInkDropActionOnClick(true); + SetFocusPainter(TrayPopupUtils::CreateFocusPainter()); + views::FocusRing::Get(this)->SetColorId(cros_tokens::kCrosSysFocusRing); } HoverHighlightView::~HoverHighlightView() = default; @@ -244,12 +257,12 @@ } } -bool HoverHighlightView::PerformAction(const ui::Event& event) { +void HoverHighlightView::PerformAction() { if (!listener_) { - return false; + return; } + listener_->OnViewClicked(this); - return true; } void HoverHighlightView::GetAccessibleNodeData(ui::AXNodeData* node_data) { @@ -266,7 +279,7 @@ node_data->SetDescription( l10n_util::GetStringUTF16(IDS_ASH_A11Y_ROLE_BUTTON)); } else { - ActionableView::GetAccessibleNodeData(node_data); + views::Button::GetAccessibleNodeData(node_data); } ax::mojom::CheckedState checked_state; @@ -285,7 +298,7 @@ } gfx::Size HoverHighlightView::CalculatePreferredSize() const { - gfx::Size size = ActionableView::CalculatePreferredSize(); + gfx::Size size = views::Button::CalculatePreferredSize(); if (!expandable_ || size.height() < kTrayPopupItemMinHeight) { size.set_height(kTrayPopupItemMinHeight); @@ -300,7 +313,7 @@ void HoverHighlightView::OnFocus() { ScrollRectToVisible(gfx::Rect(gfx::Point(), size())); - ActionableView::OnFocus(); + views::Button::OnFocus(); } void HoverHighlightView::AddSubRowContainer() { @@ -326,7 +339,7 @@ } } -BEGIN_METADATA(HoverHighlightView, ActionableView) +BEGIN_METADATA(HoverHighlightView, views::Button) END_METADATA } // namespace ash
diff --git a/ash/system/tray/hover_highlight_view.h b/ash/system/tray/hover_highlight_view.h index f794fcb..d0c92ff 100644 --- a/ash/system/tray/hover_highlight_view.h +++ b/ash/system/tray/hover_highlight_view.h
@@ -7,13 +7,14 @@ #include <memory> -#include "ash/system/tray/actionable_view.h" +#include "ash/ash_export.h" #include "base/functional/bind.h" #include "base/memory/raw_ptr.h" #include "ui/base/metadata/metadata_header_macros.h" #include "ui/base/models/image_model.h" #include "ui/gfx/font.h" #include "ui/gfx/text_constants.h" +#include "ui/views/controls/button/button.h" namespace views { class Border; @@ -28,7 +29,7 @@ // A view that changes background color on hover, and triggers a callback in the // associated ViewClickListener on click. The view can also be forced to // maintain a fixed height. -class ASH_EXPORT HoverHighlightView : public ActionableView { +class ASH_EXPORT HoverHighlightView : public views::Button { public: enum class AccessibilityState { // The default accessibility view. @@ -121,8 +122,7 @@ private: friend class TrayAccessibilityTest; - // ActionableView: - bool PerformAction(const ui::Event& event) override; + void PerformAction(); // views::View: gfx::Size CalculatePreferredSize() const override;
diff --git a/ash/system/tray/tray_background_view.h b/ash/system/tray/tray_background_view.h index 08bc86f8..6ff3eb75 100644 --- a/ash/system/tray/tray_background_view.h +++ b/ash/system/tray/tray_background_view.h
@@ -35,11 +35,9 @@ class TrayContainer; // Base class for some children of StatusAreaWidget. This class handles setting -// and animating the background when the Launcher is shown/hidden. It also -// inherits from ActionableView so that the tray items can override -// PerformAction when clicked on. Note that events targeting a -// `TrayBackgroundView`'s view hierarchy are ignored while the -// `TrayBackgroundView`'s hide animation is running. +// and animating the background when the Launcher is shown/hidden. Note that +// events targeting a `TrayBackgroundView`'s view hierarchy are ignored while +// the `TrayBackgroundView`'s hide animation is running. class ASH_EXPORT TrayBackgroundView : public views::Button, public views::ContextMenuController, public ShelfBackgroundAnimatorObserver,
diff --git a/ash/system/tray/tray_detailed_view.cc b/ash/system/tray/tray_detailed_view.cc index 626ee98..44538d3 100644 --- a/ash/system/tray/tray_detailed_view.cc +++ b/ash/system/tray/tray_detailed_view.cc
@@ -517,7 +517,7 @@ views::InstallRoundRectHighlightPathGenerator(item, gfx::Insets(2), /*corner_radius=*/0); views::FocusRing::Get(item)->SetColorId(cros_tokens::kCrosSysFocusRing); - // Unset the focus painter set by `ActionableView`. + // Unset the focus painter set by `HoverHighlightView`. item->SetFocusPainter(nullptr); }
diff --git a/ash/system/tray/tray_popup_utils.cc b/ash/system/tray/tray_popup_utils.cc index 25589c4f..3ff3b1a 100644 --- a/ash/system/tray/tray_popup_utils.cc +++ b/ash/system/tray/tray_popup_utils.cc
@@ -34,6 +34,7 @@ #include "ui/gfx/geometry/rrect_f.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/vector_icon_utils.h" +#include "ui/views/animation/ink_drop_host.h" #include "ui/views/border.h" #include "ui/views/controls/button/button.h" #include "ui/views/controls/button/md_text_button.h" @@ -249,6 +250,12 @@ view->layer()->SetFillsBoundsOpaquely(false); } +void TrayPopupUtils::ConfigureRowButtonInkdrop(views::InkDropHost* ink_drop) { + ink_drop->SetMode(views::InkDropHost::InkDropMode::ON); + ink_drop->SetVisibleOpacity(1.0f); // The colors already contain opacity + ink_drop->SetBaseColorId(cros_tokens::kCrosSysRippleNeutralOnSubtle); +} + views::LabelButton* TrayPopupUtils::CreateTrayPopupButton( views::Button::PressedCallback callback, const std::u16string& text) {
diff --git a/ash/system/tray/tray_popup_utils.h b/ash/system/tray/tray_popup_utils.h index 0305af43..777375d2 100644 --- a/ash/system/tray/tray_popup_utils.h +++ b/ash/system/tray/tray_popup_utils.h
@@ -132,9 +132,12 @@ // Creates a default focus painter used for most things in tray popups. static std::unique_ptr<views::Painter> CreateFocusPainter(); - // Sets up |view| to be a sticky header in a tray detail scroll view. + // Sets up `view` to be a sticky header in a tray detail scroll view. static void ConfigureAsStickyHeader(views::View* view); + // Sets up `ink_drop` according to jelly ux requirements for row buttons. + static void ConfigureRowButtonInkdrop(views::InkDropHost* ink_drop); + // Creates a button for use in the system menu. For MD, this is a prominent // text // button. For non-MD, this does the same thing as the above. Caller assumes
diff --git a/ash/webui/settings/public/constants/setting.mojom b/ash/webui/settings/public/constants/setting.mojom index 91f871c6..da4aac9 100644 --- a/ash/webui/settings/public/constants/setting.mojom +++ b/ash/webui/settings/public/constants/setting.mojom
@@ -242,6 +242,7 @@ kShowPKAutoCorrection = 1209, kShowVKAutoCorrection = 1210, kShowDiacritic = 1211, + kShowOrca = 1212, // Files section. kGoogleDriveConnection = 1300,
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc index 1f1dabf..895bcb73 100644 --- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc +++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
@@ -188,6 +188,10 @@ ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, ui::Accelerator::KeyState::PRESSED), IDS_AMBIENT_ACCELERATOR_DESCRIPTION_ACTIVATE_INDEXED_DESK}, + {ui::Accelerator(ui::VKEY_ESCAPE, + ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, + ui::Accelerator::KeyState::PRESSED), + IDS_ASH_ACCELERATOR_DESCRIPTION_UNPIN}, }); // Raw accelerator data may result in the same shortcut being displayed multiple
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h b/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h index 90109fa7..b2b0e1a 100644 --- a/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h +++ b/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h
@@ -273,6 +273,7 @@ AcceleratorAction::kTouchHudClear, AcceleratorAction::kTouchHudModeChange, AcceleratorAction::kVolumeMuteToggle, + AcceleratorAction::kUnpin, }); // A fixed array of accelerator layouts used for categorization and styling of @@ -426,10 +427,6 @@ mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {AcceleratorAction::kUnpin, IDS_ASH_ACCELERATOR_DESCRIPTION_UNPIN, - mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, - /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, - mojom::AcceleratorSource::kAsh}, {AcceleratorAction::kToggleResizeLockMenu, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_RESIZE_LOCK_MENU, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps,
diff --git a/ash/wm/snap_group/snap_group_unittest.cc b/ash/wm/snap_group/snap_group_unittest.cc index fc117212..899c1168 100644 --- a/ash/wm/snap_group/snap_group_unittest.cc +++ b/ash/wm/snap_group/snap_group_unittest.cc
@@ -55,6 +55,7 @@ #include "base/timer/timer.h" #include "chromeos/constants/chromeos_features.h" #include "chromeos/ui/base/window_state_type.h" +#include "ui/aura/client/aura_constants.h" #include "ui/aura/test/test_window_delegate.h" #include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" #include "ui/base/hit_test.h" @@ -62,7 +63,6 @@ #include "ui/compositor/layer.h" #include "ui/display/test/display_manager_test_api.h" #include "ui/events/event_constants.h" -#include "ui/events/keycodes/keyboard_codes_posix.h" #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/point_conversions.h" #include "ui/gfx/geometry/rect.h" @@ -72,6 +72,7 @@ #include "ui/gfx/image/image_unittest_util.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/widget/widget.h" +#include "ui/wm/core/window_modality_controller.h" #include "ui/wm/core/window_util.h" namespace ash { @@ -551,6 +552,14 @@ return window; } + std::unique_ptr<aura::Window> CreateTransientChildWindow( + gfx::Rect child_window_bounds, + aura::Window* transient_parent) { + auto child = CreateTestWindow(child_window_bounds); + wm::AddTransientChild(transient_parent, child.get()); + return child; + } + private: base::test::ScopedFeatureList scoped_feature_list_; }; @@ -773,7 +782,7 @@ // Tests that the split view divider will be stacked on top of both windows in // the snap group and that on a third window activated the split view divider // will be stacked below the newly activated window. -TEST_F(SnapGroupEntryPointArm1Test, SplitViewDividerStackingOrderTest) { +TEST_F(SnapGroupEntryPointArm1Test, DividerStackingOrderTest) { std::unique_ptr<aura::Window> w1(CreateTestWindow()); std::unique_ptr<aura::Window> w2(CreateTestWindow()); SnapTwoTestWindowsInArm1(w1.get(), w2.get()); @@ -798,6 +807,76 @@ EXPECT_TRUE(window_util::IsStackedBelow(w2.get(), divider_window)); } +// Tests that divider will be closely tied to the windows in a snap group, which +// will also apply on transient window added. +TEST_F(SnapGroupEntryPointArm1Test, DividerStackingOrderWithTransientWindow) { + std::unique_ptr<aura::Window> w1(CreateTestWindow()); + std::unique_ptr<aura::Window> w2(CreateTestWindow()); + SnapTwoTestWindowsInArm1(w1.get(), w2.get()); + wm::ActivateWindow(w1.get()); + + SplitViewDivider* divider = split_view_divider(); + ASSERT_TRUE(divider); + auto* divider_widget = divider->divider_widget(); + aura::Window* divider_window = divider_widget->GetNativeWindow(); + EXPECT_TRUE(window_util::IsStackedBelow(w2.get(), w1.get())); + EXPECT_TRUE(window_util::IsStackedBelow(w1.get(), divider_window)); + EXPECT_TRUE(window_util::IsStackedBelow(w2.get(), divider_window)); + + auto w1_transient = + CreateTransientChildWindow(gfx::Rect(100, 200, 200, 200), w1.get()); + w1_transient->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); + wm::SetModalParent(w1_transient.get(), w1.get()); + EXPECT_TRUE(window_util::IsStackedBelow(divider_window, w1_transient.get())); +} + +// Tests the overall stacking order with two transient windows each of which +// belongs to a window in snap group is expected. The tests is to verify the +// transient windows issue showed in http://b/297448600#comment2. +TEST_F(SnapGroupEntryPointArm1Test, + DividerStackingOrderWithTwoTransientWindows) { + std::unique_ptr<aura::Window> w1(CreateTestWindow()); + std::unique_ptr<aura::Window> w2(CreateTestWindow()); + SnapTwoTestWindowsInArm1(w1.get(), w2.get()); + + SplitViewDivider* divider = split_view_divider(); + ASSERT_TRUE(divider); + auto* divider_widget = divider->divider_widget(); + aura::Window* divider_window = divider_widget->GetNativeWindow(); + ASSERT_TRUE(window_util::IsStackedBelow(w1.get(), w2.get())); + ASSERT_TRUE(window_util::IsStackedBelow(w1.get(), divider_window)); + ASSERT_TRUE(window_util::IsStackedBelow(w2.get(), divider_window)); + + // By default `w1_transient` is `MODAL_TYPE_NONE`, meaning that the associated + // `w1` interactable. + std::unique_ptr<aura::Window> w1_transient( + CreateTransientChildWindow(gfx::Rect(10, 20, 20, 30), w1.get())); + + // Add transient window for `w2` and making it not interactable by setting it + // with the type of `ui::MODAL_TYPE_WINDOW`. + std::unique_ptr<aura::Window> w2_transient( + CreateTransientChildWindow(gfx::Rect(200, 20, 20, 30), w2.get())); + w2_transient->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); + wm::SetModalParent(w2_transient.get(), w2.get()); + + // The expected stacking order is as follows: + // TOP + // `w2_transient` | + // | | + // divider | + // | | + // `w2` | + // | | + // `w1_transient` | + // | | + // `w1` | + // BOTTOM + EXPECT_TRUE(window_util::IsStackedBelow(divider_window, w2_transient.get())); + EXPECT_TRUE( + window_util::IsStackedBelow(w1_transient.get(), w2_transient.get())); + EXPECT_TRUE(window_util::IsStackedBelow(w1_transient.get(), divider_window)); +} + // Tests that the union bounds of the primary window, secondary window in a snap // group and the split view divider will be equal to the work area bounds both // in horizontal and vertical split view mode.
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc index e7b5864..c3b36381 100644 --- a/ash/wm/splitview/split_view_controller_unittest.cc +++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -82,6 +82,7 @@ #include "ui/views/widget/widget.h" #include "ui/wm/core/shadow_controller.h" #include "ui/wm/core/shadow_types.h" +#include "ui/wm/core/transient_window_manager.h" #include "ui/wm/core/window_util.h" namespace ash {
diff --git a/ash/wm/splitview/split_view_divider.cc b/ash/wm/splitview/split_view_divider.cc index cebc24c0..18fd02b 100644 --- a/ash/wm/splitview/split_view_divider.cc +++ b/ash/wm/splitview/split_view_divider.cc
@@ -8,7 +8,6 @@ #include <memory> #include "ash/display/screen_orientation_controller.h" -#include "ash/public/cpp/shell_window_ids.h" #include "ash/screen_util.h" #include "ash/shell.h" #include "ash/wm/desks/desks_util.h" @@ -21,7 +20,6 @@ #include "ash/wm/window_util.h" #include "base/auto_reset.h" #include "base/check.h" -#include "base/check_op.h" #include "base/containers/contains.h" #include "base/ranges/algorithm.h" #include "ui/aura/window_targeter.h" @@ -66,11 +64,18 @@ } SplitViewDivider::~SplitViewDivider() { + auto* divider_window = divider_widget_->GetNativeWindow(); + if (auto* transient_parent = wm::GetTransientParent(divider_window)) { + wm::RemoveTransientChild(transient_parent, divider_window); + } + divider_widget_->Close(); + for (auto* window : observed_windows_) { window->RemoveObserver(this); - ::wm::TransientWindowManager::GetOrCreate(window)->RemoveObserver(this); + wm::TransientWindowManager::GetOrCreate(window)->RemoveObserver(this); } + dragged_window_ = nullptr; observed_windows_.clear(); } @@ -255,8 +260,8 @@ CHECK(!base::Contains(observed_windows_, window)); window->AddObserver(this); observed_windows_.push_back(window); - ::wm::TransientWindowManager* transient_manager = - ::wm::TransientWindowManager::GetOrCreate(window); + wm::TransientWindowManager* transient_manager = + wm::TransientWindowManager::GetOrCreate(window); transient_manager->AddObserver(this); for (auto* transient_window : transient_manager->transient_children()) { StartObservingTransientChild(transient_window); @@ -269,8 +274,8 @@ if (iter != observed_windows_.end()) { window->RemoveObserver(this); observed_windows_.erase(iter); - ::wm::TransientWindowManager* transient_manager = - ::wm::TransientWindowManager::GetOrCreate(window); + wm::TransientWindowManager* transient_manager = + wm::TransientWindowManager::GetOrCreate(window); transient_manager->RemoveObserver(this); for (auto* transient_window : transient_manager->transient_children()) { StopObservingTransientChild(transient_window); @@ -309,7 +314,7 @@ // |observed_windows_|. aura::Window* transient_parent = nullptr; for (auto* observed_window : observed_windows_) { - if (::wm::HasTransientAncestor(window, observed_window)) { + if (wm::HasTransientAncestor(window, observed_window)) { transient_parent = observed_window; break; } @@ -324,12 +329,6 @@ } void SplitViewDivider::OnWindowStackingChanged(aura::Window* window) { - // Skip the recursive update. - if (pause_update_) { - return; - } - - base::AutoReset<bool> lock(&pause_update_, true); RefreshStackingOrder(); } @@ -386,10 +385,22 @@ -kSplitViewDividerExtraInset)); divider_widget_native_window->SetEventTargeter(std::move(window_targeter)); + // Explicitly `set_parent_controls_lifetime` to false so that the lifetime of + // the divider will only be managed by `this`, which avoids UAF on window + // destroying. + wm::TransientWindowManager::GetOrCreate(divider_widget_native_window) + ->set_parent_controls_lifetime(false); divider_widget_->Show(); } void SplitViewDivider::RefreshStackingOrder() { + // Skip the recursive update. + if (pause_update_) { + return; + } + + base::AutoReset<bool> lock(&pause_update_, true); + if (observed_windows_.empty() || !divider_widget_) { return; } @@ -402,12 +413,21 @@ dragged_window_ ? dragged_window_.get() : top_window; CHECK(divider_sibling_window); + // To get `divider_window` prepared to be the transient window of the + // `top_window` below, remove `divider_window` as the transient child from its + // transient parent if any. + auto* transient_parent = wm::GetTransientParent(divider_window); + if (transient_parent) { + wm::RemoveTransientChild(transient_parent, divider_window); + } + + CHECK(!wm::GetTransientParent(divider_window)); + // The divider needs to have the same parent of the `divider_sibling_window` // otherwise we need to reparent the divider as below. if (divider_sibling_window->parent() != divider_window->parent()) { views::Widget::ReparentNativeView(divider_window, divider_sibling_window->parent()); - CHECK(!wm::GetTransientParent(divider_window)); } if (dragged_window_) { @@ -435,10 +455,22 @@ top_window_parent->StackChildAbove(top_window, window); } + // Add the `divider_window` as a transient child of the `top_window`. In + // this way, on new transient window added, the divider will be stacked above + // the `top_window` but under the new transient window which is handled in + // `TransientWindowManager::RestackTransientDescendants()`. + wm::AddTransientChild(top_window, divider_window); + top_window_parent->StackChildAbove(divider_window, top_window); } void SplitViewDivider::StartObservingTransientChild(aura::Window* transient) { + // Explicitly check and early return if the `transient` is the divider native + // window. + if (divider_widget_ && transient == divider_widget_->GetNativeWindow()) { + return; + } + // For now, we only care about dialog bubbles type transient child. We may // observe other types transient child window as well if need arises in the // future.
diff --git a/base/features.cc b/base/features.cc index b7dc8ce0..89bacef 100644 --- a/base/features.cc +++ b/base/features.cc
@@ -28,10 +28,6 @@ // Optimizes parsing and loading of data: URLs. BASE_FEATURE(kOptimizeDataUrls, "OptimizeDataUrls", FEATURE_ENABLED_BY_DEFAULT); -BASE_FEATURE(kSupportsUserDataFlatHashMap, - "SupportsUserDataFlatHashMap", - FEATURE_DISABLED_BY_DEFAULT); - BASE_FEATURE(kUseRustJsonParser, "UseRustJsonParser", FEATURE_DISABLED_BY_DEFAULT);
diff --git a/base/features.h b/base/features.h index 756445ec..7e8af19 100644 --- a/base/features.h +++ b/base/features.h
@@ -21,8 +21,6 @@ BASE_EXPORT BASE_DECLARE_FEATURE(kOptimizeDataUrls); -BASE_EXPORT BASE_DECLARE_FEATURE(kSupportsUserDataFlatHashMap); - BASE_EXPORT BASE_DECLARE_FEATURE(kUseRustJsonParser); BASE_EXPORT BASE_DECLARE_FEATURE(kJsonNegativeZero);
diff --git a/base/functional/callback_helpers.h b/base/functional/callback_helpers.h index 1b44aeb..187cec4 100644 --- a/base/functional/callback_helpers.h +++ b/base/functional/callback_helpers.h
@@ -141,22 +141,45 @@ return std::make_pair(wrapped_once, wrapped_once); } -// Convenience helper to allow a `closure` to be used in a context which is -// expecting a callback with arguments. Returns a null callback if `closure` is -// null. -template <typename... Args> -RepeatingCallback<void(Args...)> IgnoreArgs(RepeatingClosure closure) { - return closure ? BindRepeating([](Args...) {}).Then(std::move(closure)) - : RepeatingCallback<void(Args...)>(); +// Adapts `callback` for use in a context which is expecting a callback with +// additional parameters. Returns a null callback if `callback` is null. +// +// Usage: +// void LogError(char* error_message) { +// if (error_message) { +// cout << "Log: " << error_message << endl; +// } +// } +// base::RepeatingCallback<void(int, char*)> cb = +// base::IgnoreArgs<int>(base::BindRepeating(&LogError)); +// cb.Run(42, nullptr); +// +// Note in the example above that the type(s) passed to `IgnoreArgs` +// represent the additional prepended parameters (those which will be +// "ignored"). +template <typename... Preargs, typename... Args> +RepeatingCallback<void(Preargs..., Args...)> IgnoreArgs( + RepeatingCallback<void(Args...)> callback) { + return callback ? BindRepeating( + [](RepeatingCallback<void(Args...)> callback, + Preargs..., Args... args) { + std::move(callback).Run(std::forward<Args>(args)...); + }, + std::move(callback)) + : RepeatingCallback<void(Preargs..., Args...)>(); } -// Convenience helper to allow a `closure` to be used in a context which is -// expecting a callback with arguments. Returns a null callback if `closure` is -// null. -template <typename... Args> -OnceCallback<void(Args...)> IgnoreArgs(OnceClosure closure) { - return closure ? BindOnce([](Args...) {}).Then(std::move(closure)) - : OnceCallback<void(Args...)>(); +// As above, but for OnceCallback. +template <typename... Preargs, typename... Args> +OnceCallback<void(Preargs..., Args...)> IgnoreArgs( + OnceCallback<void(Args...)> callback) { + return callback ? BindOnce( + [](OnceCallback<void(Args...)> callback, Preargs..., + Args... args) { + std::move(callback).Run(std::forward<Args>(args)...); + }, + std::move(callback)) + : OnceCallback<void(Preargs..., Args...)>(); } // ScopedClosureRunner is akin to std::unique_ptr<> for Closures. It ensures
diff --git a/base/functional/callback_helpers_unittest.cc b/base/functional/callback_helpers_unittest.cc index 4b50a73..060a9342 100644 --- a/base/functional/callback_helpers_unittest.cc +++ b/base/functional/callback_helpers_unittest.cc
@@ -289,6 +289,19 @@ EXPECT_EQ(2, count); std::move(once_int_cb).Run(42); EXPECT_EQ(3, count); + + // Ignore only some (one) argument and forward the rest. + auto repeating_callback = base::BindRepeating(&Increment); + auto repeating_cb_with_extra_arg = base::IgnoreArgs<bool>(repeating_callback); + repeating_cb_with_extra_arg.Run(false, &count); + EXPECT_EQ(4, count); + + // Ignore two arguments and forward the rest. + auto once_callback = base::BindOnce(&Increment); + auto once_cb_with_extra_arg = + base::IgnoreArgs<char, bool>(repeating_callback); + std::move(once_cb_with_extra_arg).Run('d', false, &count); + EXPECT_EQ(5, count); } TEST(CallbackHelpersTest, IgnoreArgs_EmptyCallback) {
diff --git a/base/metrics/persistent_histogram_allocator.h b/base/metrics/persistent_histogram_allocator.h index 24c386f..9490f6d 100644 --- a/base/metrics/persistent_histogram_allocator.h +++ b/base/metrics/persistent_histogram_allocator.h
@@ -296,6 +296,13 @@ // Sets the internal |ranges_manager_|, which will be used by the allocator to // register BucketRanges. Takes ownership of the passed |ranges_manager|. + // + // WARNING: Since histograms may be created from |this| from multiple threads, + // for example through a direct call to CreateHistogram(), or while iterating + // through |this|, then the passed manager may also be accessed concurrently. + // Hence, care must be taken to ensure that either: + // 1) The passed manager is threadsafe (see ThreadSafeRangesManager), or + // 2) |this| is not used concurrently. void SetRangesManager(RangesManager* ranges_manager); // Clears the internal |last_created_| reference so testing can validate
diff --git a/base/metrics/ranges_manager.cc b/base/metrics/ranges_manager.cc index 11ead37..e8d99c6 100644 --- a/base/metrics/ranges_manager.cc +++ b/base/metrics/ranges_manager.cc
@@ -9,8 +9,9 @@ RangesManager::RangesManager() = default; RangesManager::~RangesManager() { - if (!do_not_release_ranges_on_destroy_for_testing_) + if (!do_not_release_ranges_on_destroy_for_testing_) { ReleaseBucketRanges(); + } } size_t RangesManager::BucketRangesHash::operator()( @@ -33,25 +34,64 @@ // Attempt to insert |ranges| into the set of registered BucketRanges. If an // equivalent one already exists (one with the exact same ranges), this // fetches the pre-existing one and does not insert the passed |ranges|. - return *ranges_.insert(ranges).first; + return *GetRanges().insert(ranges).first; } std::vector<const BucketRanges*> RangesManager::GetBucketRanges() const { std::vector<const BucketRanges*> out; - out.reserve(ranges_.size()); - out.assign(ranges_.begin(), ranges_.end()); + out.reserve(GetRanges().size()); + out.assign(GetRanges().begin(), GetRanges().end()); return out; } void RangesManager::ReleaseBucketRanges() { - for (auto* range : ranges_) { + for (auto* range : GetRanges()) { delete range; } - ranges_.clear(); + GetRanges().clear(); +} + +RangesManager::RangesMap& RangesManager::GetRanges() { + return ranges_; +} + +const RangesManager::RangesMap& RangesManager::GetRanges() const { + return ranges_; } void RangesManager::DoNotReleaseRangesOnDestroyForTesting() { do_not_release_ranges_on_destroy_for_testing_ = true; } +ThreadSafeRangesManager::ThreadSafeRangesManager() = default; + +ThreadSafeRangesManager::~ThreadSafeRangesManager() = default; + +const BucketRanges* ThreadSafeRangesManager::GetOrRegisterCanonicalRanges( + const BucketRanges* ranges) { + base::AutoLock auto_lock(lock_); + return RangesManager::GetOrRegisterCanonicalRanges(ranges); +} + +std::vector<const BucketRanges*> ThreadSafeRangesManager::GetBucketRanges() + const { + base::AutoLock auto_lock(lock_); + return RangesManager::GetBucketRanges(); +} + +void ThreadSafeRangesManager::ReleaseBucketRanges() { + base::AutoLock auto_lock(lock_); + RangesManager::ReleaseBucketRanges(); +} + +RangesManager::RangesMap& ThreadSafeRangesManager::GetRanges() { + lock_.AssertAcquired(); + return RangesManager::GetRanges(); +} + +const RangesManager::RangesMap& ThreadSafeRangesManager::GetRanges() const { + lock_.AssertAcquired(); + return RangesManager::GetRanges(); +} + } // namespace base
diff --git a/base/metrics/ranges_manager.h b/base/metrics/ranges_manager.h index f9fd7ed0..e6e706bc 100644 --- a/base/metrics/ranges_manager.h +++ b/base/metrics/ranges_manager.h
@@ -6,8 +6,11 @@ #define BASE_METRICS_RANGES_MANAGER_H_ #include <unordered_set> +#include <vector> + #include "base/base_export.h" #include "base/metrics/bucket_ranges.h" +#include "base/synchronization/lock.h" namespace base { @@ -24,18 +27,19 @@ RangesManager(const RangesManager&) = delete; RangesManager& operator=(const RangesManager&) = delete; - ~RangesManager(); + virtual ~RangesManager(); // Gets the canonical BucketRanges object corresponding to `ranges`. If one // does not exist, then `ranges` will be registered with this object, which // will take ownership of it. Returns a pointer to the canonical ranges // object. If it's different than `ranges`, the caller is responsible for // deleting `ranges`. - const BucketRanges* GetOrRegisterCanonicalRanges(const BucketRanges* ranges); + virtual const BucketRanges* GetOrRegisterCanonicalRanges( + const BucketRanges* ranges); // Gets all registered BucketRanges. The order of returned BucketRanges is not // guaranteed. - std::vector<const BucketRanges*> GetBucketRanges() const; + virtual std::vector<const BucketRanges*> GetBucketRanges() const; // Some tests may instantiate temporary StatisticsRecorders, each having their // own RangesManager. During the tests, ranges may get registered with a @@ -44,11 +48,7 @@ // deleted. void DoNotReleaseRangesOnDestroyForTesting(); - private: - // Removes all registered BucketRanges and destroys them. This is called in - // the destructor. - void ReleaseBucketRanges(); - + protected: // Used to get the hash of a BucketRanges, which is simply its checksum. struct BucketRangesHash { size_t operator()(const BucketRanges* a) const; @@ -65,6 +65,14 @@ unordered_set<const BucketRanges*, BucketRangesHash, BucketRangesEqual> RangesMap; + // Removes all registered BucketRanges and destroys them. This is called in + // the destructor. + virtual void ReleaseBucketRanges(); + + virtual RangesMap& GetRanges(); + virtual const RangesMap& GetRanges() const; + + private: // The set of unique BucketRanges registered to the RangesManager. RangesMap ranges_; @@ -73,6 +81,31 @@ bool do_not_release_ranges_on_destroy_for_testing_ = false; }; +class BASE_EXPORT ThreadSafeRangesManager final : public RangesManager { + public: + ThreadSafeRangesManager(); + + ThreadSafeRangesManager(const RangesManager&) = delete; + ThreadSafeRangesManager& operator=(const ThreadSafeRangesManager&) = delete; + + ~ThreadSafeRangesManager() override; + + // RangesManager: + const BucketRanges* GetOrRegisterCanonicalRanges( + const BucketRanges* ranges) override; + std::vector<const BucketRanges*> GetBucketRanges() const override; + + protected: + // RangesManager: + void ReleaseBucketRanges() override; + RangesMap& GetRanges() override; + const RangesMap& GetRanges() const override; + + private: + // Used to protect access to |ranges_|. + mutable base::Lock lock_; +}; + } // namespace base #endif // BASE_METRICS_RANGES_MANAGER_H_
diff --git a/base/supports_user_data.cc b/base/supports_user_data.cc index f8a569df..d8d2fb01 100644 --- a/base/supports_user_data.cc +++ b/base/supports_user_data.cc
@@ -5,7 +5,6 @@ #include "base/supports_user_data.h" #include "base/feature_list.h" -#include "base/features.h" #include "base/sequence_checker.h" namespace base { @@ -14,10 +13,7 @@ return nullptr; } -SupportsUserData::SupportsUserData() - : user_data_(FeatureList::IsEnabled(features::kSupportsUserDataFlatHashMap) - ? MapVariants(FlatDataMap()) - : MapVariants(DataMap())) { +SupportsUserData::SupportsUserData() { // Harmless to construct on a different execution sequence to subsequent // usage. DETACH_FROM_SEQUENCE(sequence_checker_); @@ -30,15 +26,11 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Avoid null keys; they are too vulnerable to collision. DCHECK(key); - return absl::visit( - [key](const auto& map) -> Data* { - auto found = map.find(key); - if (found != map.end()) { - return found->second.get(); - } - return nullptr; - }, - user_data_); + auto found = user_data_.find(key); + if (found != user_data_.end()) { + return found->second.get(); + } + return nullptr; } std::unique_ptr<SupportsUserData::Data> SupportsUserData::TakeUserData( @@ -46,28 +38,25 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Null keys are too vulnerable to collision. CHECK(key); - return absl::visit( - [key](auto& map) -> std::unique_ptr<SupportsUserData::Data> { - auto found = map.find(key); - if (found != map.end()) { - std::unique_ptr<SupportsUserData::Data> deowned; - deowned.swap(found->second); - map.erase(key); - return deowned; - } - return nullptr; - }, - user_data_); + auto found = user_data_.find(key); + if (found != user_data_.end()) { + std::unique_ptr<SupportsUserData::Data> deowned; + deowned.swap(found->second); + user_data_.erase(key); + return deowned; + } + return nullptr; } void SupportsUserData::SetUserData(const void* key, std::unique_ptr<Data> data) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + CHECK(!in_destructor_) << "Calling SetUserData() when SupportsUserData is " + "being destroyed is not supported."; // Avoid null keys; they are too vulnerable to collision. DCHECK(key); if (data.get()) { - absl::visit([key, &data](auto& map) { map[key] = std::move(data); }, - user_data_); + user_data_[key] = std::move(data); } else { RemoveUserData(key); } @@ -75,26 +64,22 @@ void SupportsUserData::RemoveUserData(const void* key) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - absl::visit( - [key](auto& map) { - auto it = map.find(key); - if (it != map.end()) { - // Remove the entry from the map before deleting `owned_data` to avoid - // reentrancy issues when `owned_data` owns `this`. Otherwise: - // - // 1. `RemoveUserData()` calls `erase()`. - // 2. `erase()` deletes `owned_data`. - // 3. `owned_data` deletes `this`. - // - // At this point, `erase()` is still on the stack even though the - // backing map (owned by `this`) has already been destroyed, and it - // may simply crash, cause a use-after-free, or any other number of - // interesting things. - auto owned_data = std::move(it->second); - map.erase(it); - } - }, - user_data_); + auto it = user_data_.find(key); + if (it != user_data_.end()) { + // Remove the entry from the map before deleting `owned_data` to avoid + // reentrancy issues when `owned_data` owns `this`. Otherwise: + // + // 1. `RemoveUserData()` calls `erase()`. + // 2. `erase()` deletes `owned_data`. + // 3. `owned_data` deletes `this`. + // + // At this point, `erase()` is still on the stack even though the + // backing map (owned by `this`) has already been destroyed, and it + // may simply crash, cause a use-after-free, or any other number of + // interesting things. + auto owned_data = std::move(it->second); + user_data_.erase(it); + } } void SupportsUserData::DetachFromSequence() { @@ -102,24 +87,21 @@ } void SupportsUserData::CloneDataFrom(const SupportsUserData& other) { - absl::visit( - [this](const auto& other_map) { - for (const auto& data_pair : other_map) { - auto cloned_data = data_pair.second->Clone(); - if (cloned_data) { - SetUserData(data_pair.first, std::move(cloned_data)); - } - } - }, - other.user_data_); + for (const auto& data_pair : other.user_data_) { + auto cloned_data = data_pair.second->Clone(); + if (cloned_data) { + SetUserData(data_pair.first, std::move(cloned_data)); + } + } } SupportsUserData::~SupportsUserData() { - if (!absl::visit([](const auto& map) { return map.empty(); }, user_data_)) { + if (!user_data_.empty()) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); } - MapVariants local_user_data; - user_data_.swap(local_user_data); + in_destructor_ = true; + absl::flat_hash_map<const void*, std::unique_ptr<Data>> user_data; + user_data_.swap(user_data); // Now this->user_data_ is empty, and any destructors called transitively from // the destruction of |local_user_data| will see it that way instead of // examining a being-destroyed object. @@ -127,7 +109,7 @@ void SupportsUserData::ClearAllUserData() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - absl::visit([](auto& map) { map.clear(); }, user_data_); + user_data_.clear(); } } // namespace base
diff --git a/base/supports_user_data.h b/base/supports_user_data.h index cca7ed7..fc0d1e5 100644 --- a/base/supports_user_data.h +++ b/base/supports_user_data.h
@@ -12,7 +12,6 @@ #include "base/memory/scoped_refptr.h" #include "base/sequence_checker.h" #include "third_party/abseil-cpp/absl/container/flat_hash_map.h" -#include "third_party/abseil-cpp/absl/types/variant.h" namespace base { @@ -65,13 +64,9 @@ void ClearAllUserData(); private: - // Currently a variant for A/B testing purposes. - using DataMap = std::map<const void*, std::unique_ptr<Data>>; - using FlatDataMap = absl::flat_hash_map<const void*, std::unique_ptr<Data>>; - using MapVariants = absl::variant<DataMap, FlatDataMap>; - // Externally-defined data accessible by key. - MapVariants user_data_; + absl::flat_hash_map<const void*, std::unique_ptr<Data>> user_data_; + bool in_destructor_ = false; // Guards usage of |user_data_| SEQUENCE_CHECKER(sequence_checker_); };
diff --git a/base/supports_user_data_unittest.cc b/base/supports_user_data_unittest.cc index f3b93f8..d8be714 100644 --- a/base/supports_user_data_unittest.cc +++ b/base/supports_user_data_unittest.cc
@@ -7,7 +7,8 @@ #include "base/features.h" #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" -#include "base/test/scoped_feature_list.h" +#include "base/memory/raw_ref.h" +#include "base/test/gtest_util.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { @@ -32,22 +33,9 @@ raw_ptr<const void> key_; }; -class SupportsUserDataTest : public ::testing::TestWithParam<bool> { - public: - SupportsUserDataTest() { - if (GetParam()) { - scoped_features_.InitWithFeatures( - {features::kSupportsUserDataFlatHashMap}, {}); - } else { - scoped_features_.InitWithFeatures( - {}, {features::kSupportsUserDataFlatHashMap}); - } - } +using SupportsUserDataTest = ::testing::Test; - base::test::ScopedFeatureList scoped_features_; -}; - -TEST_P(SupportsUserDataTest, ClearWorksRecursively) { +TEST_F(SupportsUserDataTest, ClearWorksRecursively) { char key = 0; // Must outlive `supports_user_data`. TestSupportsUserData supports_user_data; supports_user_data.SetUserData( @@ -57,7 +45,7 @@ struct TestData : public SupportsUserData::Data {}; -TEST_P(SupportsUserDataTest, Movable) { +TEST_F(SupportsUserDataTest, Movable) { TestSupportsUserData supports_user_data_1; char key1 = 0; supports_user_data_1.SetUserData(&key1, std::make_unique<TestData>()); @@ -73,7 +61,7 @@ EXPECT_EQ(nullptr, supports_user_data_2.GetUserData(&key2)); } -TEST_P(SupportsUserDataTest, ClearAllUserData) { +TEST_F(SupportsUserDataTest, ClearAllUserData) { TestSupportsUserData supports_user_data; char key1 = 0; supports_user_data.SetUserData(&key1, std::make_unique<TestData>()); @@ -89,7 +77,7 @@ EXPECT_FALSE(supports_user_data.GetUserData(&key2)); } -TEST_P(SupportsUserDataTest, TakeUserData) { +TEST_F(SupportsUserDataTest, TakeUserData) { TestSupportsUserData supports_user_data; char key1 = 0; supports_user_data.SetUserData(&key1, std::make_unique<TestData>()); @@ -120,16 +108,47 @@ // Tests that removing a `SupportsUserData::Data` that owns a `SupportsUserData` // does not crash. -TEST_P(SupportsUserDataTest, ReentrantRemoveUserData) { +TEST_F(SupportsUserDataTest, ReentrantRemoveUserData) { DataOwnsSupportsUserData* data = new DataOwnsSupportsUserData; char key = 0; data->supports_user_data()->SetUserData(&key, WrapUnique(data)); data->supports_user_data()->RemoveUserData(&key); } -INSTANTIATE_TEST_SUITE_P(All, - SupportsUserDataTest, - testing::Values(false, true)); +TEST_F(SupportsUserDataTest, ReentrantSetUserDataDuringRemoval) { + static const char kKey = 0; + + class ProblematicSet : public SupportsUserData::Data { + public: + explicit ProblematicSet(const void* const key, + TestSupportsUserData& supports_user_data) + : key_(key), supports_user_data_(supports_user_data) {} + + ~ProblematicSet() override { + supports_user_data_->SetUserData( + key_, std::make_unique<ProblematicSet>(key_, *supports_user_data_)); + } + + private: + const raw_ptr<const void> key_; + raw_ref<TestSupportsUserData> supports_user_data_; + }; + { + absl::optional<TestSupportsUserData> supports_user_data; + supports_user_data.emplace(); + // This awkward construction is required since death tests are typically + // implemented using `fork()`, so calling `SetUserData()` outside the + // `EXPECT_CHECK_DEATH()` macro will also crash the process that's trying to + // observe the crash. + EXPECT_CHECK_DEATH([&] { + supports_user_data->SetUserData( + &kKey, std::make_unique<ProblematicSet>(&kKey, *supports_user_data)); + // Triggers the reentrant attempt to call `SetUserData()` during + // destruction. + supports_user_data.reset(); + }()); + } +} } // namespace } // namespace base
diff --git a/base/types/optional_unittest.cc b/base/types/optional_unittest.cc index f8901297..a8ed26f9 100644 --- a/base/types/optional_unittest.cc +++ b/base/types/optional_unittest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include <memory> +#include <optional> #include <set> #include <string> #include <type_traits> @@ -12,8 +13,6 @@ #include "base/test/gtest_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/abseil-cpp/absl/types/optional.h" -#include "third_party/abseil-cpp/absl/utility/utility.h" using ::testing::ElementsAre; @@ -21,7 +20,7 @@ namespace { -// Object used to test complex object with absl::optional<T> in addition of the +// Object used to test complex object with std::optional<T> in addition of the // move semantics. class TestObject { public: @@ -205,34 +204,34 @@ } // anonymous namespace -static_assert(std::is_trivially_destructible<absl::optional<int>>::value, +static_assert(std::is_trivially_destructible<std::optional<int>>::value, "OptionalIsTriviallyDestructible"); static_assert(!std::is_trivially_destructible< - absl::optional<NonTriviallyDestructible>>::value, + std::optional<NonTriviallyDestructible>>::value, "OptionalIsTriviallyDestructible"); TEST(OptionalTest, DefaultConstructor) { { - constexpr absl::optional<float> o; + constexpr std::optional<float> o; EXPECT_FALSE(o); } { - absl::optional<std::string> o; + std::optional<std::string> o; EXPECT_FALSE(o); } { - absl::optional<TestObject> o; + std::optional<TestObject> o; EXPECT_FALSE(o); } } TEST(OptionalTest, CopyConstructor) { { - constexpr absl::optional<float> first(0.1f); - constexpr absl::optional<float> other(first); + constexpr std::optional<float> first(0.1f); + constexpr std::optional<float> other(first); EXPECT_TRUE(other); EXPECT_EQ(other.value(), 0.1f); @@ -240,8 +239,8 @@ } { - absl::optional<std::string> first("foo"); - absl::optional<std::string> other(first); + std::optional<std::string> first("foo"); + std::optional<std::string> other(first); EXPECT_TRUE(other); EXPECT_EQ(other.value(), "foo"); @@ -249,8 +248,8 @@ } { - const absl::optional<std::string> first("foo"); - absl::optional<std::string> other(first); + const std::optional<std::string> first("foo"); + std::optional<std::string> other(first); EXPECT_TRUE(other); EXPECT_EQ(other.value(), "foo"); @@ -258,8 +257,8 @@ } { - absl::optional<TestObject> first(TestObject(3, 0.1)); - absl::optional<TestObject> other(first); + std::optional<TestObject> first(TestObject(3, 0.1)); + std::optional<TestObject> other(first); EXPECT_TRUE(!!other); EXPECT_TRUE(other.value() == TestObject(3, 0.1)); @@ -270,7 +269,7 @@ TEST(OptionalTest, ValueConstructor) { { constexpr float value = 0.1f; - constexpr absl::optional<float> o(value); + constexpr std::optional<float> o(value); EXPECT_TRUE(o); EXPECT_EQ(value, o.value()); @@ -278,7 +277,7 @@ { std::string value("foo"); - absl::optional<std::string> o(value); + std::optional<std::string> o(value); EXPECT_TRUE(o); EXPECT_EQ(value, o.value()); @@ -286,7 +285,7 @@ { TestObject value(3, 0.1); - absl::optional<TestObject> o(value); + std::optional<TestObject> o(value); EXPECT_TRUE(o); EXPECT_EQ(TestObject::State::COPY_CONSTRUCTED, o->state()); @@ -295,9 +294,10 @@ } TEST(OptionalTest, MoveConstructor) { + // NOLINTBEGIN(bugprone-use-after-move) { - constexpr absl::optional<float> first(0.1f); - constexpr absl::optional<float> second(std::move(first)); + constexpr std::optional<float> first(0.1f); + constexpr std::optional<float> second(std::move(first)); EXPECT_TRUE(second.has_value()); EXPECT_EQ(second.value(), 0.1f); @@ -306,8 +306,8 @@ } { - absl::optional<std::string> first("foo"); - absl::optional<std::string> second(std::move(first)); + std::optional<std::string> first("foo"); + std::optional<std::string> second(std::move(first)); EXPECT_TRUE(second.has_value()); EXPECT_EQ("foo", second.value()); @@ -316,8 +316,8 @@ } { - absl::optional<TestObject> first(TestObject(3, 0.1)); - absl::optional<TestObject> second(std::move(first)); + std::optional<TestObject> first(TestObject(3, 0.1)); + std::optional<TestObject> second(std::move(first)); EXPECT_TRUE(second.has_value()); EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, second->state()); @@ -330,8 +330,8 @@ // Even if copy constructor is deleted, move constructor needs to work. // Note that it couldn't be constexpr. { - absl::optional<DeletedCopy> first(absl::in_place, 42); - absl::optional<DeletedCopy> second(std::move(first)); + std::optional<DeletedCopy> first(std::in_place, 42); + std::optional<DeletedCopy> second(std::move(first)); EXPECT_TRUE(second.has_value()); EXPECT_EQ(42, second->foo()); @@ -340,8 +340,8 @@ } { - absl::optional<DeletedMove> first(absl::in_place, 42); - absl::optional<DeletedMove> second(std::move(first)); + std::optional<DeletedMove> first(std::in_place, 42); + std::optional<DeletedMove> second(std::move(first)); EXPECT_TRUE(second.has_value()); EXPECT_EQ(42, second->foo()); @@ -350,9 +350,9 @@ } { - absl::optional<NonTriviallyDestructibleDeletedCopyConstructor> first( - absl::in_place, 42); - absl::optional<NonTriviallyDestructibleDeletedCopyConstructor> second( + std::optional<NonTriviallyDestructibleDeletedCopyConstructor> first( + std::in_place, 42); + std::optional<NonTriviallyDestructibleDeletedCopyConstructor> second( std::move(first)); EXPECT_TRUE(second.has_value()); @@ -360,12 +360,13 @@ EXPECT_TRUE(first.has_value()); } + // NOLINTEND(bugprone-use-after-move) } TEST(OptionalTest, MoveValueConstructor) { { constexpr float value = 0.1f; - constexpr absl::optional<float> o(std::move(value)); + constexpr std::optional<float> o(std::move(value)); EXPECT_TRUE(o); EXPECT_EQ(0.1f, o.value()); @@ -373,7 +374,7 @@ { float value = 0.1f; - absl::optional<float> o(std::move(value)); + std::optional<float> o(std::move(value)); EXPECT_TRUE(o); EXPECT_EQ(0.1f, o.value()); @@ -381,7 +382,7 @@ { std::string value("foo"); - absl::optional<std::string> o(std::move(value)); + std::optional<std::string> o(std::move(value)); EXPECT_TRUE(o); EXPECT_EQ("foo", o.value()); @@ -389,7 +390,7 @@ { TestObject value(3, 0.1); - absl::optional<TestObject> o(std::move(value)); + std::optional<TestObject> o(std::move(value)); EXPECT_TRUE(o); EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, o->state()); @@ -399,26 +400,26 @@ TEST(OptionalTest, ConvertingCopyConstructor) { { - absl::optional<int> first(1); - absl::optional<double> second(first); + std::optional<int> first(1); + std::optional<double> second(first); EXPECT_TRUE(second.has_value()); EXPECT_EQ(1.0, second.value()); } // Make sure explicit is not marked for convertible case. - { [[maybe_unused]] absl::optional<int> o(1); } + { [[maybe_unused]] std::optional<int> o(1); } } TEST(OptionalTest, ConvertingMoveConstructor) { { - absl::optional<int> first(1); - absl::optional<double> second(std::move(first)); + std::optional<int> first(1); + std::optional<double> second(std::move(first)); EXPECT_TRUE(second.has_value()); EXPECT_EQ(1.0, second.value()); } // Make sure explicit is not marked for convertible case. - { [[maybe_unused]] absl::optional<int> o(1); } + { [[maybe_unused]] std::optional<int> o(1); } { class Test1 { @@ -443,8 +444,8 @@ double bar_; }; - absl::optional<Test1> first(absl::in_place, 42); - absl::optional<Test2> second(std::move(first)); + std::optional<Test1> first(std::in_place, 42); + std::optional<Test2> second(std::move(first)); EXPECT_TRUE(second.has_value()); EXPECT_EQ(42.0, second->bar()); } @@ -452,25 +453,25 @@ TEST(OptionalTest, ConstructorForwardArguments) { { - constexpr absl::optional<float> a(absl::in_place, 0.1f); + constexpr std::optional<float> a(std::in_place, 0.1f); EXPECT_TRUE(a); EXPECT_EQ(0.1f, a.value()); } { - absl::optional<float> a(absl::in_place, 0.1f); + std::optional<float> a(std::in_place, 0.1f); EXPECT_TRUE(a); EXPECT_EQ(0.1f, a.value()); } { - absl::optional<std::string> a(absl::in_place, "foo"); + std::optional<std::string> a(std::in_place, "foo"); EXPECT_TRUE(a); EXPECT_EQ("foo", a.value()); } { - absl::optional<TestObject> a(absl::in_place, 0, 0.1); + std::optional<TestObject> a(std::in_place, 0, 0.1); EXPECT_TRUE(!!a); EXPECT_TRUE(TestObject(0, 0.1) == a.value()); } @@ -478,15 +479,15 @@ TEST(OptionalTest, ConstructorForwardInitListAndArguments) { { - absl::optional<std::vector<int>> opt(absl::in_place, {3, 1}); + std::optional<std::vector<int>> opt(std::in_place, {3, 1}); EXPECT_TRUE(opt); EXPECT_THAT(*opt, ElementsAre(3, 1)); EXPECT_EQ(2u, opt->size()); } { - absl::optional<std::vector<int>> opt(absl::in_place, {3, 1}, - std::allocator<int>()); + std::optional<std::vector<int>> opt(std::in_place, {3, 1}, + std::allocator<int>()); EXPECT_TRUE(opt); EXPECT_THAT(*opt, ElementsAre(3, 1)); EXPECT_EQ(2u, opt->size()); @@ -495,7 +496,7 @@ TEST(OptionalTest, ForwardConstructor) { { - absl::optional<double> a(1); + std::optional<double> a(1); EXPECT_TRUE(a.has_value()); EXPECT_EQ(1.0, a.value()); } @@ -508,16 +509,16 @@ bool c; }; - absl::optional<TestData> a({1, 2.0, true}); + std::optional<TestData> a({1, 2.0, true}); EXPECT_TRUE(a.has_value()); EXPECT_EQ(1, a->a); EXPECT_EQ(2.0, a->b); EXPECT_TRUE(a->c); } - // If T has a constructor with a param absl::optional<U>, and another ctor - // with a param U, then T(absl::optional<U>) should be used for - // absl::optional<T>(absl::optional<U>) constructor. + // If T has a constructor with a param std::optional<U>, and another ctor + // with a param U, then T(std::optional<U>) should be used for + // std::optional<T>(std::optional<U>) constructor. { enum class ParamType { DEFAULT_CONSTRUCTED, @@ -532,8 +533,8 @@ Test(const Test& param) : param_type(ParamType::COPY_CONSTRUCTED) {} Test(Test&& param) : param_type(ParamType::MOVE_CONSTRUCTED) {} explicit Test(int param) : param_type(ParamType::INT) {} - explicit Test(absl::in_place_t param) : param_type(ParamType::IN_PLACE) {} - explicit Test(absl::optional<int> param) + explicit Test(std::in_place_t param) : param_type(ParamType::IN_PLACE) {} + explicit Test(std::optional<int> param) : param_type(ParamType::OPTIONAL_INT) {} ParamType param_type; @@ -541,20 +542,20 @@ // Overload resolution with copy-conversion constructor. { - const absl::optional<int> arg(absl::in_place, 1); - absl::optional<Test> testee(arg); + const std::optional<int> arg(std::in_place, 1); + std::optional<Test> testee(arg); EXPECT_EQ(ParamType::OPTIONAL_INT, testee->param_type); } // Overload resolution with move conversion constructor. { - absl::optional<Test> testee(absl::optional<int>(absl::in_place, 1)); + std::optional<Test> testee(std::optional<int>(std::in_place, 1)); EXPECT_EQ(ParamType::OPTIONAL_INT, testee->param_type); } // Default constructor should be used. { - absl::optional<Test> testee(absl::in_place); + std::optional<Test> testee(std::in_place); EXPECT_EQ(ParamType::DEFAULT_CONSTRUCTED, testee->param_type); } } @@ -566,61 +567,61 @@ // If T is convertible from U, it is not marked as explicit. static_assert(std::is_convertible<int, Test>::value, "Int should be convertible to Test."); - ([](absl::optional<Test> param) {})(1); + ([](std::optional<Test> param) {})(1); } } TEST(OptionalTest, NulloptConstructor) { - constexpr absl::optional<int> a(absl::nullopt); + constexpr std::optional<int> a(std::nullopt); EXPECT_FALSE(a); } TEST(OptionalTest, AssignValue) { { - absl::optional<float> a; + std::optional<float> a; EXPECT_FALSE(a); a = 0.1f; EXPECT_TRUE(a); - absl::optional<float> b(0.1f); + std::optional<float> b(0.1f); EXPECT_TRUE(a == b); } { - absl::optional<std::string> a; + std::optional<std::string> a; EXPECT_FALSE(a); a = std::string("foo"); EXPECT_TRUE(a); - absl::optional<std::string> b(std::string("foo")); + std::optional<std::string> b(std::string("foo")); EXPECT_EQ(a, b); } { - absl::optional<TestObject> a; + std::optional<TestObject> a; EXPECT_FALSE(!!a); a = TestObject(3, 0.1); EXPECT_TRUE(!!a); - absl::optional<TestObject> b(TestObject(3, 0.1)); + std::optional<TestObject> b(TestObject(3, 0.1)); EXPECT_TRUE(a == b); } { - absl::optional<TestObject> a = TestObject(4, 1.0); + std::optional<TestObject> a = TestObject(4, 1.0); EXPECT_TRUE(!!a); a = TestObject(3, 0.1); EXPECT_TRUE(!!a); - absl::optional<TestObject> b(TestObject(3, 0.1)); + std::optional<TestObject> b(TestObject(3, 0.1)); EXPECT_TRUE(a == b); } } TEST(OptionalTest, AssignObject) { { - absl::optional<float> a; - absl::optional<float> b(0.1f); + std::optional<float> a; + std::optional<float> b(0.1f); a = b; EXPECT_TRUE(a); @@ -629,8 +630,8 @@ } { - absl::optional<std::string> a; - absl::optional<std::string> b("foo"); + std::optional<std::string> a; + std::optional<std::string> b("foo"); a = b; EXPECT_TRUE(a); @@ -639,8 +640,8 @@ } { - absl::optional<TestObject> a; - absl::optional<TestObject> b(TestObject(3, 0.1)); + std::optional<TestObject> a; + std::optional<TestObject> b(TestObject(3, 0.1)); a = b; EXPECT_TRUE(!!a); @@ -649,8 +650,8 @@ } { - absl::optional<TestObject> a(TestObject(4, 1.0)); - absl::optional<TestObject> b(TestObject(3, 0.1)); + std::optional<TestObject> a(TestObject(4, 1.0)); + std::optional<TestObject> b(TestObject(3, 0.1)); a = b; EXPECT_TRUE(!!a); @@ -659,8 +660,8 @@ } { - absl::optional<DeletedMove> a(absl::in_place, 42); - absl::optional<DeletedMove> b; + std::optional<DeletedMove> a(std::in_place, 42); + std::optional<DeletedMove> b; b = a; EXPECT_TRUE(!!a); @@ -669,8 +670,8 @@ } { - absl::optional<DeletedMove> a(absl::in_place, 42); - absl::optional<DeletedMove> b(absl::in_place, 1); + std::optional<DeletedMove> a(std::in_place, 42); + std::optional<DeletedMove> b(std::in_place, 1); b = a; EXPECT_TRUE(!!a); @@ -680,8 +681,8 @@ // Converting assignment. { - absl::optional<int> a(absl::in_place, 1); - absl::optional<double> b; + std::optional<int> a(std::in_place, 1); + std::optional<double> b; b = a; EXPECT_TRUE(!!a); @@ -691,8 +692,8 @@ } { - absl::optional<int> a(absl::in_place, 42); - absl::optional<double> b(absl::in_place, 1); + std::optional<int> a(std::in_place, 42); + std::optional<double> b(std::in_place, 1); b = a; EXPECT_TRUE(!!a); @@ -702,8 +703,8 @@ } { - absl::optional<int> a; - absl::optional<double> b(absl::in_place, 1); + std::optional<int> a; + std::optional<double> b(std::in_place, 1); b = a; EXPECT_FALSE(!!a); EXPECT_FALSE(!!b); @@ -711,9 +712,10 @@ } TEST(OptionalTest, AssignObject_rvalue) { + // NOLINTBEGIN(bugprone-use-after-move) { - absl::optional<float> a; - absl::optional<float> b(0.1f); + std::optional<float> a; + std::optional<float> b(0.1f); a = std::move(b); EXPECT_TRUE(a); @@ -722,8 +724,8 @@ } { - absl::optional<std::string> a; - absl::optional<std::string> b("foo"); + std::optional<std::string> a; + std::optional<std::string> b("foo"); a = std::move(b); EXPECT_TRUE(a); @@ -732,8 +734,8 @@ } { - absl::optional<TestObject> a; - absl::optional<TestObject> b(TestObject(3, 0.1)); + std::optional<TestObject> a; + std::optional<TestObject> b(TestObject(3, 0.1)); a = std::move(b); EXPECT_TRUE(!!a); @@ -745,8 +747,8 @@ } { - absl::optional<TestObject> a(TestObject(4, 1.0)); - absl::optional<TestObject> b(TestObject(3, 0.1)); + std::optional<TestObject> a(TestObject(4, 1.0)); + std::optional<TestObject> b(TestObject(3, 0.1)); a = std::move(b); EXPECT_TRUE(!!a); @@ -758,8 +760,8 @@ } { - absl::optional<DeletedMove> a(absl::in_place, 42); - absl::optional<DeletedMove> b; + std::optional<DeletedMove> a(std::in_place, 42); + std::optional<DeletedMove> b; b = std::move(a); EXPECT_TRUE(!!a); @@ -768,8 +770,8 @@ } { - absl::optional<DeletedMove> a(absl::in_place, 42); - absl::optional<DeletedMove> b(absl::in_place, 1); + std::optional<DeletedMove> a(std::in_place, 42); + std::optional<DeletedMove> b(std::in_place, 1); b = std::move(a); EXPECT_TRUE(!!a); @@ -779,8 +781,8 @@ // Converting assignment. { - absl::optional<int> a(absl::in_place, 1); - absl::optional<double> b; + std::optional<int> a(std::in_place, 1); + std::optional<double> b; b = std::move(a); EXPECT_TRUE(!!a); @@ -789,8 +791,8 @@ } { - absl::optional<int> a(absl::in_place, 42); - absl::optional<double> b(absl::in_place, 1); + std::optional<int> a(std::in_place, 42); + std::optional<double> b(std::in_place, 1); b = std::move(a); EXPECT_TRUE(!!a); @@ -799,37 +801,38 @@ } { - absl::optional<int> a; - absl::optional<double> b(absl::in_place, 1); + std::optional<int> a; + std::optional<double> b(std::in_place, 1); b = std::move(a); EXPECT_FALSE(!!a); EXPECT_FALSE(!!b); } + // NOLINTEND(bugprone-use-after-move) } TEST(OptionalTest, AssignNull) { { - absl::optional<float> a(0.1f); - absl::optional<float> b(0.2f); - a = absl::nullopt; - b = absl::nullopt; + std::optional<float> a(0.1f); + std::optional<float> b(0.2f); + a = std::nullopt; + b = std::nullopt; EXPECT_EQ(a, b); } { - absl::optional<std::string> a("foo"); - absl::optional<std::string> b("bar"); - a = absl::nullopt; - b = absl::nullopt; + std::optional<std::string> a("foo"); + std::optional<std::string> b("bar"); + a = std::nullopt; + b = std::nullopt; EXPECT_EQ(a, b); } { - absl::optional<TestObject> a(TestObject(3, 0.1)); - absl::optional<TestObject> b(TestObject(4, 1.0)); - a = absl::nullopt; - b = absl::nullopt; + std::optional<TestObject> a(TestObject(3, 0.1)); + std::optional<TestObject> b(TestObject(4, 1.0)); + a = std::nullopt; + b = std::nullopt; EXPECT_TRUE(a == b); } } @@ -843,7 +846,7 @@ State state = State::CONSTRUCTED; }; - // Here, absl::optional<Test2> can be assigned from absl::optional<Test1>. In + // Here, std::optional<Test2> can be assigned from std::optional<Test1>. In // case of move, marks MOVED to Test1 instance. struct Test2 { enum class State { @@ -874,8 +877,8 @@ }; { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test2> b; + std::optional<Test1> a(std::in_place); + std::optional<Test2> b; b = a; EXPECT_TRUE(!!a); @@ -885,8 +888,8 @@ } { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test2> b(absl::in_place); + std::optional<Test1> a(std::in_place); + std::optional<Test2> b(std::in_place); b = a; EXPECT_TRUE(!!a); @@ -896,8 +899,8 @@ } { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test2> b; + std::optional<Test1> a(std::in_place); + std::optional<Test2> b; b = std::move(a); EXPECT_TRUE(!!a); @@ -907,8 +910,8 @@ } { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test2> b(absl::in_place); + std::optional<Test1> a(std::in_place); + std::optional<Test2> b(std::in_place); b = std::move(a); EXPECT_TRUE(!!a); @@ -918,10 +921,10 @@ } // Similar to Test2, but Test3 also has copy/move ctor and assign operators - // from absl::optional<Test1>, too. In this case, for a = b where a is - // absl::optional<Test3> and b is absl::optional<Test1>, - // absl::optional<T>::operator=(U&&) where U is absl::optional<Test1> should - // be used rather than absl::optional<T>::operator=(absl::optional<U>&&) where + // from std::optional<Test1>, too. In this case, for a = b where a is + // std::optional<Test3> and b is std::optional<Test1>, + // std::optional<T>::operator=(U&&) where U is std::optional<Test1> should + // be used rather than std::optional<T>::operator=(std::optional<U>&&) where // U is Test1. struct Test3 { enum class State { @@ -942,9 +945,9 @@ explicit Test3(Test1&& test1) : state(State::MOVE_CONSTRUCTED_FROM_TEST1) { test1.state = Test1::State::MOVED; } - explicit Test3(const absl::optional<Test1>& test1) + explicit Test3(const std::optional<Test1>& test1) : state(State::COPY_CONSTRUCTED_FROM_OPTIONAL_TEST1) {} - explicit Test3(absl::optional<Test1>&& test1) + explicit Test3(std::optional<Test1>&& test1) : state(State::MOVE_CONSTRUCTED_FROM_OPTIONAL_TEST1) { // In the following senarios, given |test1| should always have value. DCHECK(test1.has_value()); @@ -959,11 +962,11 @@ test1.state = Test1::State::MOVED; return *this; } - Test3& operator=(const absl::optional<Test1>& test1) { + Test3& operator=(const std::optional<Test1>& test1) { state = State::COPY_ASSIGNED_FROM_OPTIONAL_TEST1; return *this; } - Test3& operator=(absl::optional<Test1>&& test1) { + Test3& operator=(std::optional<Test1>&& test1) { state = State::MOVE_ASSIGNED_FROM_OPTIONAL_TEST1; // In the following senarios, given |test1| should always have value. DCHECK(test1.has_value()); @@ -975,8 +978,8 @@ }; { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test3> b; + std::optional<Test1> a(std::in_place); + std::optional<Test3> b; b = a; EXPECT_TRUE(!!a); @@ -986,8 +989,8 @@ } { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test3> b(absl::in_place); + std::optional<Test1> a(std::in_place); + std::optional<Test3> b(std::in_place); b = a; EXPECT_TRUE(!!a); @@ -997,8 +1000,8 @@ } { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test3> b; + std::optional<Test1> a(std::in_place); + std::optional<Test3> b; b = std::move(a); EXPECT_TRUE(!!a); @@ -1008,8 +1011,8 @@ } { - absl::optional<Test1> a(absl::in_place); - absl::optional<Test3> b(absl::in_place); + std::optional<Test1> a(std::in_place); + std::optional<Test3> b(std::in_place); b = std::move(a); EXPECT_TRUE(!!a); @@ -1021,89 +1024,89 @@ TEST(OptionalTest, OperatorStar) { { - absl::optional<float> a(0.1f); + std::optional<float> a(0.1f); EXPECT_EQ(a.value(), *a); } { - absl::optional<std::string> a("foo"); + std::optional<std::string> a("foo"); EXPECT_EQ(a.value(), *a); } { - absl::optional<TestObject> a(TestObject(3, 0.1)); + std::optional<TestObject> a(TestObject(3, 0.1)); EXPECT_EQ(a.value(), *a); } } TEST(OptionalTest, OperatorStar_rvalue) { - EXPECT_EQ(0.1f, *absl::optional<float>(0.1f)); - EXPECT_EQ(std::string("foo"), *absl::optional<std::string>("foo")); + EXPECT_EQ(0.1f, *std::optional<float>(0.1f)); + EXPECT_EQ(std::string("foo"), *std::optional<std::string>("foo")); EXPECT_TRUE(TestObject(3, 0.1) == - *absl::optional<TestObject>(TestObject(3, 0.1))); + *std::optional<TestObject>(TestObject(3, 0.1))); } TEST(OptionalTest, OperatorArrow) { - absl::optional<TestObject> a(TestObject(3, 0.1)); + std::optional<TestObject> a(TestObject(3, 0.1)); EXPECT_EQ(a->foo(), 3); } TEST(OptionalTest, Value_rvalue) { - EXPECT_EQ(0.1f, absl::optional<float>(0.1f).value()); - EXPECT_EQ(std::string("foo"), absl::optional<std::string>("foo").value()); + EXPECT_EQ(0.1f, std::optional<float>(0.1f).value()); + EXPECT_EQ(std::string("foo"), std::optional<std::string>("foo").value()); EXPECT_TRUE(TestObject(3, 0.1) == - absl::optional<TestObject>(TestObject(3, 0.1)).value()); + std::optional<TestObject>(TestObject(3, 0.1)).value()); } TEST(OptionalTest, ValueOr) { { - absl::optional<float> a; + std::optional<float> a; EXPECT_EQ(0.0f, a.value_or(0.0f)); a = 0.1f; EXPECT_EQ(0.1f, a.value_or(0.0f)); - a = absl::nullopt; + a = std::nullopt; EXPECT_EQ(0.0f, a.value_or(0.0f)); } // value_or() can be constexpr. { - constexpr absl::optional<int> a(absl::in_place, 1); + constexpr std::optional<int> a(std::in_place, 1); constexpr int value = a.value_or(10); EXPECT_EQ(1, value); } { - constexpr absl::optional<int> a; + constexpr std::optional<int> a; constexpr int value = a.value_or(10); EXPECT_EQ(10, value); } { - absl::optional<std::string> a; + std::optional<std::string> a; EXPECT_EQ("bar", a.value_or("bar")); a = std::string("foo"); EXPECT_EQ(std::string("foo"), a.value_or("bar")); - a = absl::nullopt; + a = std::nullopt; EXPECT_EQ(std::string("bar"), a.value_or("bar")); } { - absl::optional<TestObject> a; + std::optional<TestObject> a; EXPECT_TRUE(a.value_or(TestObject(1, 0.3)) == TestObject(1, 0.3)); a = TestObject(3, 0.1); EXPECT_TRUE(a.value_or(TestObject(1, 0.3)) == TestObject(3, 0.1)); - a = absl::nullopt; + a = std::nullopt; EXPECT_TRUE(a.value_or(TestObject(1, 0.3)) == TestObject(1, 0.3)); } } TEST(OptionalTest, Swap_bothNoValue) { - absl::optional<TestObject> a, b; + std::optional<TestObject> a, b; a.swap(b); EXPECT_FALSE(a); @@ -1113,8 +1116,8 @@ } TEST(OptionalTest, Swap_inHasValue) { - absl::optional<TestObject> a(TestObject(1, 0.3)); - absl::optional<TestObject> b; + std::optional<TestObject> a(TestObject(1, 0.3)); + std::optional<TestObject> b; a.swap(b); EXPECT_FALSE(a); @@ -1125,8 +1128,8 @@ } TEST(OptionalTest, Swap_outHasValue) { - absl::optional<TestObject> a; - absl::optional<TestObject> b(TestObject(1, 0.3)); + std::optional<TestObject> a; + std::optional<TestObject> b(TestObject(1, 0.3)); a.swap(b); EXPECT_TRUE(!!a); @@ -1136,8 +1139,8 @@ } TEST(OptionalTest, Swap_bothValue) { - absl::optional<TestObject> a(TestObject(0, 0.1)); - absl::optional<TestObject> b(TestObject(1, 0.3)); + std::optional<TestObject> a(TestObject(0, 0.1)); + std::optional<TestObject> b(TestObject(1, 0.3)); a.swap(b); EXPECT_TRUE(!!a); @@ -1150,7 +1153,7 @@ TEST(OptionalTest, Emplace) { { - absl::optional<float> a(0.1f); + std::optional<float> a(0.1f); EXPECT_EQ(0.3f, a.emplace(0.3f)); EXPECT_TRUE(a); @@ -1158,7 +1161,7 @@ } { - absl::optional<std::string> a("foo"); + std::optional<std::string> a("foo"); EXPECT_EQ("bar", a.emplace("bar")); EXPECT_TRUE(a); @@ -1166,7 +1169,7 @@ } { - absl::optional<TestObject> a(TestObject(0, 0.1)); + std::optional<TestObject> a(TestObject(0, 0.1)); EXPECT_EQ(TestObject(1, 0.2), a.emplace(TestObject(1, 0.2))); EXPECT_TRUE(!!a); @@ -1174,7 +1177,7 @@ } { - absl::optional<std::vector<int>> a; + std::optional<std::vector<int>> a; auto& ref = a.emplace({2, 3}); static_assert(std::is_same<std::vector<int>&, decltype(ref)>::value, ""); EXPECT_TRUE(a); @@ -1183,7 +1186,7 @@ } { - absl::optional<std::vector<int>> a; + std::optional<std::vector<int>> a; auto& ref = a.emplace({4, 5}, std::allocator<int>()); static_assert(std::is_same<std::vector<int>&, decltype(ref)>::value, ""); EXPECT_TRUE(a); @@ -1193,86 +1196,86 @@ } TEST(OptionalTest, Equals_TwoEmpty) { - absl::optional<int> a; - absl::optional<int> b; + std::optional<int> a; + std::optional<int> b; EXPECT_TRUE(a == b); } TEST(OptionalTest, Equals_TwoEquals) { - absl::optional<int> a(1); - absl::optional<int> b(1); + std::optional<int> a(1); + std::optional<int> b(1); EXPECT_TRUE(a == b); } TEST(OptionalTest, Equals_OneEmpty) { - absl::optional<int> a; - absl::optional<int> b(1); + std::optional<int> a; + std::optional<int> b(1); EXPECT_FALSE(a == b); } TEST(OptionalTest, Equals_TwoDifferent) { - absl::optional<int> a(0); - absl::optional<int> b(1); + std::optional<int> a(0); + std::optional<int> b(1); EXPECT_FALSE(a == b); } TEST(OptionalTest, Equals_DifferentType) { - absl::optional<int> a(0); - absl::optional<double> b(0); + std::optional<int> a(0); + std::optional<double> b(0); EXPECT_TRUE(a == b); } TEST(OptionalTest, Equals_Value) { - absl::optional<int> a(0); - absl::optional<int> b; + std::optional<int> a(0); + std::optional<int> b; EXPECT_TRUE(a == 0); EXPECT_FALSE(b == 0); } TEST(OptionalTest, NotEquals_TwoEmpty) { - absl::optional<int> a; - absl::optional<int> b; + std::optional<int> a; + std::optional<int> b; EXPECT_FALSE(a != b); } TEST(OptionalTest, NotEquals_TwoEquals) { - absl::optional<int> a(1); - absl::optional<int> b(1); + std::optional<int> a(1); + std::optional<int> b(1); EXPECT_FALSE(a != b); } TEST(OptionalTest, NotEquals_OneEmpty) { - absl::optional<int> a; - absl::optional<int> b(1); + std::optional<int> a; + std::optional<int> b(1); EXPECT_TRUE(a != b); } TEST(OptionalTest, NotEquals_TwoDifferent) { - absl::optional<int> a(0); - absl::optional<int> b(1); + std::optional<int> a(0); + std::optional<int> b(1); EXPECT_TRUE(a != b); } TEST(OptionalTest, NotEquals_DifferentType) { - absl::optional<int> a(0); - absl::optional<double> b(0.0); + std::optional<int> a(0); + std::optional<double> b(0.0); EXPECT_FALSE(a != b); } TEST(OptionalTest, NotEquals_Value) { - absl::optional<int> a(0); - absl::optional<int> b; + std::optional<int> a(0); + std::optional<int> b; EXPECT_TRUE(a != 1); EXPECT_FALSE(a == 1); @@ -1282,703 +1285,705 @@ } TEST(OptionalTest, Less_LeftEmpty) { - absl::optional<int> l; - absl::optional<int> r(1); + std::optional<int> l; + std::optional<int> r(1); EXPECT_TRUE(l < r); } TEST(OptionalTest, Less_RightEmpty) { - absl::optional<int> l(1); - absl::optional<int> r; + std::optional<int> l(1); + std::optional<int> r; EXPECT_FALSE(l < r); } TEST(OptionalTest, Less_BothEmpty) { - absl::optional<int> l; - absl::optional<int> r; + std::optional<int> l; + std::optional<int> r; EXPECT_FALSE(l < r); } TEST(OptionalTest, Less_BothValues) { { - absl::optional<int> l(1); - absl::optional<int> r(2); + std::optional<int> l(1); + std::optional<int> r(2); EXPECT_TRUE(l < r); } { - absl::optional<int> l(2); - absl::optional<int> r(1); + std::optional<int> l(2); + std::optional<int> r(1); EXPECT_FALSE(l < r); } { - absl::optional<int> l(1); - absl::optional<int> r(1); + std::optional<int> l(1); + std::optional<int> r(1); EXPECT_FALSE(l < r); } } TEST(OptionalTest, Less_DifferentType) { - absl::optional<int> l(1); - absl::optional<double> r(2.0); + std::optional<int> l(1); + std::optional<double> r(2.0); EXPECT_TRUE(l < r); } TEST(OptionalTest, LessEq_LeftEmpty) { - absl::optional<int> l; - absl::optional<int> r(1); + std::optional<int> l; + std::optional<int> r(1); EXPECT_TRUE(l <= r); } TEST(OptionalTest, LessEq_RightEmpty) { - absl::optional<int> l(1); - absl::optional<int> r; + std::optional<int> l(1); + std::optional<int> r; EXPECT_FALSE(l <= r); } TEST(OptionalTest, LessEq_BothEmpty) { - absl::optional<int> l; - absl::optional<int> r; + std::optional<int> l; + std::optional<int> r; EXPECT_TRUE(l <= r); } TEST(OptionalTest, LessEq_BothValues) { { - absl::optional<int> l(1); - absl::optional<int> r(2); + std::optional<int> l(1); + std::optional<int> r(2); EXPECT_TRUE(l <= r); } { - absl::optional<int> l(2); - absl::optional<int> r(1); + std::optional<int> l(2); + std::optional<int> r(1); EXPECT_FALSE(l <= r); } { - absl::optional<int> l(1); - absl::optional<int> r(1); + std::optional<int> l(1); + std::optional<int> r(1); EXPECT_TRUE(l <= r); } } TEST(OptionalTest, LessEq_DifferentType) { - absl::optional<int> l(1); - absl::optional<double> r(2.0); + std::optional<int> l(1); + std::optional<double> r(2.0); EXPECT_TRUE(l <= r); } TEST(OptionalTest, Greater_BothEmpty) { - absl::optional<int> l; - absl::optional<int> r; + std::optional<int> l; + std::optional<int> r; EXPECT_FALSE(l > r); } TEST(OptionalTest, Greater_LeftEmpty) { - absl::optional<int> l; - absl::optional<int> r(1); + std::optional<int> l; + std::optional<int> r(1); EXPECT_FALSE(l > r); } TEST(OptionalTest, Greater_RightEmpty) { - absl::optional<int> l(1); - absl::optional<int> r; + std::optional<int> l(1); + std::optional<int> r; EXPECT_TRUE(l > r); } TEST(OptionalTest, Greater_BothValue) { { - absl::optional<int> l(1); - absl::optional<int> r(2); + std::optional<int> l(1); + std::optional<int> r(2); EXPECT_FALSE(l > r); } { - absl::optional<int> l(2); - absl::optional<int> r(1); + std::optional<int> l(2); + std::optional<int> r(1); EXPECT_TRUE(l > r); } { - absl::optional<int> l(1); - absl::optional<int> r(1); + std::optional<int> l(1); + std::optional<int> r(1); EXPECT_FALSE(l > r); } } TEST(OptionalTest, Greater_DifferentType) { - absl::optional<int> l(1); - absl::optional<double> r(2.0); + std::optional<int> l(1); + std::optional<double> r(2.0); EXPECT_FALSE(l > r); } TEST(OptionalTest, GreaterEq_BothEmpty) { - absl::optional<int> l; - absl::optional<int> r; + std::optional<int> l; + std::optional<int> r; EXPECT_TRUE(l >= r); } TEST(OptionalTest, GreaterEq_LeftEmpty) { - absl::optional<int> l; - absl::optional<int> r(1); + std::optional<int> l; + std::optional<int> r(1); EXPECT_FALSE(l >= r); } TEST(OptionalTest, GreaterEq_RightEmpty) { - absl::optional<int> l(1); - absl::optional<int> r; + std::optional<int> l(1); + std::optional<int> r; EXPECT_TRUE(l >= r); } TEST(OptionalTest, GreaterEq_BothValue) { { - absl::optional<int> l(1); - absl::optional<int> r(2); + std::optional<int> l(1); + std::optional<int> r(2); EXPECT_FALSE(l >= r); } { - absl::optional<int> l(2); - absl::optional<int> r(1); + std::optional<int> l(2); + std::optional<int> r(1); EXPECT_TRUE(l >= r); } { - absl::optional<int> l(1); - absl::optional<int> r(1); + std::optional<int> l(1); + std::optional<int> r(1); EXPECT_TRUE(l >= r); } } TEST(OptionalTest, GreaterEq_DifferentType) { - absl::optional<int> l(1); - absl::optional<double> r(2.0); + std::optional<int> l(1); + std::optional<double> r(2.0); EXPECT_FALSE(l >= r); } TEST(OptionalTest, OptNullEq) { { - absl::optional<int> opt; - EXPECT_TRUE(opt == absl::nullopt); + std::optional<int> opt; + EXPECT_TRUE(opt == std::nullopt); } { - absl::optional<int> opt(1); - EXPECT_FALSE(opt == absl::nullopt); + std::optional<int> opt(1); + EXPECT_FALSE(opt == std::nullopt); } } TEST(OptionalTest, NullOptEq) { { - absl::optional<int> opt; - EXPECT_TRUE(absl::nullopt == opt); + std::optional<int> opt; + EXPECT_TRUE(std::nullopt == opt); } { - absl::optional<int> opt(1); - EXPECT_FALSE(absl::nullopt == opt); + std::optional<int> opt(1); + EXPECT_FALSE(std::nullopt == opt); } } TEST(OptionalTest, OptNullNotEq) { { - absl::optional<int> opt; - EXPECT_FALSE(opt != absl::nullopt); + std::optional<int> opt; + EXPECT_FALSE(opt != std::nullopt); } { - absl::optional<int> opt(1); - EXPECT_TRUE(opt != absl::nullopt); + std::optional<int> opt(1); + EXPECT_TRUE(opt != std::nullopt); } } TEST(OptionalTest, NullOptNotEq) { { - absl::optional<int> opt; - EXPECT_FALSE(absl::nullopt != opt); + std::optional<int> opt; + EXPECT_FALSE(std::nullopt != opt); } { - absl::optional<int> opt(1); - EXPECT_TRUE(absl::nullopt != opt); + std::optional<int> opt(1); + EXPECT_TRUE(std::nullopt != opt); } } TEST(OptionalTest, OptNullLower) { { - absl::optional<int> opt; - EXPECT_FALSE(opt < absl::nullopt); + std::optional<int> opt; + EXPECT_FALSE(opt < std::nullopt); } { - absl::optional<int> opt(1); - EXPECT_FALSE(opt < absl::nullopt); + std::optional<int> opt(1); + EXPECT_FALSE(opt < std::nullopt); } } TEST(OptionalTest, NullOptLower) { { - absl::optional<int> opt; - EXPECT_FALSE(absl::nullopt < opt); + std::optional<int> opt; + EXPECT_FALSE(std::nullopt < opt); } { - absl::optional<int> opt(1); - EXPECT_TRUE(absl::nullopt < opt); + std::optional<int> opt(1); + EXPECT_TRUE(std::nullopt < opt); } } TEST(OptionalTest, OptNullLowerEq) { { - absl::optional<int> opt; - EXPECT_TRUE(opt <= absl::nullopt); + std::optional<int> opt; + EXPECT_TRUE(opt <= std::nullopt); } { - absl::optional<int> opt(1); - EXPECT_FALSE(opt <= absl::nullopt); + std::optional<int> opt(1); + EXPECT_FALSE(opt <= std::nullopt); } } TEST(OptionalTest, NullOptLowerEq) { { - absl::optional<int> opt; - EXPECT_TRUE(absl::nullopt <= opt); + std::optional<int> opt; + EXPECT_TRUE(std::nullopt <= opt); } { - absl::optional<int> opt(1); - EXPECT_TRUE(absl::nullopt <= opt); + std::optional<int> opt(1); + EXPECT_TRUE(std::nullopt <= opt); } } TEST(OptionalTest, OptNullGreater) { { - absl::optional<int> opt; - EXPECT_FALSE(opt > absl::nullopt); + std::optional<int> opt; + EXPECT_FALSE(opt > std::nullopt); } { - absl::optional<int> opt(1); - EXPECT_TRUE(opt > absl::nullopt); + std::optional<int> opt(1); + EXPECT_TRUE(opt > std::nullopt); } } TEST(OptionalTest, NullOptGreater) { { - absl::optional<int> opt; - EXPECT_FALSE(absl::nullopt > opt); + std::optional<int> opt; + EXPECT_FALSE(std::nullopt > opt); } { - absl::optional<int> opt(1); - EXPECT_FALSE(absl::nullopt > opt); + std::optional<int> opt(1); + EXPECT_FALSE(std::nullopt > opt); } } TEST(OptionalTest, OptNullGreaterEq) { { - absl::optional<int> opt; - EXPECT_TRUE(opt >= absl::nullopt); + std::optional<int> opt; + EXPECT_TRUE(opt >= std::nullopt); } { - absl::optional<int> opt(1); - EXPECT_TRUE(opt >= absl::nullopt); + std::optional<int> opt(1); + EXPECT_TRUE(opt >= std::nullopt); } } TEST(OptionalTest, NullOptGreaterEq) { { - absl::optional<int> opt; - EXPECT_TRUE(absl::nullopt >= opt); + std::optional<int> opt; + EXPECT_TRUE(std::nullopt >= opt); } { - absl::optional<int> opt(1); - EXPECT_FALSE(absl::nullopt >= opt); + std::optional<int> opt(1); + EXPECT_FALSE(std::nullopt >= opt); } } TEST(OptionalTest, ValueEq_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_FALSE(opt == 1); } TEST(OptionalTest, ValueEq_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(opt == 1); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_TRUE(opt == 1); } } TEST(OptionalTest, ValueEq_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(opt == 0.0); } TEST(OptionalTest, EqValue_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_FALSE(1 == opt); } TEST(OptionalTest, EqValue_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(1 == opt); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_TRUE(1 == opt); } } TEST(OptionalTest, EqValue_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(0.0 == opt); } TEST(OptionalTest, ValueNotEq_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_TRUE(opt != 1); } TEST(OptionalTest, ValueNotEq_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(opt != 1); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_FALSE(opt != 1); } } TEST(OptionalTest, ValueNotEq_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(opt != 0.0); } TEST(OptionalTest, NotEqValue_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_TRUE(1 != opt); } TEST(OptionalTest, NotEqValue_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(1 != opt); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_FALSE(1 != opt); } } TEST(OptionalTest, NotEqValue_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(0.0 != opt); } TEST(OptionalTest, ValueLess_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_TRUE(opt < 1); } TEST(OptionalTest, ValueLess_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(opt < 1); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_FALSE(opt < 1); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_FALSE(opt < 1); } } TEST(OptionalTest, ValueLess_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(opt < 1.0); } TEST(OptionalTest, LessValue_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_FALSE(1 < opt); } TEST(OptionalTest, LessValue_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(1 < opt); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_FALSE(1 < opt); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_TRUE(1 < opt); } } TEST(OptionalTest, LessValue_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(0.0 < opt); } TEST(OptionalTest, ValueLessEq_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_TRUE(opt <= 1); } TEST(OptionalTest, ValueLessEq_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(opt <= 1); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_TRUE(opt <= 1); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_FALSE(opt <= 1); } } TEST(OptionalTest, ValueLessEq_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(opt <= 0.0); } TEST(OptionalTest, LessEqValue_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_FALSE(1 <= opt); } TEST(OptionalTest, LessEqValue_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(1 <= opt); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_TRUE(1 <= opt); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_TRUE(1 <= opt); } } TEST(OptionalTest, LessEqValue_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(0.0 <= opt); } TEST(OptionalTest, ValueGreater_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_FALSE(opt > 1); } TEST(OptionalTest, ValueGreater_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(opt > 1); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_FALSE(opt > 1); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_TRUE(opt > 1); } } TEST(OptionalTest, ValueGreater_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(opt > 0.0); } TEST(OptionalTest, GreaterValue_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_TRUE(1 > opt); } TEST(OptionalTest, GreaterValue_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(1 > opt); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_FALSE(1 > opt); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_FALSE(1 > opt); } } TEST(OptionalTest, GreaterValue_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(0.0 > opt); } TEST(OptionalTest, ValueGreaterEq_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_FALSE(opt >= 1); } TEST(OptionalTest, ValueGreaterEq_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_FALSE(opt >= 1); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_TRUE(opt >= 1); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_TRUE(opt >= 1); } } TEST(OptionalTest, ValueGreaterEq_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(opt <= 0.0); } TEST(OptionalTest, GreaterEqValue_Empty) { - absl::optional<int> opt; + std::optional<int> opt; EXPECT_TRUE(1 >= opt); } TEST(OptionalTest, GreaterEqValue_NotEmpty) { { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(1 >= opt); } { - absl::optional<int> opt(1); + std::optional<int> opt(1); EXPECT_TRUE(1 >= opt); } { - absl::optional<int> opt(2); + std::optional<int> opt(2); EXPECT_FALSE(1 >= opt); } } TEST(OptionalTest, GreaterEqValue_DifferentType) { - absl::optional<int> opt(0); + std::optional<int> opt(0); EXPECT_TRUE(0.0 >= opt); } TEST(OptionalTest, NotEquals) { { - absl::optional<float> a(0.1f); - absl::optional<float> b(0.2f); + std::optional<float> a(0.1f); + std::optional<float> b(0.2f); EXPECT_NE(a, b); } { - absl::optional<std::string> a("foo"); - absl::optional<std::string> b("bar"); + std::optional<std::string> a("foo"); + std::optional<std::string> b("bar"); EXPECT_NE(a, b); } { - absl::optional<int> a(1); - absl::optional<double> b(2); + std::optional<int> a(1); + std::optional<double> b(2); EXPECT_NE(a, b); } { - absl::optional<TestObject> a(TestObject(3, 0.1)); - absl::optional<TestObject> b(TestObject(4, 1.0)); + std::optional<TestObject> a(TestObject(3, 0.1)); + std::optional<TestObject> b(TestObject(4, 1.0)); EXPECT_TRUE(a != b); } } TEST(OptionalTest, NotEqualsNull) { { - absl::optional<float> a(0.1f); - absl::optional<float> b(0.1f); - b = absl::nullopt; + std::optional<float> a(0.1f); + std::optional<float> b(0.1f); + b = std::nullopt; EXPECT_NE(a, b); } { - absl::optional<std::string> a("foo"); - absl::optional<std::string> b("foo"); - b = absl::nullopt; + std::optional<std::string> a("foo"); + std::optional<std::string> b("foo"); + b = std::nullopt; EXPECT_NE(a, b); } { - absl::optional<TestObject> a(TestObject(3, 0.1)); - absl::optional<TestObject> b(TestObject(3, 0.1)); - b = absl::nullopt; + std::optional<TestObject> a(TestObject(3, 0.1)); + std::optional<TestObject> b(TestObject(3, 0.1)); + b = std::nullopt; EXPECT_TRUE(a != b); } } TEST(OptionalTest, MakeOptional) { { - absl::optional<float> o = absl::make_optional(32.f); + std::optional<float> o = std::make_optional(32.f); EXPECT_TRUE(o); EXPECT_EQ(32.f, *o); float value = 3.f; - o = absl::make_optional(std::move(value)); + o = std::make_optional(std::move(value)); EXPECT_TRUE(o); EXPECT_EQ(3.f, *o); } { - absl::optional<std::string> o = absl::make_optional(std::string("foo")); + std::optional<std::string> o = std::make_optional(std::string("foo")); EXPECT_TRUE(o); EXPECT_EQ("foo", *o); std::string value = "bar"; - o = absl::make_optional(std::move(value)); + o = std::make_optional(std::move(value)); EXPECT_TRUE(o); EXPECT_EQ(std::string("bar"), *o); } { - absl::optional<TestObject> o = absl::make_optional(TestObject(3, 0.1)); + // NOLINTBEGIN(bugprone-use-after-move) + std::optional<TestObject> o = std::make_optional(TestObject(3, 0.1)); EXPECT_TRUE(!!o); EXPECT_TRUE(TestObject(3, 0.1) == *o); TestObject value = TestObject(0, 0.42); - o = absl::make_optional(std::move(value)); + o = std::make_optional(std::move(value)); EXPECT_TRUE(!!o); EXPECT_TRUE(TestObject(0, 0.42) == *o); EXPECT_EQ(TestObject::State::MOVED_FROM, value.state()); EXPECT_EQ(TestObject::State::MOVE_ASSIGNED, o->state()); EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, - absl::make_optional(std::move(value))->state()); + std::make_optional(std::move(value))->state()); + // NOLINTEND(bugprone-use-after-move) } { @@ -1990,7 +1995,7 @@ bool c; }; - absl::optional<Test> o = absl::make_optional<Test>(1, 2.0, true); + std::optional<Test> o = std::make_optional<Test>(1, 2.0, true); EXPECT_TRUE(!!o); EXPECT_EQ(1, o->a); EXPECT_EQ(2.0, o->b); @@ -1998,18 +2003,18 @@ } { - auto str1 = absl::make_optional<std::string>({'1', '2', '3'}); + auto str1 = std::make_optional<std::string>({'1', '2', '3'}); EXPECT_EQ("123", *str1); - auto str2 = absl::make_optional<std::string>({'a', 'b', 'c'}, - std::allocator<char>()); + auto str2 = std::make_optional<std::string>({'a', 'b', 'c'}, + std::allocator<char>()); EXPECT_EQ("abc", *str2); } } TEST(OptionalTest, NonMemberSwap_bothNoValue) { - absl::optional<TestObject> a, b; - absl::swap(a, b); + std::optional<TestObject> a, b; + std::swap(a, b); EXPECT_FALSE(!!a); EXPECT_FALSE(!!b); @@ -2018,9 +2023,9 @@ } TEST(OptionalTest, NonMemberSwap_inHasValue) { - absl::optional<TestObject> a(TestObject(1, 0.3)); - absl::optional<TestObject> b; - absl::swap(a, b); + std::optional<TestObject> a(TestObject(1, 0.3)); + std::optional<TestObject> b; + std::swap(a, b); EXPECT_FALSE(!!a); EXPECT_TRUE(!!b); @@ -2029,9 +2034,9 @@ } TEST(OptionalTest, NonMemberSwap_outHasValue) { - absl::optional<TestObject> a; - absl::optional<TestObject> b(TestObject(1, 0.3)); - absl::swap(a, b); + std::optional<TestObject> a; + std::optional<TestObject> b(TestObject(1, 0.3)); + std::swap(a, b); EXPECT_TRUE(!!a); EXPECT_FALSE(!!b); @@ -2040,9 +2045,9 @@ } TEST(OptionalTest, NonMemberSwap_bothValue) { - absl::optional<TestObject> a(TestObject(0, 0.1)); - absl::optional<TestObject> b(TestObject(1, 0.3)); - absl::swap(a, b); + std::optional<TestObject> a(TestObject(0, 0.1)); + std::optional<TestObject> b(TestObject(1, 0.3)); + std::swap(a, b); EXPECT_TRUE(!!a); EXPECT_TRUE(!!b); @@ -2055,57 +2060,57 @@ TEST(OptionalTest, Hash_OptionalReflectsInternal) { { std::hash<int> int_hash; - std::hash<absl::optional<int>> opt_int_hash; + std::hash<std::optional<int>> opt_int_hash; - EXPECT_EQ(int_hash(1), opt_int_hash(absl::optional<int>(1))); + EXPECT_EQ(int_hash(1), opt_int_hash(std::optional<int>(1))); } { std::hash<std::string> str_hash; - std::hash<absl::optional<std::string>> opt_str_hash; + std::hash<std::optional<std::string>> opt_str_hash; EXPECT_EQ(str_hash(std::string("foobar")), - opt_str_hash(absl::optional<std::string>(std::string("foobar")))); + opt_str_hash(std::optional<std::string>(std::string("foobar")))); } } TEST(OptionalTest, Hash_NullOptEqualsNullOpt) { - std::hash<absl::optional<int>> opt_int_hash; - std::hash<absl::optional<std::string>> opt_str_hash; + std::hash<std::optional<int>> opt_int_hash; + std::hash<std::optional<std::string>> opt_str_hash; - EXPECT_EQ(opt_str_hash(absl::optional<std::string>()), - opt_int_hash(absl::optional<int>())); + EXPECT_EQ(opt_str_hash(std::optional<std::string>()), + opt_int_hash(std::optional<int>())); } TEST(OptionalTest, Hash_UseInSet) { - std::set<absl::optional<int>> setOptInt; + std::set<std::optional<int>> setOptInt; EXPECT_EQ(setOptInt.end(), setOptInt.find(42)); - setOptInt.insert(absl::optional<int>(3)); + setOptInt.insert(std::optional<int>(3)); EXPECT_EQ(setOptInt.end(), setOptInt.find(42)); EXPECT_NE(setOptInt.end(), setOptInt.find(3)); } TEST(OptionalTest, HasValue) { - absl::optional<int> a; + std::optional<int> a; EXPECT_FALSE(a.has_value()); a = 42; EXPECT_TRUE(a.has_value()); - a = absl::nullopt; + a = std::nullopt; EXPECT_FALSE(a.has_value()); a = 0; EXPECT_TRUE(a.has_value()); - a = absl::optional<int>(); + a = std::optional<int>(); EXPECT_FALSE(a.has_value()); } TEST(OptionalTest, Reset_int) { - absl::optional<int> a(0); + std::optional<int> a(0); EXPECT_TRUE(a.has_value()); EXPECT_EQ(0, a.value()); @@ -2115,7 +2120,7 @@ } TEST(OptionalTest, Reset_Object) { - absl::optional<TestObject> a(TestObject(0, 0.1)); + std::optional<TestObject> a(TestObject(0, 0.1)); EXPECT_TRUE(a.has_value()); EXPECT_EQ(TestObject(0, 0.1), a.value()); @@ -2125,7 +2130,7 @@ } TEST(OptionalTest, Reset_NoOp) { - absl::optional<int> a; + std::optional<int> a; EXPECT_FALSE(a.has_value()); a.reset(); @@ -2133,7 +2138,7 @@ } TEST(OptionalTest, AssignFromRValue) { - absl::optional<TestObject> a; + std::optional<TestObject> a; EXPECT_FALSE(a.has_value()); TestObject obj; @@ -2143,16 +2148,16 @@ } TEST(OptionalTest, DontCallDefaultCtor) { - absl::optional<DeletedDefaultConstructor> a; + std::optional<DeletedDefaultConstructor> a; EXPECT_FALSE(a.has_value()); - a = absl::make_optional<DeletedDefaultConstructor>(42); + a = std::make_optional<DeletedDefaultConstructor>(42); EXPECT_TRUE(a.has_value()); EXPECT_EQ(42, a->foo()); } TEST(OptionalTest, DontCallNewMemberFunction) { - absl::optional<DeleteNewOperators> a; + std::optional<DeleteNewOperators> a; EXPECT_FALSE(a.has_value()); a = DeleteNewOperators(); @@ -2166,7 +2171,7 @@ }; { - const absl::optional<C> const_optional; + const std::optional<C> const_optional; EXPECT_DEATH_IF_SUPPORTED(const_optional.value(), ""); EXPECT_DEATH_IF_SUPPORTED(const_optional->Method(), ""); EXPECT_DEATH_IF_SUPPORTED(*const_optional, ""); @@ -2174,7 +2179,7 @@ } { - absl::optional<C> non_const_optional; + std::optional<C> non_const_optional; EXPECT_DEATH_IF_SUPPORTED(non_const_optional.value(), ""); EXPECT_DEATH_IF_SUPPORTED(non_const_optional->Method(), ""); EXPECT_DEATH_IF_SUPPORTED(*non_const_optional, ""); @@ -2212,41 +2217,41 @@ }; static_assert( - noexcept(absl::optional<int>(std::declval<absl::optional<int>>())), + noexcept(std::optional<int>(std::declval<std::optional<int>>())), "move constructor for noexcept move-constructible T must be noexcept " "(trivial copy, trivial move)"); static_assert( - !noexcept(absl::optional<Test1>(std::declval<absl::optional<Test1>>())), + !noexcept(std::optional<Test1>(std::declval<std::optional<Test1>>())), "move constructor for non-noexcept move-constructible T must not be " "noexcept (trivial copy)"); static_assert( - noexcept(absl::optional<Test2>(std::declval<absl::optional<Test2>>())), + noexcept(std::optional<Test2>(std::declval<std::optional<Test2>>())), "move constructor for noexcept move-constructible T must be noexcept " "(non-trivial copy, trivial move)"); static_assert( - noexcept(absl::optional<Test3>(std::declval<absl::optional<Test3>>())), + noexcept(std::optional<Test3>(std::declval<std::optional<Test3>>())), "move constructor for noexcept move-constructible T must be noexcept " "(trivial copy, non-trivial move)"); static_assert( - noexcept(absl::optional<Test4>(std::declval<absl::optional<Test4>>())), + noexcept(std::optional<Test4>(std::declval<std::optional<Test4>>())), "move constructor for noexcept move-constructible T must be noexcept " "(non-trivial copy, non-trivial move)"); static_assert( - !noexcept(absl::optional<Test5>(std::declval<absl::optional<Test5>>())), + !noexcept(std::optional<Test5>(std::declval<std::optional<Test5>>())), "move constructor for non-noexcept move-constructible T must not be " "noexcept (non-trivial copy)"); - static_assert(noexcept(std::declval<absl::optional<int>>() = - std::declval<absl::optional<int>>()), + static_assert(noexcept(std::declval<std::optional<int>>() = + std::declval<std::optional<int>>()), "move assign for noexcept move-constructible/move-assignable T " "must be noexcept"); static_assert( - !noexcept(std::declval<absl::optional<Test1>>() = - std::declval<absl::optional<Test1>>()), + !noexcept(std::declval<std::optional<Test1>>() = + std::declval<std::optional<Test1>>()), "move assign for non-noexcept move-constructible T must not be noexcept"); static_assert( - !noexcept(std::declval<absl::optional<Test2>>() = - std::declval<absl::optional<Test2>>()), + !noexcept(std::declval<std::optional<Test2>>() = + std::declval<std::optional<Test2>>()), "move assign for non-noexcept move-assignable T must not be noexcept"); } @@ -2256,7 +2261,7 @@ static_assert(std::is_trivially_destructible< TriviallyDestructibleOverloadAddressOf>::value, "Trivially...AddressOf must be trivially destructible."); - absl::optional<TriviallyDestructibleOverloadAddressOf> optional; + std::optional<TriviallyDestructibleOverloadAddressOf> optional; TriviallyDestructibleOverloadAddressOf n; optional = n; @@ -2271,7 +2276,7 @@ static_assert(!std::is_trivially_destructible< NonTriviallyDestructibleOverloadAddressOf>::value, "NotTrivially...AddressOf must not be trivially destructible."); - absl::optional<NonTriviallyDestructibleOverloadAddressOf> nontrivial_optional; + std::optional<NonTriviallyDestructibleOverloadAddressOf> nontrivial_optional; NonTriviallyDestructibleOverloadAddressOf n1; nontrivial_optional = n1; }
diff --git a/build/android/pylib/local/emulator/avd.py b/build/android/pylib/local/emulator/avd.py index e50e939..77c2cb1 100644 --- a/build/android/pylib/local/emulator/avd.py +++ b/build/android/pylib/local/emulator/avd.py
@@ -20,6 +20,7 @@ from devil.android import device_utils from devil.android import settings from devil.android.sdk import adb_wrapper +from devil.android.sdk import version_codes from devil.android.tools import system_app from devil.utils import cmd_helper from devil.utils import timeout_retry @@ -1179,3 +1180,29 @@ logging.info('long_press_timeout set to %r', _LONG_PRESS_TIMEOUT) else: logging.warning('long_press_timeout is not set correctly') + + # TODO(crbug.com/1488458): Move the date sync function to device_utils.py + if device.IsUserBuild(): + logging.warning('Cannot sync the device date on "user" build') + return + + logging.info('Sync the device date.') + timezone = device.RunShellCommand(['date', '+"%Z"'], + single_line=True, + check_return=True) + if timezone != 'UTC': + device.RunShellCommand(['setprop', 'persist.sys.timezone', '"Etc/UTC"'], + check_return=True, + as_root=True) + set_date_format = '%Y%m%d.%H%M%S' + set_date_command = ['date', '-s'] + if device.build_version_sdk >= version_codes.MARSHMALLOW: + set_date_format = '%m%d%H%M%Y.%S' + set_date_command = ['date'] + strgmtime = time.strftime(set_date_format, time.gmtime()) + set_date_command.append(strgmtime) + device.RunShellCommand(set_date_command, check_return=True, as_root=True) + device.RunShellCommand( + ['am', 'broadcast', '-a', 'android.intent.action.TIME_SET'], + check_return=True, + as_root=True)
diff --git a/build/config/siso/blink_all.star b/build/config/siso/blink_all.star index 0ed0331b..8d296d93 100644 --- a/build/config/siso/blink_all.star +++ b/build/config/siso/blink_all.star
@@ -5,6 +5,7 @@ """Siso configuration for blink scripts.""" load("@builtin//struct.star", "module") +load("./platform.star", "platform") __filegroups = { } @@ -19,7 +20,7 @@ step_config["rules"].extend([ { "name": "blink/generate_bindings", - "command_prefix": "python3 ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py", + "command_prefix": platform.python_bin + " ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py", "inputs": [ # build/print_python_deps.py couldn't detect this? # TODO(crbug.com/1475569): fix build/print_python_deps.py
diff --git a/build/config/siso/windows.star b/build/config/siso/windows.star index b2b180f..0d73764f 100644 --- a/build/config/siso/windows.star +++ b/build/config/siso/windows.star
@@ -20,6 +20,7 @@ # We should migrate default machine type to n2-standard-2. "name": "b289968566/exit-137", "action_outs": [ + ".\\obj\\chrome\\test\\unit_tests\\chrome_browsing_data_remover_delegate_unittest.obj", ".\\obj\\content\\browser\\browser\\browser_interface_binders.obj", ], "remote": False,
diff --git a/build/toolchain/win/toolchain.gni b/build/toolchain/win/toolchain.gni index b296cfbdc..19d1c9212 100644 --- a/build/toolchain/win/toolchain.gni +++ b/build/toolchain/win/toolchain.gni
@@ -81,7 +81,7 @@ if (toolchain_uses_remoteexec) { if (toolchain_is_clang) { - cl_prefix = "${rbe_bin_dir}/rewrapper -cfg=${rbe_cc_cfg_file} -exec_root=${rbe_exec_root} " + cl_prefix = "${rbe_bin_dir}/rewrapper -cfg=${rbe_cc_cfg_file} -exec_root=${rbe_exec_root} -labels=type=compile,compiler=clang-cl,lang=cpp " } else { cl_prefix = "" }
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni index 1998b50..baa5d1f 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 vars in //DEPS. - libcxx_revision = "7cf98622abaf832e2d4784889ebc69d5b6fde4d8" + libcxx_revision = "a094e2535c54dd295d22c56bd088691459708b46" }
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index ce172b1b..f56c41b 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -411,6 +411,7 @@ "//chrome/browser/tabmodel:java", "//chrome/browser/tabpersistence:java", "//chrome/browser/thumbnail:java", + "//chrome/browser/translate/android:java", "//chrome/browser/ui/android/appmenu:factory_java", "//chrome/browser/ui/android/appmenu:java", "//chrome/browser/ui/android/cars:java", @@ -1045,6 +1046,7 @@ "//chrome/browser/touch_to_fill/no_passkeys/internal/android:junit", "//chrome/browser/touch_to_fill/password_generation/android/internal:junit", "//chrome/browser/touch_to_fill/payments/android/internal:junit", + "//chrome/browser/translate/android:junit", "//chrome/browser/ui/android/appmenu:java", "//chrome/browser/ui/android/appmenu/internal:junit", "//chrome/browser/ui/android/autofill/internal:junit", @@ -1653,6 +1655,8 @@ "//chrome/browser/thumbnail:javatests", "//chrome/browser/touch_to_fill/no_passkeys/internal/android:java_resources", "//chrome/browser/touch_to_fill/payments/android/internal:java_resources", + "//chrome/browser/translate/android:java", + "//chrome/browser/translate/android:javatests", "//chrome/browser/ui/android/appmenu:java", "//chrome/browser/ui/android/appmenu/test:test_support_java", "//chrome/browser/ui/android/device_lock:java",
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 0f6cd8b..15eb31d 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
@@ -865,8 +865,14 @@ */ void updateSectionHeader() { // It is possible that updateSectionHeader() is called when the surface which contains the - // Feeds isn't visible, returns here. See https://crbug.com/1485070. - if (!mIsPropertiesInitializedForStream) return; + // Feeds isn't visible or headers of streams haven't been added, returns here. + // See https://crbug.com/1485070 and https://crbug.com/1488210. + // TODO(https://crbug.com/1488630): Figure out the root cause of setting + // SectionHeaderListProperties.CURRENT_TAB_INDEX_KEY to -1 and fix it. + if (!mIsPropertiesInitializedForStream + || mSectionHeaderModel.get(SectionHeaderListProperties.CURRENT_TAB_INDEX_KEY) < 0) { + return; + } boolean suggestionsVisible = isSuggestionsVisible(); mSectionHeaderModel.get(SectionHeaderListProperties.SECTION_HEADERS_KEY)
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java index 9133344..26ce85bbc8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java
@@ -637,6 +637,7 @@ @MediumTest @Feature({"RenderTest"}) @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) + @DisabledTest(message = "crbug.com/testBookmarkFolderIcon") public void testBookmarkFolderIcon(boolean nightModeEnabled) throws Exception { BookmarkPromoHeader.forcePromoStateForTesting(SyncPromoState.NO_PROMO); addFolder(TEST_FOLDER_TITLE);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenTest.java index b1cb00d..5befa51 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenTest.java
@@ -99,9 +99,11 @@ + "</head><body>Webapp capable</body></html>"); private static final String NON_MASKABLE_MANIFEST_TEST_PAGE_PATH = - "/chrome/test/data/banners/manifest_test_page.html?manifest=manifest_empty_name_short_name.json"; + "/chrome/test/data/banners/manifest_test_page.html?" + + "manifest=manifest_display_browser.json"; private static final String MASKABLE_MANIFEST_TEST_PAGE_PATH = - "/chrome/test/data/banners/manifest_test_page.html?manifest=manifest_empty_name_short_name_maskable.json"; + "/chrome/test/data/banners/manifest_test_page.html?" + + "manifest=manifest_display_browser_maskable.json"; private static final String MANIFEST_TEST_PAGE_TITLE = "Web app banner test page"; private static final String INSTALL_PATH_HISTOGRAM_NAME = "WebApk.Install.PathToInstall"; @@ -367,7 +369,7 @@ @Feature("{Webapp}") public void testAddWebappShortcutAppInstalledEvent() throws Exception { loadUrl(WebappTestPage.getServiceWorkerUrlWithManifestAndAction(mTestServerRule.getServer(), - "manifest_empty_name_short_name.json", "verify_appinstalled"), + "manifest_display_browser.json", "verify_appinstalled"), WebappTestPage.PAGE_TITLE); addShortcutToTab(mTab, "", true);
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index eb123bb..0b11263e 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -2809,10 +2809,10 @@ <!-- Update Notification Strings --> <message name="IDS_UPDATE_NOTIFICATION_HEADER" desc="Notification title shown for a system update."> - Update <ph name="NAME">$1<ex>Chromebook</ex></ph>. + You’ve been upgraded to <ph name="NAME">$1<ex>Chromebook</ex></ph>. </message> <message name="IDS_UPDATE_NOTIFICATION_MESSAGE" desc="Notification shown for a system update."> - Your Chromebook is updated. + New features include Magic Eraser on Google Photos to remove distractions, improved video call tools, and more </message> <!-- Update Required Screen Strings-->
diff --git a/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_HEADER.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_HEADER.png.sha1 index c2cd98e3..193b33c 100644 --- a/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_HEADER.png.sha1 +++ b/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_HEADER.png.sha1
@@ -1 +1 @@ -7ceb532596f6f30d9c475ed890dd68e6cfe276ce \ No newline at end of file +6452b937c471fd84ce1209da6e7f8803e40f9820 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_MESSAGE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_MESSAGE.png.sha1 index 2409474..193b33c 100644 --- a/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_MESSAGE.png.sha1 +++ b/chrome/app/chromeos_strings_grdp/IDS_UPDATE_NOTIFICATION_MESSAGE.png.sha1
@@ -1 +1 @@ -9ff7ba07b716473e285c65c1e0f4f5c237b3f224 \ No newline at end of file +6452b937c471fd84ce1209da6e7f8803e40f9820 \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 157ee5ca..4178eaf9 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3481,6 +3481,8 @@ "//chrome/browser/touch_to_fill/password_generation/android", "//chrome/browser/touch_to_fill/password_generation/android:public", "//chrome/browser/touch_to_fill/payments/android:public", + "//chrome/browser/translate/android", + "//chrome/browser/translate/android:jni_headers", "//chrome/browser/ui/android/layouts:android", "//chrome/browser/ui/webui/feed_internals:mojo_bindings", "//chrome/browser/usb/android:jni_headers",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 372bffc..e17c5ba 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3211,27 +3211,6 @@ std::size(kBookmarksRefreshAppMenu), nullptr}}; #endif // BUILDFLAG(IS_ANDROID) -#if !BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kCustomizeChromeWallpaperSearch64[] = { - {ntp_features::kCustomizeChromeWallpaperSearchResolutionParam, "64"}, -}; -const FeatureEntry::FeatureParam kCustomizeChromeWallpaperSearch256[] = { - {ntp_features::kCustomizeChromeWallpaperSearchResolutionParam, "256"}, -}; -const FeatureEntry::FeatureParam kCustomizeChromeWallpaperSearch1024[] = { - {ntp_features::kCustomizeChromeWallpaperSearchResolutionParam, "1024"}, -}; -const FeatureEntry::FeatureVariation - kCustomizeChromeWallpaperSearchVariations[] = { - {"- 64", kCustomizeChromeWallpaperSearch64, - std::size(kCustomizeChromeWallpaperSearch64), nullptr}, - {"- 256", kCustomizeChromeWallpaperSearch256, - std::size(kCustomizeChromeWallpaperSearch256), nullptr}, - {"- 1024", kCustomizeChromeWallpaperSearch1024, - std::size(kCustomizeChromeWallpaperSearch1024), nullptr}, -}; -#endif // !BUILDFLAG(IS_ANDROID) - const FeatureEntry::FeatureParam kLargeFaviconFromGoogle96[] = { {"favicon_size_in_dip", "96"}}; const FeatureEntry::FeatureParam kLargeFaviconFromGoogle128[] = { @@ -3716,51 +3695,51 @@ const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingControl1[] = { {tpcd::experiment::kForceEligibleForTestingName, "false"}, {tpcd::experiment::kDisable3PCookiesName, "false"}, - {tpcd::experiment::kDisableAdsAPIsName, "false"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}, {features::kCookieDeprecationLabelName, "fake_control_1.1"}, {tpcd::experiment::kVersionName, "9990"}}; const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingLabelOnly[] = { {tpcd::experiment::kForceEligibleForTestingName, "false"}, {tpcd::experiment::kDisable3PCookiesName, "false"}, - {tpcd::experiment::kDisableAdsAPIsName, "false"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}, {features::kCookieDeprecationLabelName, "fake_label_only_1.1"}, {tpcd::experiment::kVersionName, "9991"}}; const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingTreatment[] = { {tpcd::experiment::kForceEligibleForTestingName, "false"}, {tpcd::experiment::kDisable3PCookiesName, "true"}, - {tpcd::experiment::kDisableAdsAPIsName, "false"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}, {features::kCookieDeprecationLabelName, "fake_treatment_1.1"}, {tpcd::experiment::kVersionName, "9992"}}; const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingControl2[] = { {tpcd::experiment::kForceEligibleForTestingName, "false"}, {tpcd::experiment::kDisable3PCookiesName, "true"}, - {tpcd::experiment::kDisableAdsAPIsName, "true"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "true"}, {features::kCookieDeprecationLabelName, "fake_control_2"}, {tpcd::experiment::kVersionName, "9993"}}; const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingForceControl1[] = {{tpcd::experiment::kForceEligibleForTestingName, "true"}, {tpcd::experiment::kDisable3PCookiesName, "false"}, - {tpcd::experiment::kDisableAdsAPIsName, "false"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}, {features::kCookieDeprecationLabelName, "fake_control_1.1"}, {tpcd::experiment::kVersionName, "9994"}}; const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingForceLabelOnly[] = { {tpcd::experiment::kForceEligibleForTestingName, "true"}, {tpcd::experiment::kDisable3PCookiesName, "false"}, - {tpcd::experiment::kDisableAdsAPIsName, "false"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}, {features::kCookieDeprecationLabelName, "fake_label_only_1.1"}, {tpcd::experiment::kVersionName, "9995"}}; const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingForceTreatment[] = { {tpcd::experiment::kForceEligibleForTestingName, "true"}, {tpcd::experiment::kDisable3PCookiesName, "true"}, - {tpcd::experiment::kDisableAdsAPIsName, "false"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}, {features::kCookieDeprecationLabelName, "fake_treatment_1.1"}, {tpcd::experiment::kVersionName, "9996"}}; const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingForceControl2[] = {{tpcd::experiment::kForceEligibleForTestingName, "true"}, {tpcd::experiment::kDisable3PCookiesName, "true"}, - {tpcd::experiment::kDisableAdsAPIsName, "true"}, + {features::kCookieDeprecationTestingDisableAdsAPIsName, "true"}, {features::kCookieDeprecationLabelName, "fake_control_2"}, {tpcd::experiment::kVersionName, "9997"}}; @@ -9670,10 +9649,7 @@ {"customize-chrome-wallpaper-search", flag_descriptions::kCustomizeChromeWallpaperSearchName, flag_descriptions::kCustomizeChromeWallpaperSearchDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE( - ntp_features::kCustomizeChromeWallpaperSearch, - kCustomizeChromeWallpaperSearchVariations, - "Resolution")}, + FEATURE_VALUE_TYPE(ntp_features::kCustomizeChromeWallpaperSearch)}, #endif #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc b/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc index b58dffc..a10ca34 100644 --- a/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc +++ b/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc
@@ -11,13 +11,13 @@ #include "ash/app_list/views/app_list_view.h" #include "ash/app_list/views/assistant/assistant_test_api_impl.h" #include "ash/app_list/views/contents_view.h" -#include "ash/app_list/views/launcher_search_iph_view.h" #include "ash/app_list/views/pagination_model_transition_waiter.h" #include "ash/app_list/views/search_box_view.h" #include "ash/assistant/assistant_controller_impl.h" #include "ash/assistant/test/test_assistant_service.h" #include "ash/assistant/ui/assistant_view_ids.h" #include "ash/assistant/ui/main_stage/assistant_zero_state_view.h" +#include "ash/assistant/ui/main_stage/launcher_search_iph_view.h" #include "ash/public/cpp/accelerators.h" #include "ash/public/cpp/app_list/app_list_types.h" #include "ash/public/cpp/test/app_list_test_api.h"
diff --git a/chrome/browser/ash/boot_times_recorder.cc b/chrome/browser/ash/boot_times_recorder.cc index d1500bd..762c9dc8 100644 --- a/chrome/browser/ash/boot_times_recorder.cc +++ b/chrome/browser/ash/boot_times_recorder.cc
@@ -9,6 +9,7 @@ #include <vector> +#include "ash/shell.h" #include "base/check.h" #include "base/command_line.h" #include "base/files/file_path.h" @@ -112,6 +113,8 @@ login_done_ = true; login_started_ = false; AddLoginTimeMarker("LoginDone", false); + ash::Shell::Get()->login_unlock_throughput_recorder()->AddLoginTimeMarker( + kUmaLogin); RecordCurrentStats(kChromeFirstRender); LoginEventRecorder::Get()->ScheduleWriteLoginTimes( kLoginTimes, (is_user_new ? kUmaLoginNewUser : kUmaLogin),
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc index d03629b..8929f8e 100644 --- a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc +++ b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
@@ -1792,8 +1792,8 @@ std::string EncodeURI(const std::string& component) { url::RawCanonOutputT<char> encoded; - url::EncodeURIComponent(component.c_str(), component.size(), &encoded); - return {encoded.data(), static_cast<size_t>(encoded.length())}; + url::EncodeURIComponent(component, &encoded); + return std::string(encoded.view()); } };
diff --git a/chrome/browser/ash/input_method/ui/candidate_window_view.cc b/chrome/browser/ash/input_method/ui/candidate_window_view.cc index b30ff16..55c171d 100644 --- a/chrome/browser/ash/input_method/ui/candidate_window_view.cc +++ b/chrome/browser/ash/input_method/ui/candidate_window_view.cc
@@ -400,12 +400,12 @@ return; } } - - if (candidate_window_.show_window_at_composition()) - SetAnchorRect(composition_bounds); - else - SetAnchorRect(cursor_bounds); } + + if (candidate_window_.show_window_at_composition()) + SetAnchorRect(composition_bounds); + else + SetAnchorRect(cursor_bounds); } void CandidateWindowView::OnTextFieldContextualInfoAvailable(
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc index 237b8530..f37d1c81 100644 --- a/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc +++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/qr_code.cc
@@ -8,6 +8,7 @@ #include "base/base64.h" #include "base/containers/span.h" +#include "base/strings/strcat.h" #include "components/qr_code_generator/qr_code_generator.h" #include "url/url_util.h" @@ -50,15 +51,13 @@ std::string shared_secret_base64; base::Base64Encode(shared_secret_str, &shared_secret_base64); url::RawCanonOutputT<char> shared_secret_base64_uriencoded; - url::EncodeURIComponent(shared_secret_base64.data(), - shared_secret_base64.size(), + url::EncodeURIComponent(shared_secret_base64, &shared_secret_base64_uriencoded); - std::string url = "https://signin.google/qs/" + advertising_id_.ToString() + - "?key=" + - std::string(shared_secret_base64_uriencoded.data(), - shared_secret_base64_uriencoded.length()) + - "&t=" + std::string(kDeviceTypeQueryParamValue); + std::string url = + base::StrCat({"https://signin.google/qs/", advertising_id_.ToString(), + "?key=", shared_secret_base64_uriencoded.view(), + "&t=", kDeviceTypeQueryParamValue}); return std::vector<uint8_t>(url.begin(), url.end()); }
diff --git a/chrome/browser/ash/notifications/update_notification.cc b/chrome/browser/ash/notifications/update_notification.cc index dab3e1c..cac173c 100644 --- a/chrome/browser/ash/notifications/update_notification.cc +++ b/chrome/browser/ash/notifications/update_notification.cc
@@ -31,8 +31,8 @@ constexpr char kUpdateNotificationId[] = "chrome://update_notification"; -// TODO(b/284978852): Update the link. -constexpr char kUpdateURL[] = "https://www.google.com/chromebook/"; +constexpr char kUpdateURL[] = + "https://www.google.com/chromebook/discover/chromebookplus/"; } // namespace @@ -52,12 +52,11 @@ message_center::RichNotificationData data; data.buttons.emplace_back(l10n_util::GetStringUTF16(IDS_LEARN_MORE)); - // Product name does not need to be translated. - auto product_name = - l10n_util::GetStringUTF16(ui::GetChromeOSDeviceTypeResourceId()); message_center::Notification notification = CreateSystemNotification( message_center::NOTIFICATION_TYPE_IMAGE, kUpdateNotificationId, - l10n_util::GetStringFUTF16(IDS_UPDATE_NOTIFICATION_HEADER, product_name), + // Product name does not need to be translated. + l10n_util::GetStringFUTF16(IDS_UPDATE_NOTIFICATION_HEADER, + u"Chromebook Plus"), l10n_util::GetStringUTF16(IDS_UPDATE_NOTIFICATION_MESSAGE), std::u16string(), GURL(kUpdateNotificationId), message_center::NotifierId(message_center::NotifierType::SYSTEM_COMPONENT, @@ -69,13 +68,12 @@ weak_factory_.GetWeakPtr())), gfx::kNoneIcon, message_center::SystemNotificationWarningLevel::NORMAL); - // TODO(b/284978852): Use the images after it's finalized from the UX. // DarkLightModeController might be nullptr in tests. auto* dark_light_mode_controller = DarkLightModeController::Get(); const bool use_dark_image = dark_light_mode_controller && dark_light_mode_controller->IsDarkModeEnabled(); - int image_resource_id = use_dark_image ? IDR_TRAY_CAST_ZERO_STATE_DARK - : IDR_TRAY_CAST_ZERO_STATE_LIGHT; + int image_resource_id = + use_dark_image ? IDR_UPDATE_CHROME_DARK : IDR_UPDATE_CHROME_LIGHT; notification.set_image( ui::ImageModel::FromResourceId(image_resource_id).GetImage());
diff --git a/chrome/browser/ash/notifications/update_notification_unittest.cc b/chrome/browser/ash/notifications/update_notification_unittest.cc index a2fedfc9d..b38dd9b 100644 --- a/chrome/browser/ash/notifications/update_notification_unittest.cc +++ b/chrome/browser/ash/notifications/update_notification_unittest.cc
@@ -126,7 +126,10 @@ // Show the update notification if the flag is enabled. ASSERT_TRUE(notification); - EXPECT_EQ(u"Your Chromebook is updated.", notification->message()); + EXPECT_EQ( + u"New features include Magic Eraser on Google Photos to remove " + u"distractions, improved video call tools, and more", + notification->message()); } } // namespace ash
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index a2cfedc..e8b6f951 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -176,6 +176,8 @@ "reporting/websites/website_metrics_retriever_interface.h", "reporting/websites/website_usage_observer.cc", "reporting/websites/website_usage_observer.h", + "reporting/websites/website_usage_telemetry_sampler.cc", + "reporting/websites/website_usage_telemetry_sampler.h", "smart_reader/smart_reader_client_impl.cc", "smart_reader/smart_reader_client_impl.h", "tablet_mode/chrome_content_browser_client_tablet_mode_part.cc", @@ -511,6 +513,7 @@ "reporting/user_reporting_settings_unittest.cc", "reporting/websites/website_events_observer_unittest.cc", "reporting/websites/website_usage_observer_unittest.cc", + "reporting/websites/website_usage_telemetry_sampler_unittest.cc", "video_conference/video_conference_ukm_helper_unittest.cc", # TODO(zturner): Enable this on Windows. See
diff --git a/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.cc b/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.cc new file mode 100644 index 0000000..25e5564 --- /dev/null +++ b/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.cc
@@ -0,0 +1,100 @@ +// 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 "chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.h" + +#include "base/functional/bind.h" +#include "base/functional/callback_helpers.h" +#include "base/json/values_util.h" +#include "base/memory/weak_ptr.h" +#include "base/sequence_checker.h" +#include "chrome/browser/chromeos/reporting/metric_reporting_prefs.h" +#include "components/prefs/pref_service.h" +#include "components/prefs/scoped_user_pref_update.h" +#include "components/reporting/metrics/sampler.h" +#include "components/reporting/proto/synced/metric_data.pb.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +namespace reporting { + +WebsiteUsageTelemetrySampler::WebsiteUsageTelemetrySampler( + base::WeakPtr<Profile> profile) + : profile_(profile) {} + +WebsiteUsageTelemetrySampler::~WebsiteUsageTelemetrySampler() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +void WebsiteUsageTelemetrySampler::MaybeCollect( + OptionalMetricCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + absl::optional<MetricData> metric_data; + base::ScopedClosureRunner run_callback_on_return(base::BindOnce( + [](base::WeakPtr<WebsiteUsageTelemetrySampler> self, + OptionalMetricCallback callback, + absl::optional<MetricData>* metric_data) { + DCHECK_CALLED_ON_VALID_SEQUENCE(self->sequence_checker_); + if (!metric_data->has_value()) { + std::move(callback).Run(std::move(*metric_data)); + return; + } + + // Report metric data and delete tracked website usage data from the + // pref store. + const auto& website_usage_data = metric_data->value() + .telemetry_data() + .website_telemetry() + .website_usage_data(); + CHECK(!website_usage_data.website_usage().empty()); + std::move(callback).Run(std::move(*metric_data)); + self->DeleteWebsiteUsageDataFromPrefStore(&website_usage_data); + }, + weak_ptr_factory_.GetWeakPtr(), std::move(callback), &metric_data)); + if (!profile_) { + // Profile has been destructed. Return. + return; + } + const PrefService* const user_prefs = profile_->GetPrefs(); + if (!user_prefs->HasPrefPath(kWebsiteUsage)) { + // No usage data being tracked in the pref store. Return. + return; + } + const base::Value::Dict& usage_dict = user_prefs->GetDict(kWebsiteUsage); + if (usage_dict.empty()) { + // No website usage data to report. Return. + return; + } + + // Parse website usage across URLs from the pref store and populate + // website usage data. + metric_data = absl::make_optional<MetricData>(); + auto* const website_usage_data = metric_data->mutable_telemetry_data() + ->mutable_website_telemetry() + ->mutable_website_usage_data(); + for (auto usage_it : usage_dict) { + const absl::optional<const base::TimeDelta> saved_usage_time = + base::ValueToTimeDelta(usage_it.second); + CHECK(saved_usage_time.has_value()); + WebsiteUsageData::WebsiteUsage* const website_usage = + website_usage_data->mutable_website_usage()->Add(); + website_usage->set_url(usage_it.first); + website_usage->set_running_time_ms( + saved_usage_time.value().InMilliseconds()); + } +} + +void WebsiteUsageTelemetrySampler::DeleteWebsiteUsageDataFromPrefStore( + const WebsiteUsageData* website_usage_data) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + CHECK(profile_); + ScopedDictPrefUpdate usage_dict_pref(profile_->GetPrefs(), kWebsiteUsage); + for (const auto& website_usage : website_usage_data->website_usage()) { + const std::string& url = website_usage.url(); + CHECK(usage_dict_pref->contains(url)) + << "Missing website usage data for URL: " << url; + usage_dict_pref->Remove(url); + } +} + +} // namespace reporting
diff --git a/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.h b/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.h new file mode 100644 index 0000000..6b7845c --- /dev/null +++ b/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.h
@@ -0,0 +1,51 @@ +// 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 CHROME_BROWSER_CHROMEOS_REPORTING_WEBSITES_WEBSITE_USAGE_TELEMETRY_SAMPLER_H_ +#define CHROME_BROWSER_CHROMEOS_REPORTING_WEBSITES_WEBSITE_USAGE_TELEMETRY_SAMPLER_H_ + +#include "base/memory/weak_ptr.h" +#include "base/sequence_checker.h" +#include "base/thread_annotations.h" +#include "chrome/browser/profiles/profile.h" +#include "components/reporting/metrics/sampler.h" +#include "components/reporting/proto/synced/metric_data.pb.h" + +namespace reporting { + +// Sampler used to collect website usage telemetry data from the user profile +// pref store. This usage data is originally persisted in the pref store by the +// `WebsiteUsageObserver` as it observes and tracks data collection from the +// `WebsiteMetrics` component. +class WebsiteUsageTelemetrySampler : public Sampler { + public: + explicit WebsiteUsageTelemetrySampler(base::WeakPtr<Profile> profile); + WebsiteUsageTelemetrySampler(const WebsiteUsageTelemetrySampler& other) = + delete; + WebsiteUsageTelemetrySampler& operator=( + const WebsiteUsageTelemetrySampler& other) = delete; + ~WebsiteUsageTelemetrySampler() override; + + // Collects website usage telemetry data from the user pref store across + // several URLs and triggers the specified callback with batched usage data. + // Sampler: + void MaybeCollect(OptionalMetricCallback callback) override; + + private: + // Deletes website usage data from the user pref store. Triggered only after + // website usage telemetry data has been consumed to prevent data loss. + void DeleteWebsiteUsageDataFromPrefStore( + const WebsiteUsageData* website_usage_data); + + SEQUENCE_CHECKER(sequence_checker_); + + // Weak pointer to the user profile. Used to access the user pref store. + const base::WeakPtr<Profile> profile_ GUARDED_BY_CONTEXT(sequence_checker_); + + base::WeakPtrFactory<WebsiteUsageTelemetrySampler> weak_ptr_factory_{this}; +}; + +} // namespace reporting + +#endif // CHROME_BROWSER_CHROMEOS_REPORTING_WEBSITES_WEBSITE_USAGE_TELEMETRY_SAMPLER_H_
diff --git a/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler_unittest.cc b/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler_unittest.cc new file mode 100644 index 0000000..68024c8 --- /dev/null +++ b/chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler_unittest.cc
@@ -0,0 +1,192 @@ +// 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 "chrome/browser/chromeos/reporting/websites/website_usage_telemetry_sampler.h" + +#include <memory> + +#include "base/json/values_util.h" +#include "base/memory/raw_ptr.h" +#include "base/test/protobuf_matchers.h" +#include "base/test/test_future.h" +#include "base/time/time.h" +#include "chrome/browser/chromeos/reporting/metric_reporting_prefs.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chrome/test/base/testing_profile_manager.h" +#include "components/prefs/scoped_user_pref_update.h" +#include "components/reporting/proto/synced/metric_data.pb.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +using ::base::EqualsProto; +using ::testing::ElementsAre; +using ::testing::SizeIs; +using ::testing::UnorderedElementsAre; + +namespace reporting { +namespace { + +constexpr char kTestUserId[] = "TestUser"; +constexpr char kTestUrl[] = "https://a.example.org/"; + +class WebsiteUsageTelemetrySamplerTest : public ::testing::Test { + protected: + void SetUp() override { + ASSERT_TRUE(profile_manager_.SetUp()); + profile_ = profile_manager_.CreateTestingProfile(kTestUserId); + website_usage_telemetry_sampler_ = + std::make_unique<WebsiteUsageTelemetrySampler>(profile_->GetWeakPtr()); + } + + // Simulates website usage tracking by persisting relevant usage information + // for specified URL in the pref store. + void TrackWebsiteUsageForUrl(const std::string& url, + const base::TimeDelta& usage_duration) { + PrefService* const user_prefs = profile_->GetPrefs(); + if (!user_prefs->HasPrefPath(kWebsiteUsage)) { + // Create empty dictionary if none exists in the pref store. + user_prefs->SetDict(kWebsiteUsage, base::Value::Dict()); + } + + ScopedDictPrefUpdate usage_dict_pref(user_prefs, kWebsiteUsage); + usage_dict_pref->Set(url, base::TimeDeltaToValue(usage_duration)); + } + + // Returns a `WebsiteUsageData::WebsiteUsage` proto message that tests can use + // to test match with the actual one. + WebsiteUsageData::WebsiteUsage WebsiteUsageProto( + const std::string& url, + const base::TimeDelta& running_time) { + WebsiteUsageData::WebsiteUsage website_usage; + website_usage.set_url(url); + website_usage.set_running_time_ms(running_time.InMilliseconds()); + return website_usage; + } + + ::content::BrowserTaskEnvironment task_environment_; + TestingProfileManager profile_manager_{TestingBrowserProcess::GetGlobal()}; + raw_ptr<Profile> profile_; + std::unique_ptr<WebsiteUsageTelemetrySampler> + website_usage_telemetry_sampler_; +}; + +TEST_F(WebsiteUsageTelemetrySamplerTest, NoWebsiteUsageData) { + base::test::TestFuture<absl::optional<MetricData>> collected_data_future; + website_usage_telemetry_sampler_->MaybeCollect( + collected_data_future.GetCallback()); + const absl::optional<MetricData> metric_data_result = + collected_data_future.Take(); + ASSERT_FALSE(metric_data_result.has_value()); +} + +TEST_F(WebsiteUsageTelemetrySamplerTest, CollectWebsiteUsageData) { + static constexpr base::TimeDelta kWebsiteUsageDuration = base::Minutes(2); + TrackWebsiteUsageForUrl(kTestUrl, kWebsiteUsageDuration); + ASSERT_THAT(profile_->GetPrefs()->GetDict(kWebsiteUsage), SizeIs(1UL)); + + // Attempt to collect usage data and verify data is deleted from the pref + // store after it is reported. + { + base::test::TestFuture<absl::optional<MetricData>> collected_data_future; + website_usage_telemetry_sampler_->MaybeCollect( + collected_data_future.GetCallback()); + const absl::optional<MetricData> metric_data_result = + collected_data_future.Take(); + ASSERT_TRUE(metric_data_result.has_value()); + const auto& metric_data = metric_data_result.value(); + ASSERT_TRUE(metric_data.has_telemetry_data()); + ASSERT_TRUE(metric_data.telemetry_data().has_website_telemetry()); + ASSERT_TRUE(metric_data.telemetry_data() + .website_telemetry() + .has_website_usage_data()); + EXPECT_THAT(metric_data.telemetry_data() + .website_telemetry() + .website_usage_data() + .website_usage(), + ElementsAre(EqualsProto( + WebsiteUsageProto(kTestUrl, kWebsiteUsageDuration)))); + ASSERT_TRUE(profile_->GetPrefs()->GetDict(kWebsiteUsage).empty()); + } + + // Attempt to collect usage data again and verify there is none being + // reported. + { + base::test::TestFuture<absl::optional<MetricData>> collected_data_future; + website_usage_telemetry_sampler_->MaybeCollect( + collected_data_future.GetCallback()); + const absl::optional<MetricData> metric_data_result = + collected_data_future.Take(); + EXPECT_FALSE(metric_data_result.has_value()); + } +} + +TEST_F(WebsiteUsageTelemetrySamplerTest, CollectMultipleWebsiteUsageData) { + static constexpr char kOtherUrl[] = "https://b.example.org"; + static constexpr base::TimeDelta kWebsiteUsageDuration = base::Minutes(2); + TrackWebsiteUsageForUrl(kTestUrl, kWebsiteUsageDuration); + TrackWebsiteUsageForUrl(kOtherUrl, kWebsiteUsageDuration); + ASSERT_THAT(profile_->GetPrefs()->GetDict(kWebsiteUsage), SizeIs(2UL)); + + // Attempt to collect usage data and verify data is deleted from the pref + // store after it is reported. + { + base::test::TestFuture<absl::optional<MetricData>> collected_data_future; + website_usage_telemetry_sampler_->MaybeCollect( + collected_data_future.GetCallback()); + const absl::optional<MetricData> metric_data_result = + collected_data_future.Take(); + ASSERT_TRUE(metric_data_result.has_value()); + const auto& metric_data = metric_data_result.value(); + ASSERT_TRUE(metric_data.has_telemetry_data()); + ASSERT_TRUE(metric_data.telemetry_data().has_website_telemetry()); + ASSERT_TRUE(metric_data.telemetry_data() + .website_telemetry() + .has_website_usage_data()); + EXPECT_THAT( + metric_data.telemetry_data() + .website_telemetry() + .website_usage_data() + .website_usage(), + UnorderedElementsAre( + EqualsProto(WebsiteUsageProto(kTestUrl, kWebsiteUsageDuration)), + EqualsProto(WebsiteUsageProto(kOtherUrl, kWebsiteUsageDuration)))); + ASSERT_TRUE(profile_->GetPrefs()->GetDict(kWebsiteUsage).empty()); + } + + // Attempt to collect usage data again and verify there is none being + // reported. + { + base::test::TestFuture<absl::optional<MetricData>> collected_data_future; + website_usage_telemetry_sampler_->MaybeCollect( + collected_data_future.GetCallback()); + const absl::optional<MetricData> metric_data_result = + collected_data_future.Take(); + EXPECT_FALSE(metric_data_result.has_value()); + } +} + +TEST_F(WebsiteUsageTelemetrySamplerTest, + CollectWebsiteUsageDataAfterProfileDestructed) { + static constexpr base::TimeDelta kWebsiteUsageDuration = base::Minutes(2); + TrackWebsiteUsageForUrl(kTestUrl, kWebsiteUsageDuration); + ASSERT_THAT(profile_->GetPrefs()->GetDict(kWebsiteUsage), SizeIs(1UL)); + + // Delete the test profile. + profile_ = nullptr; + profile_manager_.DeleteAllTestingProfiles(); + + // Attempt to collect usage data and verify there is no data being reported. + base::test::TestFuture<absl::optional<MetricData>> collected_data_future; + website_usage_telemetry_sampler_->MaybeCollect( + collected_data_future.GetCallback()); + const absl::optional<MetricData> metric_data_result = + collected_data_future.Take(); + EXPECT_FALSE(metric_data_result.has_value()); +} + +} // namespace +} // namespace reporting
diff --git a/chrome/browser/devtools/devtools_file_helper.cc b/chrome/browser/devtools/devtools_file_helper.cc index 918b4646..a45e6eb5 100644 --- a/chrome/browser/devtools/devtools_file_helper.cc +++ b/chrome/browser/devtools/devtools_file_helper.cc
@@ -265,14 +265,13 @@ if (gurl.is_valid()) { url::RawCanonOutputW<1024> unescaped_content; std::string escaped_content = gurl.ExtractFileName(); - url::DecodeURLEscapeSequences( - escaped_content.c_str(), escaped_content.length(), - url::DecodeURLMode::kUTF8OrIsomorphic, &unescaped_content); + url::DecodeURLEscapeSequences(escaped_content, + url::DecodeURLMode::kUTF8OrIsomorphic, + &unescaped_content); // TODO(crbug.com/1324254): Due to filename encoding on Windows we can't // expect to always be able to convert to UTF8 and back std::string unescaped_content_string = - base::UTF16ToUTF8(base::StringPiece16(unescaped_content.data(), - unescaped_content.length())); + base::UTF16ToUTF8(unescaped_content.view()); suggested_file_name = unescaped_content_string; } else { suggested_file_name = url;
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index e449e36..283d3b6 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -1518,7 +1518,8 @@ } // Test that external extensions with incorrect IDs are not installed. -TEST_F(ExtensionServiceTest, FailOnWrongId) { +// TODO(b/300670172): This test is extremely flaky. +TEST_F(ExtensionServiceTest, DISABLED_FailOnWrongId) { InitializeEmptyExtensionService(); base::FilePath path = data_dir().AppendASCII("good.crx");
diff --git a/chrome/browser/extensions/service_worker_event_dispatching_browsertest.cc b/chrome/browser/extensions/service_worker_event_dispatching_browsertest.cc index b881daa1..bcc5d4b 100644 --- a/chrome/browser/extensions/service_worker_event_dispatching_browsertest.cc +++ b/chrome/browser/extensions/service_worker_event_dispatching_browsertest.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 <utility> + #include "base/test/scoped_feature_list.h" #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.h" #include "chrome/browser/extensions/extension_browsertest.h" @@ -50,22 +52,31 @@ TestWorkerStatusObserver(const TestWorkerStatusObserver&) = delete; TestWorkerStatusObserver& operator=(const TestWorkerStatusObserver&) = delete; - void WaitForWorkerStarting() { starting_worker_run_loop_.Run(); } void WaitForWorkerStarted() { started_worker_run_loop_.Run(); } void WaitForWorkerStopping() { stopping_worker_run_loop_.Run(); } void WaitForWorkerStopped() { stopped_worker_run_loop_.Run(); } + void SetOnStartingCallback(base::OnceCallback<void(int64_t)> callback) { + on_starting_callback_ = std::move(callback); + } + int64_t test_worker_version_id = blink::mojom::kInvalidServiceWorkerVersionId; // ServiceWorkerContextObserver: // Called when a worker has entered the // `blink::EmbeddedWorkerStatus::kStarting` status. Used to indicate when our - // test extension is beginning to start. + // test extension is beginning to start. If `on_starting_callback_` has been + // set it'll be run. void OnVersionStartingRunning(int64_t version_id) override { test_worker_version_id = version_id; - starting_worker_run_loop_.Quit(); + ASSERT_TRUE(content::CheckServiceWorkerIsStarting(sw_context_, + test_worker_version_id)); + + if (!on_starting_callback_.is_null()) { + std::move(on_starting_callback_).Run(test_worker_version_id); + } } // Called when a worker has entered the @@ -112,6 +123,7 @@ const raw_ptr<content::BrowserContext> browser_context_; const GURL extension_url_; const raw_ptr<content::ServiceWorkerContext> sw_context_; + base::OnceCallback<void(int64_t)> on_starting_callback_; base::ScopedObservation<content::ServiceWorkerContext, content::ServiceWorkerContextObserver> scoped_observation_{this}; @@ -149,6 +161,15 @@ return browser()->tab_strip_model()->GetActiveWebContents(); } + void CheckWorkerStartingAndDispatchTestEvent(int64_t test_worker_version_id) { + if (!content::CheckServiceWorkerIsStarting(sw_context_, + test_worker_version_id)) { + FAIL() << "The service worker was not detected as starting when it " + "should have been during test event dispatch."; + } + DispatchWebNavigationEvent(profile(), web_contents()); + } + protected: raw_ptr<const Extension> extension = nullptr; raw_ptr<content::ServiceWorkerContext> sw_context_ = nullptr; @@ -269,22 +290,26 @@ start_worker_observer.test_worker_version_id)); TestWorkerStatusObserver test_event_observer(profile(), kTestExtensionId); - // Start the worker and wait until the worker is kStarting. + test_event_observer.SetOnStartingCallback( + base::BindOnce(&ServiceWorkerEventDispatchingBrowserTest:: + CheckWorkerStartingAndDispatchTestEvent, + base::Unretained(this))); + + // Fire the test event with the worker in kStarting status. + base::HistogramTester histogram_tester; + ExtensionTestMessageListener extension_event_listener_fired("listener fired"); + // Start the worker but do not wait for starting. sw_context_->StartWorkerForScope(/*scope=*/extension->url(), /*key=*/ blink::StorageKey::CreateFirstParty( url::Origin::Create(extension->url())), /*info_callback=*/base::DoNothing(), /*failure_callback=*/base::DoNothing()); - test_event_observer.WaitForWorkerStarting(); - ASSERT_TRUE(content::CheckServiceWorkerIsStarting( - GetServiceWorkerContext(profile()), - test_event_observer.test_worker_version_id)); - // Fire the test event with the worker in kStarting status. - base::HistogramTester histogram_tester; - ExtensionTestMessageListener extension_event_listener_fired("listener fired"); - DispatchWebNavigationEvent(profile(), web_contents()); + // During this start we catch the transient kStarting status with + // TestWorkerStatusObserver::OnVersionStartingRunning() then synchronously + // confirm the worker is kStarting and dispatch the test event we listen to + // below via CheckWorkerStartingAndDispatchTestEvent(). // The histogram expect checks that we get an ack from the renderer to the // browser for the event. The wait confirms that extension worker listener
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn index 21a56a2..c1f221b 100644 --- a/chrome/browser/media/router/BUILD.gn +++ b/chrome/browser/media/router/BUILD.gn
@@ -13,14 +13,15 @@ } source_set("data_decoder_util") { - deps = [ - "//base", - "//services/data_decoder/public/cpp", - ] sources = [ "data_decoder_util.cc", "data_decoder_util.h", ] + deps = [ + "//base", + "//services/data_decoder/public/cpp", + ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } source_set("logger_list") { @@ -34,6 +35,7 @@ "//components/media_router/browser", "//content/public/browser", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } static_library("media_router_feature") { @@ -47,16 +49,28 @@ "//chrome/browser/profiles:profile", "//chrome/common:constants", "//components/media_router/common:common", - "//components/prefs:prefs", - "//components/user_prefs:user_prefs", + "//components/prefs", + "//components/user_prefs", "//content/public/browser", "//content/public/common", "//crypto", "//media", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } static_library("router") { + sources = [ + "chrome_media_router_factory.cc", + "chrome_media_router_factory.h", + "presentation/chrome_local_presentation_manager_factory.cc", + "presentation/chrome_local_presentation_manager_factory.h", + ] + public_deps = [ + "//components/media_router/browser", + "//components/media_router/common", + "//components/media_router/common/mojom:media_router", + ] deps = [ ":data_decoder_util", ":media_router_feature", @@ -79,46 +93,9 @@ "//third_party/icu", "//url", ] - public_deps = [ - "//components/media_router/browser", - "//components/media_router/common", - "//components/media_router/common/mojom:media_router", - ] - sources = [ - "chrome_media_router_factory.cc", - "chrome_media_router_factory.h", - "presentation/chrome_local_presentation_manager_factory.cc", - "presentation/chrome_local_presentation_manager_factory.h", - ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] if (!is_android) { - deps += [ - # We can't depend on //chrome/browser/ui due to introducing a cyclic - # dependency. Remove this target from the `allow_circular_includes_from` - # list in chrome/browser/ui/BUILD.gn once the issues is resolved. - # TODO(crbug.com/1030821): Resolve circular dependencies. - - "discovery:discovery", - "//chrome/browser:browser_process", - "//chrome/browser/media/router/discovery/access_code:access_code_cast_feature", - "//chrome/browser/profiles:profile", - "//components/access_code_cast/common:metrics", - "//components/embedder_support:browser_util", - "//components/mirroring/mojom:service", - "//components/ukm/content:content", - "//components/version_info:version_info", - "//media/cast:common", - "//media/remoting:remoting_device_capability", - "//mojo/public/cpp/bindings", - "//services/metrics/public/cpp:ukm_builders", - "//third_party/openscreen/src/cast/common/channel/proto:channel_proto", - ] - - public_deps += [ - "//components/media_router/common/mojom:debugger", - "//components/media_router/common/mojom:logger", - ] - sources += [ "mojo/media_router_debugger_impl.cc", "mojo/media_router_debugger_impl.h", @@ -175,7 +152,33 @@ "providers/wired_display/wired_display_presentation_receiver_factory.h", ] - deps += [ ":logger_list" ] + public_deps += [ + "//components/media_router/common/mojom:debugger", + "//components/media_router/common/mojom:logger", + ] + + deps += [ + # We can't depend on //chrome/browser/ui due to introducing a cyclic + # dependency. Remove this target from the `allow_circular_includes_from` + # list in chrome/browser/ui/BUILD.gn once the issues is resolved. + # TODO(crbug.com/1030821): Resolve circular dependencies. + + ":logger_list", + "//chrome/browser:browser_process", + "//chrome/browser/media/router/discovery", + "//chrome/browser/media/router/discovery/access_code:access_code_cast_feature", + "//chrome/browser/profiles:profile", + "//components/access_code_cast/common:metrics", + "//components/embedder_support:browser_util", + "//components/mirroring/mojom:service", + "//components/ukm/content:content", + "//components/version_info:version_info", + "//media/cast:common", + "//media/remoting:remoting_device_capability", + "//mojo/public/cpp/bindings", + "//services/metrics/public/cpp:ukm_builders", + "//third_party/openscreen/src/cast/common/channel/proto:channel_proto", + ] if (is_win) { sources += [ @@ -205,7 +208,7 @@ if (enable_extensions) { deps += [ - "//extensions/buildflags:buildflags", + "//extensions/buildflags", "//extensions/common", ] } @@ -215,7 +218,7 @@ static_library("test_support") { testonly = true deps = [ - "discovery:discovery", + "//chrome/browser/media/router/discovery", "//chrome/browser/media/router/discovery/access_code:access_code_sink_service", "//chrome/browser/media/router/discovery/access_code:discovery_resources_proto", "//chrome/test:test_support", @@ -263,7 +266,7 @@ "//base", "//base/test:test_support", "//chrome/test:test_support", - "//components/endpoint_fetcher:endpoint_fetcher", + "//components/endpoint_fetcher", "//components/media_router/browser:test_support", "//components/media_router/common:test_support", "//components/media_router/common/providers/cast/channel", @@ -337,21 +340,21 @@ deps += [ ":logger_list", ":test_support", - "//chrome/browser/media/router/discovery:discovery", + "//chrome/browser/media/router/discovery", "//chrome/browser/media/router/discovery/access_code:access_code_cast_feature", "//chrome/browser/media/router/discovery/access_code:access_code_sink_service", "//chrome/browser/media/router/discovery/access_code:discovery_resources_proto", "//chrome/test:test_support", "//components/sync_preferences:test_support", "//content/test:test_support", - "//services/preferences/public/cpp:cpp", + "//services/preferences/public/cpp", "//third_party/openscreen/src/cast/common:public", ] if (is_chromeos_lacros) { deps += [ "//chromeos/crosapi/mojom", - "//chromeos/lacros:lacros", + "//chromeos/lacros", ] } else { sources += [
diff --git a/chrome/browser/media/router/discovery/BUILD.gn b/chrome/browser/media/router/discovery/BUILD.gn index 2363eff..e2440c0 100644 --- a/chrome/browser/media/router/discovery/BUILD.gn +++ b/chrome/browser/media/router/discovery/BUILD.gn
@@ -8,28 +8,6 @@ static_library("discovery") { inputs = [ "$root_gen_dir/chrome/grit/generated_resources.h" ] - deps = [ - "//base", - "//base:i18n", - "//build:chromeos_buildflags", - "//chrome/app:generated_resources", - "//chrome/browser:browser_process", - "//chrome/browser/media/router:data_decoder_util", - "//chrome/browser/media/router:logger_list", - "//chrome/browser/media/router:media_router_feature", - "//chrome/common:constants", - "//components/media_router/browser", - "//components/media_router/common", - "//components/media_router/common/mojom:logger", - "//components/media_router/common/providers/cast/channel", - "//components/net_log", - "//components/prefs", - "//components/version_info", - "//content/public/browser", - "//content/public/common", - "//services/network/public/cpp", - "//third_party/openscreen/src/cast/common/channel/proto:channel_proto", - ] sources = [ "dial/device_description_fetcher.cc", "dial/device_description_fetcher.h", @@ -79,6 +57,29 @@ "media_sink_discovery_metrics.cc", "media_sink_discovery_metrics.h", ] + deps = [ + "//base", + "//base:i18n", + "//build:chromeos_buildflags", + "//chrome/app:generated_resources", + "//chrome/browser:browser_process", + "//chrome/browser/media/router:data_decoder_util", + "//chrome/browser/media/router:logger_list", + "//chrome/browser/media/router:media_router_feature", + "//chrome/common:constants", + "//components/media_router/browser", + "//components/media_router/common", + "//components/media_router/common/mojom:logger", + "//components/media_router/common/providers/cast/channel", + "//components/net_log", + "//components/prefs", + "//components/version_info", + "//content/public/browser", + "//content/public/common", + "//services/network/public/cpp", + "//third_party/openscreen/src/cast/common/channel/proto:channel_proto", + ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] if (is_linux || is_chromeos) { sources += [ "discovery_network_list_wifi_linux.cc" ]
diff --git a/chrome/browser/media/router/discovery/access_code/BUILD.gn b/chrome/browser/media/router/discovery/access_code/BUILD.gn index da32ce8..250df0f8 100644 --- a/chrome/browser/media/router/discovery/access_code/BUILD.gn +++ b/chrome/browser/media/router/discovery/access_code/BUILD.gn
@@ -23,10 +23,11 @@ "//chrome/browser/profiles:profile", "//chrome/common:channel_info", "//components/pref_registry:pref_registry", - "//components/prefs:prefs", - "//components/user_prefs:user_prefs", + "//components/prefs", + "//components/user_prefs", "//components/version_info:channel", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } if (!is_android) { @@ -48,32 +49,33 @@ public_deps = [ "//base", "//chrome/browser/profiles:profile", - "//components/media_router/browser:browser", + "//components/media_router/browser", "//components/media_router/common", "//components/media_router/common/mojom:logger", "//components/media_router/common/mojom:media_router", ] deps = [ ":access_code_cast_feature", + ":discovery_resources_proto", "//chrome/browser/media/router:router", - "//chrome/browser/media/router/discovery:discovery", - "//chrome/browser/media/router/discovery/access_code:discovery_resources_proto", + "//chrome/browser/media/router/discovery", "//chrome/browser/profiles:profile", "//chrome/browser/signin:identity_manager_provider", "//chrome/browser/ui/webui/access_code_cast:mojo_bindings", "//components/access_code_cast/common:metrics", - "//components/endpoint_fetcher:endpoint_fetcher", + "//components/endpoint_fetcher", "//components/keyed_service/content:content", "//components/leveldb_proto:leveldb_proto", "//components/media_router/common/providers/cast/channel", "//components/pref_registry", - "//components/prefs:prefs", - "//components/signin/public/base:base", - "//components/signin/public/identity_manager:identity_manager", - "//components/user_manager:user_manager", + "//components/prefs", + "//components/signin/public/base", + "//components/signin/public/identity_manager", + "//components/user_manager", "//content/public/browser", - "//services/preferences/public/cpp:cpp", + "//services/preferences/public/cpp", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] if (is_chromeos_lacros) { sources += [ @@ -82,7 +84,7 @@ ] deps += [ "//chromeos/crosapi/mojom", - "//chromeos/lacros:lacros", + "//chromeos/lacros", ] } }
diff --git a/chrome/browser/new_tab_page/modules/history_clusters/history_clusters_module_util.cc b/chrome/browser/new_tab_page/modules/history_clusters/history_clusters_module_util.cc index 03b3e00..93d1c82e 100644 --- a/chrome/browser/new_tab_page/modules/history_clusters/history_clusters_module_util.cc +++ b/chrome/browser/new_tab_page/modules/history_clusters/history_clusters_module_util.cc
@@ -179,15 +179,13 @@ std::string kSampleSearchQuery = "google store products"; url::RawCanonOutputT<char> encoded_query; - url::EncodeURIComponent(kSampleSearchQuery.c_str(), - kSampleSearchQuery.length(), &encoded_query); + url::EncodeURIComponent(kSampleSearchQuery, &encoded_query); sample_visits.insert( sample_visits.begin(), - GenerateSampleVisit( - 0, kSampleSearchQuery + " - Google Search", - GURL("https://www.google.com/search?q=" + - std::string(encoded_query.data(), encoded_query.length())), - false)); + GenerateSampleVisit(0, kSampleSearchQuery + " - Google Search", + GURL("https://www.google.com/search?q=" + + std::string(encoded_query.view())), + false)); return history::Cluster( cluster_id, sample_visits, {},
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h index d9f659a..b54b4d9 100644 --- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h +++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
@@ -104,7 +104,7 @@ optimization_guide::proto::ModelExecutionFeature feature, const google::protobuf::MessageLite& request_metadata, optimization_guide::OptimizationGuideModelExecutionResultCallback - callback); + callback) override; // Adds hints for a URL with provided metadata to the optimization guide. // For testing purposes only. This will flush any callbacks for |url| that @@ -131,6 +131,12 @@ return optimization_guide_logger_.get(); } + protected: + // Protected so that tests can stub out the implementation. + // TODO(b/303103198): Implement better testing support for model execution + // users and make that function private. + virtual bool ComponentUpdatesEnabledProvider() const; + private: friend class ChromeBrowserMainExtraPartsOptimizationGuide; friend class ChromeBrowsingDataRemoverDelegate; @@ -188,8 +194,6 @@ download::BackgroundDownloadService* BackgroundDownloadServiceProvider(); - bool ComponentUpdatesEnabledProvider() const; - raw_ptr<content::BrowserContext> browser_context_; // The store of hints.
diff --git a/chrome/browser/resources/ash/settings/os_languages_page/input_page.html b/chrome/browser/resources/ash/settings/os_languages_page/input_page.html index 0f39bf2..a294140 100644 --- a/chrome/browser/resources/ash/settings/os_languages_page/input_page.html +++ b/chrome/browser/resources/ash/settings/os_languages_page/input_page.html
@@ -316,7 +316,8 @@ <settings-toggle-button id="orcaToggle" pref="{{prefs.assistive_input.orca_enabled}}" label="Copy Suggestions" - aria-label="Copy Suggestions"> + aria-label="Copy Suggestions" + deep-link-focus-id$="[[Setting.kShowOrca]]"> </settings-toggle-button> </template>
diff --git a/chrome/browser/resources/ash/settings/os_languages_page/input_page.ts b/chrome/browser/resources/ash/settings/os_languages_page/input_page.ts index 29ff97c..397d1264 100644 --- a/chrome/browser/resources/ash/settings/os_languages_page/input_page.ts +++ b/chrome/browser/resources/ash/settings/os_languages_page/input_page.ts
@@ -167,6 +167,7 @@ Setting.kAddInputMethod, Setting.kShowEmojiSuggestions, Setting.kShowInputOptionsInShelf, + Setting.kShowOrca, Setting.kSpellCheck, ]); // From RouteOriginMixin.
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts index 7470ad68..04f3706 100644 --- a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts +++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.ts
@@ -283,6 +283,7 @@ if (this.jellySupport) { await this.loadJellyColorStylesheet(); + await this.loadJellyTypographyStylesheet(); } // After initial data is loaded, if the GIF nudge is not shown before, show @@ -369,6 +370,21 @@ }); } + // TODO(b/263055563): Move this stylesheet to `index.html` and drop the legacy + // stylesheet once Jelly is fully launched in Emoji Picker. + private loadJellyTypographyStylesheet(): Promise<void> { + return new Promise((resolve) => { + const linkElement = document.createElement('link'); + linkElement.rel = 'stylesheet'; + linkElement.href = 'chrome://theme/typography.css'; + linkElement.addEventListener('load', () => { + ColorChangeUpdater.forDocument().start(); + resolve(); + }); + document.head.appendChild(linkElement); + }); + } + private fetchAndProcessGifData( prevFetchPromise: Promise<EmojiGroupData> = Promise.resolve([]), prevRenderPromise = Promise.resolve()): Promise<void> {
diff --git a/chrome/browser/resources/connectors_internals/device_trust_connector.ts b/chrome/browser/resources/connectors_internals/device_trust_connector.ts index 130e81a8..50e125a 100644 --- a/chrome/browser/resources/connectors_internals/device_trust_connector.ts +++ b/chrome/browser/resources/connectors_internals/device_trust_connector.ts
@@ -43,15 +43,15 @@ return getTemplate(); } - public get deleteKeyEnabled(): boolean { + get deleteKeyEnabled(): boolean { return loadTimeData.getBoolean('canDeleteDeviceTrustKey'); } - public set enabledString(isEnabledString: string) { + set enabledString(isEnabledString: string) { this.setValueToElement('#enabled-string', isEnabledString); } - public set policyEnabledLevels(policyLevels: string[]) { + set policyEnabledLevels(policyLevels: string[]) { if (policyLevels.length === 0) { this.setValueToElement('#policy-enabled-levels', 'None'); return; @@ -60,7 +60,7 @@ this.setValueToElement('#policy-enabled-levels', `${policyLevels}`); } - public set consentMetadata(consentMetadata: ConsentMetadata|undefined) { + set consentMetadata(consentMetadata: ConsentMetadata|undefined) { const consentDetailsEl = (this.$('#consent-details') as HTMLElement); const noConsentDetailsEl = (this.$('#no-consent') as HTMLElement); if (!consentMetadata) { @@ -78,7 +78,7 @@ '#can-collect', `${consentMetadata.canCollectSignals}`); } - public set keyInfo(keyInfo: KeyInfo) { + set keyInfo(keyInfo: KeyInfo) { const keySectionEl = (this.$('#key-manager-section') as HTMLElement); const initStateEl = (this.$('#key-manager-state') as HTMLElement); @@ -136,7 +136,7 @@ } private signalsString_: string = ''; - public set signalsString(str: string) { + set signalsString(str: string) { const signalsEl = (this.$('#signals') as HTMLElement); if (signalsEl) { signalsEl.innerText = str; @@ -146,15 +146,15 @@ } } - public get copyButton(): HTMLButtonElement|undefined { + get copyButton(): HTMLButtonElement|undefined { return this.$('#copy-signals') as HTMLButtonElement; } - public get deleteKeyButton(): HTMLButtonElement|undefined { + get deleteKeyButton(): HTMLButtonElement|undefined { return this.$('#delete-key') as HTMLButtonElement; } - public get signalsString(): string { + get signalsString(): string { return this.signalsString_; }
diff --git a/chrome/browser/resources/new_tab_page/modules/history_clusters/module.ts b/chrome/browser/resources/new_tab_page/modules/history_clusters/module.ts index 2889c8ee..f422415b 100644 --- a/chrome/browser/resources/new_tab_page/modules/history_clusters/module.ts +++ b/chrome/browser/resources/new_tab_page/modules/history_clusters/module.ts
@@ -116,7 +116,10 @@ HistoryClustersProxyImpl.getInstance().handler.recordLayoutTypeShown( this.layoutType, this.cluster.id); - listenOnce(window, 'unload', () => { + // Use `pagehide` rather than `unload` because unload is being deprecated. + // `pagehide` fires with the same timing and is safe to use since NTP never + // enters back/forward-cache. + listenOnce(window, 'pagehide', () => { const visitTiles: TileModuleElement[] = Array.from( this.shadowRoot!.querySelectorAll('ntp-history-clusters-tile')); const count = visitTiles.reduce(
diff --git a/chrome/browser/resources/omnibox/omnibox_output.ts b/chrome/browser/resources/omnibox/omnibox_output.ts index debc99f..e49eae2 100644 --- a/chrome/browser/resources/omnibox/omnibox_output.ts +++ b/chrome/browser/resources/omnibox/omnibox_output.ts
@@ -567,7 +567,7 @@ super((value ? 'is: ' : 'not: ') + filterName); const icon = document.createElement('div'); - icon.classList.add(value ? 'check-mark' : 'x-mark'); + icon.classList.add('icon', value ? 'check-icon' : 'x-icon'); this.appendChild(icon); return this; @@ -638,9 +638,10 @@ container.appendChild(pre); const link = document.createElement('a'); + link.classList.add('icon', 'download-icon'); link.download = 'AdditionalInfo.json'; link.href = OutputDictionaryProperty.createDownloadLink(value); - container.appendChild(link); + container.insertBefore(link, container.firstChild); this.appendChild(container);
diff --git a/chrome/browser/resources/omnibox/output_results_group.css b/chrome/browser/resources/omnibox/output_results_group.css index f2b2631..5baf989 100644 --- a/chrome/browser/resources/omnibox/output_results_group.css +++ b/chrome/browser/resources/omnibox/output_results_group.css
@@ -234,9 +234,9 @@ color: red; } -.cell-additional-info a { - /* Inlined version of cr:file-download icon */ - background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></svg>'); +/* icons */ + +.icon { background-position: center; background-repeat: no-repeat; background-size: contain; @@ -245,29 +245,22 @@ width: 16px; } -.cell-additional-info:not(:hover) a { - visibility: hidden; +td:not(:hover) a.icon { + display: none; } -/* boolean cells */ - -.check-mark, -.x-mark { - background-position: center; - background-repeat: no-repeat; - background-size: contain; - height: 16px; - width: 16px; -} - -.check-mark { +.icon.check-icon { background-image: url(chrome://resources/images/check_circle_green.svg); } -.x-mark { +.icon.x-icon { background-image: url(chrome://resources/images/cancel_red.svg); } +.icon.download-icon { + background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></svg>'); +} + /* json cells */ pre.json .key {
diff --git a/chrome/browser/resources/password_manager/checkup_list_item.ts b/chrome/browser/resources/password_manager/checkup_list_item.ts index 2583b80fc..58eea94d 100644 --- a/chrome/browser/resources/password_manager/checkup_list_item.ts +++ b/chrome/browser/resources/password_manager/checkup_list_item.ts
@@ -105,7 +105,7 @@ })); } - public showHidePassword() { + showHidePassword() { if (this.isPasswordVisible === true) { this.onShowHidePasswordButtonClick(); this.item.password = undefined; @@ -125,7 +125,7 @@ .catch(() => {}); } - public showEditDialog() { + showEditDialog() { PasswordManagerImpl.getInstance() .requestCredentialsDetails([this.item.id]) .then(entries => { @@ -139,7 +139,7 @@ .catch(() => {}); } - public showDeleteDialog() { + showDeleteDialog() { this.showDeletePasswordDialog_ = true; }
diff --git a/chrome/browser/resources/password_manager/passwords_section.ts b/chrome/browser/resources/password_manager/passwords_section.ts index ade25bc7..12f1347 100644 --- a/chrome/browser/resources/password_manager/passwords_section.ts +++ b/chrome/browser/resources/password_manager/passwords_section.ts
@@ -211,7 +211,7 @@ } } - public focusFirstResult() { + focusFirstResult() { if (!this.searchTerm_) { // If search term is empty don't do anything. return;
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc index cf9e91c..5d4824c4 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -16,6 +16,7 @@ #include "base/observer_list.h" #include "base/rand_util.h" #include "base/ranges/algorithm.h" +#include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" @@ -932,18 +933,13 @@ "password?utm_source=Google&utm_campaign=PhishGuard"; url::RawCanonOutputT<char> percent_encoded_email; url::RawCanonOutputT<char> percent_encoded_account_url; - url::EncodeURIComponent(account_email.c_str(), account_email.length(), - &percent_encoded_email); - url::EncodeURIComponent(account_url.c_str(), account_url.length(), - &percent_encoded_account_url); - GURL change_password_url = GURL(base::StringPrintf( - "https://accounts.google.com/" - "AccountChooser?Email=%s&continue=%s", - std::string(percent_encoded_email.data(), percent_encoded_email.length()) - .c_str(), - std::string(percent_encoded_account_url.data(), - percent_encoded_account_url.length()) - .c_str())); + url::EncodeURIComponent(account_email, &percent_encoded_email); + url::EncodeURIComponent(account_url, &percent_encoded_account_url); + GURL change_password_url = + GURL(base::StrCat({"https://accounts.google.com/" + "AccountChooser?Email=", + percent_encoded_email.view(), + "&continue=", percent_encoded_account_url.view()})); return google_util::AppendGoogleLocaleParam( change_password_url, g_browser_process->GetApplicationLocale()); }
diff --git a/chrome/browser/sharing/click_to_call/click_to_call_utils.cc b/chrome/browser/sharing/click_to_call/click_to_call_utils.cc index de02dbd3..7a8b2814 100644 --- a/chrome/browser/sharing/click_to_call/click_to_call_utils.cc +++ b/chrome/browser/sharing/click_to_call/click_to_call_utils.cc
@@ -72,11 +72,10 @@ std::string GetUnescapedURLContent(const GURL& url) { std::string content_string(url.GetContent()); url::RawCanonOutputT<char16_t> unescaped_content; - url::DecodeURLEscapeSequences(content_string.data(), content_string.size(), + url::DecodeURLEscapeSequences(content_string, url::DecodeURLMode::kUTF8OrIsomorphic, &unescaped_content); - return base::UTF16ToUTF8( - std::u16string(unescaped_content.data(), unescaped_content.length())); + return base::UTF16ToUTF8(unescaped_content.view()); } } // namespace
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc index 75c5c37..f268afb 100644 --- a/chrome/browser/ssl/ssl_browsertest.cc +++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -353,8 +353,8 @@ std::string EncodeQuery(const std::string& query) { url::RawCanonOutputT<char> buffer; - url::EncodeURIComponent(query.data(), query.size(), &buffer); - return std::string(buffer.data(), buffer.length()); + url::EncodeURIComponent(query, &buffer); + return std::string(buffer.view()); } // Returns the Sha256 hash of the SPKI of |cert|.
diff --git a/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc b/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc index 6d7f753..5696a3f3 100644 --- a/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc +++ b/chrome/browser/storage_access_api/storage_access_grant_permission_context.cc
@@ -145,7 +145,7 @@ switch (outcome) { case RequestOutcome::kGrantedByFirstPartySet: constraints.set_lifetime( - blink::features::kStorageAccessAPIImplicitPermissionLifetime.Get()); + blink::features::kStorageAccessAPIRelatedWebsiteSetsLifetime.Get()); constraints.set_session_model( content_settings::SessionModel::NonRestorableUserSession); return constraints;
diff --git a/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc b/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc index 42034f4..7593c06 100644 --- a/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc +++ b/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc
@@ -828,6 +828,8 @@ TEST_P(StorageAccessGrantPermissionContextAPIWithFirstPartySetsTest, ImplicitGrant_AutograntedWithinFPS) { + base::Time expiration_lower_bound_check = base::Time::Now(); + HostContentSettingsMap* settings_map = HostContentSettingsMapFactory::GetForProfile(profile()); DCHECK(settings_map); @@ -856,6 +858,17 @@ EXPECT_THAT(page_specific_content_settings()->GetTwoSiteRequests( ContentSettingsType::STORAGE_ACCESS), IsEmpty()); + + auto setting = non_restorable_grants[0]; + + EXPECT_NE(true, setting.IsExpired()); + // Check to ensure the expiration time is in expected range. + EXPECT_GT(setting.metadata.expiration(), + blink::features::kStorageAccessAPIRelatedWebsiteSetsLifetime.Get() + + expiration_lower_bound_check); + EXPECT_LT(setting.metadata.expiration(), + blink::features::kStorageAccessAPIRelatedWebsiteSetsLifetime.Get() + + base::Time::Now()); } // This test suite is no-op since the enablde/disabled features are hard coded.
diff --git a/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc b/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc index 9daa61f10..c9c9520 100644 --- a/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc +++ b/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc
@@ -12,7 +12,6 @@ const char kVersionName[] = "version"; const char kDisable3PCookiesName[] = "disable_3p_cookies"; -const char kDisableAdsAPIsName[] = "disable_ads_apis"; const char kForceEligibleForTestingName[] = "force_eligible"; // Set the version of the experiment finch config. @@ -27,12 +26,6 @@ /*name=*/kDisable3PCookiesName, /*default_value=*/false}; -// Whether Ads APIs should be disabled. -const base::FeatureParam<bool> kDisableAdsAPIs{ - &features::kCookieDeprecationFacilitatedTesting, - /*name=*/kDisableAdsAPIsName, - /*default_value=*/false}; - extern const base::FeatureParam<base::TimeDelta> kDecisionDelayTime{ &features::kCookieDeprecationFacilitatedTesting, /*name=*/"decision_delay_time",
diff --git a/chrome/browser/tpcd/experiment/tpcd_experiment_features.h b/chrome/browser/tpcd/experiment/tpcd_experiment_features.h index 29bf977c..fb64709 100644 --- a/chrome/browser/tpcd/experiment/tpcd_experiment_features.h +++ b/chrome/browser/tpcd/experiment/tpcd_experiment_features.h
@@ -12,13 +12,11 @@ extern const char kVersionName[]; extern const char kDisable3PCookiesName[]; -extern const char kDisableAdsAPIsName[]; extern const char kDecisionDelayTimeName[]; extern const char kForceEligibleForTestingName[]; extern const base::FeatureParam<int> kVersion; extern const base::FeatureParam<bool> kDisable3PCookies; -extern const base::FeatureParam<bool> kDisableAdsAPIs; extern const base::FeatureParam<base::TimeDelta> kDecisionDelayTime; extern const base::FeatureParam<bool> kForceEligibleForTesting;
diff --git a/chrome/browser/translate/android/BUILD.gn b/chrome/browser/translate/android/BUILD.gn new file mode 100644 index 0000000..a8adee3 --- /dev/null +++ b/chrome/browser/translate/android/BUILD.gn
@@ -0,0 +1,91 @@ +# 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. + +import("//build/config/android/rules.gni") +import("//third_party/jni_zero/jni_zero.gni") + +android_library("java") { + srcjar_deps = [ ":jni_headers" ] + sources = [ "java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarController.java" ] + resources_package = "org.chromium.chrome.browser.translate" + deps = [ + "//base:base_java", + "//base:jni_java", + "//build/android:build_java", + "//chrome/android:chrome_app_java_resources", + "//chrome/browser/ui/messages/android:java", + "//components/translate/content/android:java_resources", + "//content/public/android:content_java", + "//third_party/androidx:androidx_annotation_annotation_java", + "//third_party/androidx:androidx_appcompat_appcompat_resources_java", + "//ui/android:ui_no_recycler_view_java", + ] +} + +static_library("android") { + sources = [ + "auto_translate_snackbar_controller.cc", + "auto_translate_snackbar_controller.h", + ] + + deps = [ + ":jni_headers", + "//base", + "//components/translate/core/browser", + "//components/translate/core/common", + "//content/public/browser", + ] +} + +generate_jni("jni_headers") { + sources = [ "java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarController.java" ] +} + +robolectric_library("junit") { + resources_package = "org.chromium.chrome.browser.translate" + sources = [ "java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerTest.java" ] + deps = [ + ":java", + "//base:base_java", + "//base:base_java_test_support", + "//base:base_junit_test_support", + "//base:jni_java", + "//chrome/browser/ui/messages/android:java", + "//components/browser_ui/widget/android:java", + "//content/public/android:content_java", + "//third_party/androidx:androidx_appcompat_appcompat_java", + "//third_party/androidx:androidx_test_runner_java", + "//third_party/junit:junit", + "//third_party/mockito:mockito_java", + "//ui/android:ui_java", + ] +} + +android_library("javatests") { + testonly = true + resources_package = "org.chromium.chrome.browser.translate" + sources = [ "java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerJavaTest.java" ] + deps = [ + ":java", + "//base:base_java", + "//base:base_java_test_support", + "//base:jni_java", + "//chrome/android:chrome_java", + "//chrome/browser/flags:java", + "//chrome/browser/ui/messages/android:java", + "//chrome/browser/ui/messages/android:java_resources", + "//chrome/test/android:chrome_java_integration_test_support", + "//chrome/test/android:chrome_java_unit_test_support", + "//components/browser_ui/test/android:test_support_java", + "//components/browser_ui/widget/android:java", + "//components/messages/android:java", + "//content/public/android:content_java", + "//content/public/test/android:content_java_test_support", + "//third_party/androidx:androidx_test_runner_java", + "//third_party/junit", + "//third_party/mockito:mockito_java", + "//ui/android:ui_java", + "//ui/android:ui_java_test_support", + ] +}
diff --git a/chrome/browser/translate/android/auto_translate_snackbar_controller.cc b/chrome/browser/translate/android/auto_translate_snackbar_controller.cc new file mode 100644 index 0000000..f240d4ab --- /dev/null +++ b/chrome/browser/translate/android/auto_translate_snackbar_controller.cc
@@ -0,0 +1,137 @@ +// 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 <memory> +#include <string> + +#include "chrome/browser/translate/android/auto_translate_snackbar_controller.h" + +#include "base/android/jni_android.h" +#include "base/android/jni_array.h" +#include "base/android/jni_string.h" +#include "base/memory/raw_ptr.h" +#include "base/memory/weak_ptr.h" +#include "chrome/browser/translate/android/jni_headers/AutoTranslateSnackbarController_jni.h" +#include "components/translate/core/browser/translate_manager.h" +#include "components/translate/core/browser/translate_metrics_logger.h" +#include "components/translate/core/common/translate_metrics.h" +#include "content/public/browser/web_contents.h" + +namespace translate { + +namespace { + +// Default implementation of the AutoTranslateSnackbarController::Bridge +// interface, which just calls the appropriate Java methods in each case. +class BridgeImpl : public AutoTranslateSnackbarController::Bridge { + public: + ~BridgeImpl() override; + + bool CreateAutoTranslateSnackbarController( + JNIEnv* env, + content::WebContents* web_contents, + AutoTranslateSnackbarController* native_auto_translate_snackbar) + override { + CHECK(!java_auto_translate_snackbar_controller_); + java_auto_translate_snackbar_controller_ = + Java_AutoTranslateSnackbarController_create( + env, web_contents->GetJavaWebContents(), + reinterpret_cast<intptr_t>(native_auto_translate_snackbar)); + return bool(java_auto_translate_snackbar_controller_); + } + + void ShowSnackbar( + JNIEnv* env, + base::android::ScopedJavaLocalRef<jstring> target_language) override { + Java_AutoTranslateSnackbarController_show( + env, java_auto_translate_snackbar_controller_, + std::move(target_language)); + is_showing_ = true; + } + + void WasDismissed() override { is_showing_ = false; } + + bool IsSnackbarShowing() override { return is_showing_; } + + void DismissSnackbar(JNIEnv* env) override { + if (java_auto_translate_snackbar_controller_) { + Java_AutoTranslateSnackbarController_dismiss( + env, java_auto_translate_snackbar_controller_); + is_showing_ = false; + } + } + + private: + base::android::ScopedJavaGlobalRef<jobject> + java_auto_translate_snackbar_controller_; + bool is_showing_; +}; + +BridgeImpl::~BridgeImpl() = default; + +} // namespace + +AutoTranslateSnackbarController::Bridge::~Bridge() = default; + +AutoTranslateSnackbarController::AutoTranslateSnackbarController( + content::WebContents* web_contents, + const base::WeakPtr<TranslateManager>& translate_manager, + std::unique_ptr<Bridge> bridge) + : web_contents_(web_contents), + translate_manager_(translate_manager), + bridge_(std::move(bridge)) {} + +AutoTranslateSnackbarController::AutoTranslateSnackbarController( + content::WebContents* web_contents, + const base::WeakPtr<TranslateManager>& translate_manager) + : AutoTranslateSnackbarController(web_contents, + translate_manager, + std::make_unique<BridgeImpl>()) { + JNIEnv* env = base::android::AttachCurrentThread(); + bridge_->CreateAutoTranslateSnackbarController(env, web_contents_, this); +} + +AutoTranslateSnackbarController::~AutoTranslateSnackbarController() { + JNIEnv* env = base::android::AttachCurrentThread(); + bridge_->DismissSnackbar(env); +} + +void AutoTranslateSnackbarController::ShowSnackbar( + const std::string& target_language) { + JNIEnv* env = base::android::AttachCurrentThread(); + base::android::ScopedJavaLocalRef<jstring> java_target_langauge = + base::android::ConvertUTF8ToJavaString(env, target_language); + bridge_->ShowSnackbar(env, java_target_langauge); +} + +bool AutoTranslateSnackbarController::IsShowing() { + return bridge_->IsSnackbarShowing(); +} + +void AutoTranslateSnackbarController::OnDismissNoAction(JNIEnv* env) { + bridge_->WasDismissed(); +} + +void AutoTranslateSnackbarController::OnUndoActionPressed( + JNIEnv* env, + base::android::JavaParamRef<jstring> j_target_language) { + const std::string target_language = + base::android::ConvertJavaStringToUTF8(env, j_target_language); + + ReportCompactInfobarEvent(InfobarEvent::INFOBAR_REVERT); + translate_manager_->GetActiveTranslateMetricsLogger()->LogUIInteraction( + UIInteraction::kRevert); + translate_manager_->RevertTranslation(); + translate_manager_->ShowTranslateUI(target_language, + /* auto_translate */ false, + /* triggered_from_menu */ false); + bridge_->WasDismissed(); +} + +void AutoTranslateSnackbarController::NativeDismissSnackbar() { + JNIEnv* env = base::android::AttachCurrentThread(); + bridge_->DismissSnackbar(env); +} + +} // namespace translate
diff --git a/chrome/browser/translate/android/auto_translate_snackbar_controller.h b/chrome/browser/translate/android/auto_translate_snackbar_controller.h new file mode 100644 index 0000000..68c43ce --- /dev/null +++ b/chrome/browser/translate/android/auto_translate_snackbar_controller.h
@@ -0,0 +1,92 @@ +// 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 CHROME_BROWSER_TRANSLATE_ANDROID_AUTO_TRANSLATE_SNACKBAR_CONTROLLER_H_ +#define CHROME_BROWSER_TRANSLATE_ANDROID_AUTO_TRANSLATE_SNACKBAR_CONTROLLER_H_ + +#include <jni.h> + +#include <memory> +#include <string> + +#include "base/android/scoped_java_ref.h" +#include "base/memory/raw_ptr.h" +#include "base/memory/weak_ptr.h" + +namespace content { +class WebContents; +} + +namespace translate { + +class TranslateManager; + +class AutoTranslateSnackbarController { + public: + AutoTranslateSnackbarController( + content::WebContents* web_contents, + const base::WeakPtr<TranslateManager>& translate_manager); + + AutoTranslateSnackbarController(const AutoTranslateSnackbarController&) = + delete; + AutoTranslateSnackbarController& operator=( + const AutoTranslateSnackbarController&) = delete; + + // Dismiss Snackbar on destruction if it is showing. + ~AutoTranslateSnackbarController(); + + // Show the auto-translate snackbar for the given target language. + void ShowSnackbar(const std::string& target_langage); + + // Whether or not the auto-translate snackbar is currently showing. + bool IsShowing(); + + // Called by Java when the snackbar is dismissed with no action. + void OnDismissNoAction(JNIEnv* env); + + // Called by Java when the Undo action is pressed. + void OnUndoActionPressed( + JNIEnv* env, + base::android::JavaParamRef<jstring> target_language); + + // Called by native to manually dismiss the snackbar + void NativeDismissSnackbar(); + + // Passes on JNI calls to the stored Java AutoTranslateSnackbarController. + // This interface exists in order to make it easier to test + // AutoTranslateSnackbarController. + class Bridge { + public: + virtual ~Bridge(); + + virtual bool CreateAutoTranslateSnackbarController( + JNIEnv* env, + content::WebContents* web_contents, + AutoTranslateSnackbarController* native_auto_translate_snackbar) = 0; + + virtual void ShowSnackbar( + JNIEnv* env, + base::android::ScopedJavaLocalRef<jstring> target_language) = 0; + virtual void WasDismissed() = 0; + virtual bool IsSnackbarShowing() = 0; + + virtual void DismissSnackbar(JNIEnv* env) = 0; + }; + + // Test-only constructor to enable a custom Bridge. + AutoTranslateSnackbarController( + content::WebContents* web_contents, + const base::WeakPtr<TranslateManager>& translate_manager, + std::unique_ptr<Bridge> bridge); + + private: + raw_ptr<content::WebContents> web_contents_; + base::WeakPtr<TranslateManager> translate_manager_; + base::android::ScopedJavaGlobalRef<jobject> java_auto_translate_snackbar_; + std::unique_ptr<Bridge> bridge_; +}; + +} // namespace translate + +#endif // CHROME_BROWSER_TRANSLATE_ANDROID_AUTO_TRANSLATE_SNACKBAR_H_
diff --git a/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarController.java b/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarController.java new file mode 100644 index 0000000..74746c21 --- /dev/null +++ b/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarController.java
@@ -0,0 +1,136 @@ +// 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. + +package org.chromium.chrome.browser.translate; + +import android.app.Activity; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; + +import androidx.annotation.VisibleForTesting; +import androidx.appcompat.content.res.AppCompatResources; + +import org.chromium.base.LocaleUtils; +import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.NativeMethods; +import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManagerProvider; +import org.chromium.content_public.browser.WebContents; +import org.chromium.ui.base.WindowAndroid; + +import java.lang.ref.WeakReference; +import java.util.Locale; + +/** + * Manages the auto-translate Snackbar + */ +@JNINamespace("translate") +class AutoTranslateSnackbarController implements SnackbarManager.SnackbarController { + private static final int AUTO_TRANSLATE_SNACKBAR_DURATION_MS = 4000; + + private WeakReference<Activity> mActivity; + private long mNativeAutoTranslateSnackbarController; + private SnackbarManager mSnackbarManager; + + @VisibleForTesting + static class TargetLanguageData { + private String mTargetLanguage; + + TargetLanguageData(String targetLanguage) { + mTargetLanguage = targetLanguage; + } + + public String getTargetLanguage() { + return mTargetLanguage; + } + } + + AutoTranslateSnackbarController(WeakReference<Activity> activity, + SnackbarManager snackbarManager, long nativeAutoTranslateSnackbarController) { + mActivity = activity; + mSnackbarManager = snackbarManager; + mNativeAutoTranslateSnackbarController = nativeAutoTranslateSnackbarController; + } + + // SnackbarController implementation. + // Called when the user clicks the undo button. + @Override + public void onAction(Object actionData) { + if (!(actionData instanceof TargetLanguageData)) return; + if (mNativeAutoTranslateSnackbarController == 0) return; + + TargetLanguageData targetLanguageData = (TargetLanguageData) actionData; + + AutoTranslateSnackbarControllerJni.get().onUndoActionPressed( + mNativeAutoTranslateSnackbarController, targetLanguageData.getTargetLanguage()); + } + + // Called when the snackbar is dismissed by timeout or UI environment change. + @Override + public void onDismissNoAction(Object actionData) { + if (mNativeAutoTranslateSnackbarController == 0) return; + AutoTranslateSnackbarControllerJni.get().onDismissNoAction( + mNativeAutoTranslateSnackbarController); + } + + // Class methods called by native. + // Create and show a Snackbar for the given target language code. + @CalledByNative + public void show(String targetLanguage) { + Resources resources = mActivity.get().getResources(); + + Locale targetLocale = + LocaleUtils.getUpdatedLocaleForChromium(Locale.forLanguageTag(targetLanguage)); + String targetLanguageName = targetLocale.getDisplayLanguage(); + Drawable icon = AppCompatResources.getDrawable( + mActivity.get(), R.drawable.infobar_translate_compact); + + TargetLanguageData targetLanguageData = new TargetLanguageData(targetLanguage); + String title = resources.getString( + R.string.translate_message_snackbar_page_translated, targetLanguageName); + + Snackbar snackbar = + Snackbar.make(title, this, Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_AUTO_TRANSLATE) + .setSingleLine(false) + .setProfileImage(icon) + .setDuration(AUTO_TRANSLATE_SNACKBAR_DURATION_MS) + .setAction(resources.getString(R.string.undo), targetLanguageData); + + mSnackbarManager.showSnackbar(snackbar); + } + + @CalledByNative + // Hide the Snackbar by calling the dismiss on the {@link SnackbarManager} + public void dismiss() { + mSnackbarManager.dismissSnackbars(this); + } + + // Static methods called by native. + /** + * Create a new AutoTranslateSnackbarController + */ + @CalledByNative + public static AutoTranslateSnackbarController create( + WebContents webContents, long nativeAutoTranslateSnackbarController) { + WindowAndroid window = webContents.getTopLevelNativeWindow(); + if (window == null) return null; + + WeakReference<Activity> activity = window.getActivity(); + if (activity == null) return null; + + SnackbarManager snackbarManager = SnackbarManagerProvider.from(window); + if (snackbarManager == null) return null; + + return new AutoTranslateSnackbarController( + activity, snackbarManager, nativeAutoTranslateSnackbarController); + } + + @NativeMethods + interface Natives { + void onUndoActionPressed(long nativeAutoTranslateSnackbarController, String targetLanguage); + void onDismissNoAction(long nativeAutoTranslateSnackbarController); + } +}
diff --git a/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerJavaTest.java b/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerJavaTest.java new file mode 100644 index 0000000..636f58c --- /dev/null +++ b/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerJavaTest.java
@@ -0,0 +1,178 @@ +// 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. + +package org.chromium.chrome.browser.translate; + +import android.app.Activity; +import android.widget.Button; +import android.widget.TextView; + +import androidx.test.filters.SmallTest; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.JniMocker; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.content_public.browser.test.util.TestThreadUtils; + +import java.lang.ref.WeakReference; +import java.util.concurrent.ExecutionException; + +/** + * Instrumentation tests for {@link AutoTranslateSnackbarController} + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@Batch(Batch.PER_CLASS) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +public final class AutoTranslateSnackbarControllerJavaTest { + @Rule + public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + @Rule + public JniMocker mJniMocker = new JniMocker(); + + private static final long NATIVE_SNACKBAR_VIEW = 1001L; + + @Mock + AutoTranslateSnackbarController.Natives mMockJni; + + private AutoTranslateSnackbarController mAutoTranslateSnackbarController; + private SnackbarManager mSnackbarManager; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mActivityTestRule.startMainActivityOnBlankPage(); + mSnackbarManager = mActivityTestRule.getActivity().getSnackbarManager(); + WeakReference<Activity> weakReference = + new WeakReference<Activity>(mActivityTestRule.getActivity()); + + mAutoTranslateSnackbarController = new AutoTranslateSnackbarController( + weakReference, mSnackbarManager, NATIVE_SNACKBAR_VIEW); + + mJniMocker.mock(AutoTranslateSnackbarControllerJni.TEST_HOOKS, mMockJni); + } + + @Test + @SmallTest + public void testShowSnackbar() throws Exception { + showSnackbar("en"); + + Snackbar currentSnackbar = getCurrentSnackbar(); + + Assert.assertEquals("Page translated to English", getSnackbarMessageText()); + Assert.assertEquals("Undo", getSnackbarActionText()); + Assert.assertTrue("Incorrect SnackbarController type", + currentSnackbar.getController() instanceof AutoTranslateSnackbarController); + Assert.assertTrue("Incorrect ActionData type", + currentSnackbar.getActionDataForTesting() + instanceof AutoTranslateSnackbarController.TargetLanguageData); + AutoTranslateSnackbarController.TargetLanguageData data = + (AutoTranslateSnackbarController.TargetLanguageData) + currentSnackbar.getActionDataForTesting(); + Assert.assertEquals("en", data.getTargetLanguage()); + } + + @Test + @SmallTest + /** + * The target language is stored in Translate format, which uses the old deprecated Java codes + * for several languages (Hebrew, Indonesian), and uses "tl" while Chromium uses "fil" for + * Tagalog/Filipino. This tests that when using Translate format codes the Chrome version is + * displayed in the Snackbar. + */ + public void testShowSnackbarChromeLanguage() throws Exception { + // Use the Translate tag tl which Chrome should display as "Filipino" + showSnackbar("tl"); + + Snackbar currentSnackbar = getCurrentSnackbar(); + + // Should be Filipino and not Tagalog. + Assert.assertEquals("Page translated to Filipino", getSnackbarMessageText()); + AutoTranslateSnackbarController.TargetLanguageData data = + (AutoTranslateSnackbarController.TargetLanguageData) + currentSnackbar.getActionDataForTesting(); + Assert.assertEquals("tl", data.getTargetLanguage()); + } + + @Test + @SmallTest + public void testDismiss() throws Exception { + showSnackbar("en"); + dismissSnackbar(); + Assert.assertNull(getCurrentSnackbar()); + } + + @Test + @SmallTest + public void testOnSnackbarActionClicked() throws Exception { + showSnackbar("tl"); + clickSnackbarAction(); + + Mockito.verify(mMockJni).onUndoActionPressed(NATIVE_SNACKBAR_VIEW, "tl"); + } + + @Test + @SmallTest + public void testOnSnackbarAutoDismissed() throws Exception { + showSnackbar("en"); + + timeoutSnackbar(); + + Mockito.verify(mMockJni).onDismissNoAction(NATIVE_SNACKBAR_VIEW); + } + + private void showSnackbar(String targetLanguage) { + TestThreadUtils.runOnUiThreadBlocking( + () -> mAutoTranslateSnackbarController.show(targetLanguage)); + } + + private void dismissSnackbar() { + TestThreadUtils.runOnUiThreadBlocking(() -> mAutoTranslateSnackbarController.dismiss()); + } + + private void clickSnackbarAction() { + TestThreadUtils.runOnUiThreadBlocking( + () + -> mSnackbarManager.onClick(mActivityTestRule.getActivity().findViewById( + R.id.snackbar_button))); + } + + private void timeoutSnackbar() { + TestThreadUtils.runOnUiThreadBlocking( + () + -> mSnackbarManager.dismissSnackbars( + mSnackbarManager.getCurrentSnackbarForTesting().getController())); + } + + private String getSnackbarMessageText() { + return ((TextView) mActivityTestRule.getActivity().findViewById(R.id.snackbar_message)) + .getText() + .toString(); + } + + private String getSnackbarActionText() { + return ((Button) mActivityTestRule.getActivity().findViewById(R.id.snackbar_button)) + .getText() + .toString(); + } + + private Snackbar getCurrentSnackbar() throws ExecutionException { + return TestThreadUtils.runOnUiThreadBlocking( + () -> mSnackbarManager.getCurrentSnackbarForTesting()); + } +}
diff --git a/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerTest.java b/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerTest.java new file mode 100644 index 0000000..a211f35 --- /dev/null +++ b/chrome/browser/translate/android/java/src/org/chromium/chrome/browser/translate/AutoTranslateSnackbarControllerTest.java
@@ -0,0 +1,79 @@ +// 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. + +package org.chromium.chrome.browser.translate; + +import android.app.Activity; + +import androidx.test.filters.SmallTest; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +import org.chromium.base.UnownedUserDataHost; +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.JniMocker; +import org.chromium.content_public.browser.WebContents; +import org.chromium.ui.base.WindowAndroid; + +import java.lang.ref.WeakReference; + +/** + * Unit tests for {@link AutoTranslateSnackbarController} + */ +@RunWith(BaseRobolectricTestRunner.class) +public final class AutoTranslateSnackbarControllerTest { + private static final int NATIVE_SNACKBAR_VIEW = 1001; + + @Rule + public JniMocker mJniMocker = new JniMocker(); + @Mock + AutoTranslateSnackbarController.Natives mMockJni; + + @Mock + private WebContents mWebContents; + @Mock + private WindowAndroid mWindowAndroid; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mJniMocker.mock(AutoTranslateSnackbarControllerJni.TEST_HOOKS, mMockJni); + } + + @Test + @SmallTest + public void testCreateWithNullWindowAndroid() { + Mockito.doReturn(null).when(mWebContents).getTopLevelNativeWindow(); + Assert.assertNull( + AutoTranslateSnackbarController.create(mWebContents, NATIVE_SNACKBAR_VIEW)); + } + + @Test + @SmallTest + public void testCreateWithNullActivityWeakReference() { + Mockito.doReturn(mWindowAndroid).when(mWebContents).getTopLevelNativeWindow(); + Mockito.doReturn(null).when(mWindowAndroid).getActivity(); + Assert.assertNull( + AutoTranslateSnackbarController.create(mWebContents, NATIVE_SNACKBAR_VIEW)); + } + + @Test + @SmallTest + public void testCreateWithNullSnackbarManager() { + Activity activity = Mockito.mock(Activity.class); + + Mockito.doReturn(new WeakReference<Activity>(activity)).when(mWindowAndroid).getActivity(); + Mockito.doReturn(mWindowAndroid).when(mWebContents).getTopLevelNativeWindow(); + Mockito.doReturn(new UnownedUserDataHost()).when(mWindowAndroid).getUnownedUserDataHost(); + Assert.assertNull( + AutoTranslateSnackbarController.create(mWebContents, NATIVE_SNACKBAR_VIEW)); + } +}
diff --git a/chrome/browser/translate/chrome_translate_client.cc b/chrome/browser/translate/chrome_translate_client.cc index 650514b..e8a0711 100644 --- a/chrome/browser/translate/chrome_translate_client.cc +++ b/chrome/browser/translate/chrome_translate_client.cc
@@ -54,7 +54,10 @@ #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/android/android_theme_resources.h" +#include "chrome/browser/translate/android/auto_translate_snackbar_controller.h" #include "components/translate/content/android/translate_message.h" +#include "content/public/browser/page.h" +#include "content/public/browser/visibility.h" #else #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" @@ -230,13 +233,21 @@ // Get the TranslationType from associated manager's language state. translate::TranslationType translate_type = GetLanguageState().translation_type(); + // Use the automatic translation Snackbar if the current translation is an + // automatic translation and there was no error. if (IsAutomaticTranslationType(translate_type) && + step != translate::TRANSLATE_STEP_TRANSLATE_ERROR && IsMessageUISnackbarEnabled()) { // The Automatic translation snackbar is only shown after translation // has completed. The translating step is a no-op with the Snackbar. if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) { // An automatic translation has completed show the snackbar. - // TODO(https://crbug.com/1462755) Show snackbar here + if (!auto_translate_snackbar_controller_) { + auto_translate_snackbar_controller_ = + std::make_unique<translate::AutoTranslateSnackbarController>( + web_contents(), translate_manager_->GetWeakPtr()); + } + auto_translate_snackbar_controller_->ShowSnackbar(target_language); } } else { // Snackbar disabled or not an automatic translation. Use @@ -329,6 +340,7 @@ return TranslateService::IsTranslatableURL(url); } +// content::WebContentsObserver implementation. void ChromeTranslateClient::WebContentsDestroyed() { // Translation process can be interrupted. // Destroying the TranslateManager now guarantees that it never has to deal @@ -341,8 +353,25 @@ } } -// TranslateDriver::LanguageDetectionObserver implementation. +#if BUILDFLAG(IS_ANDROID) +void ChromeTranslateClient::PrimaryPageChanged(content::Page& page) { + if (auto_translate_snackbar_controller_ && + auto_translate_snackbar_controller_->IsShowing()) { + auto_translate_snackbar_controller_->NativeDismissSnackbar(); + } +} +void ChromeTranslateClient::OnVisibilityChanged( + content::Visibility visibility) { + if (auto_translate_snackbar_controller_ && + auto_translate_snackbar_controller_->IsShowing() && + visibility == content::Visibility::HIDDEN) { + auto_translate_snackbar_controller_->NativeDismissSnackbar(); + } +} +#endif // IS_ANDROID + +// TranslateDriver::LanguageDetectionObserver implementation. void ChromeTranslateClient::OnLanguageDetermined( const translate::LanguageDetectionDetails& details) { if (details.has_run_lang_detection) {
diff --git a/chrome/browser/translate/chrome_translate_client.h b/chrome/browser/translate/chrome_translate_client.h index 7eda0d2..38713d2f 100644 --- a/chrome/browser/translate/chrome_translate_client.h +++ b/chrome/browser/translate/chrome_translate_client.h
@@ -22,6 +22,8 @@ namespace content { class BrowserContext; +class Page; +enum class Visibility; class WebContents; } // namespace content @@ -32,6 +34,7 @@ } namespace translate { +class AutoTranslateSnackbarController; class LanguageState; class TranslatePrefs; class TranslateManager; @@ -150,6 +153,13 @@ bool manual_translate_on_ready_ = false; std::unique_ptr<translate::TranslateMessage> translate_message_; + std::unique_ptr<translate::AutoTranslateSnackbarController> + auto_translate_snackbar_controller_; + + // content::WebContentsObserver implementation on Android only. Used for the + // auto-translate Snackbar. + void PrimaryPageChanged(content::Page& page) override; + void OnVisibilityChanged(content::Visibility visibility) override; #endif WEB_CONTENTS_USER_DATA_KEY_DECL();
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index 5b721f62..13661f4 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1990,6 +1990,12 @@ Never translate sites </message> + <!-- Translate Messages Snackbar --> + <message name="IDS_TRANSLATE_MESSAGE_SNACKBAR_PAGE_TRANSLATED" + desc="Message that the page has been translated into a specific target language"> + Page translated to <ph name="target_language">%1$s<ex>English</ex></ph> + </message> + <!-- Dangerous download --> <message name="IDS_DANGEROUS_DOWNLOAD_DIALOG_CONFIRM_TEXT" desc="Text label for the confirm button on the dangerous download dialog for user to confirm the download."> Download anyway
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_TRANSLATE_MESSAGE_SNACKBAR_PAGE_TRANSLATED.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_TRANSLATE_MESSAGE_SNACKBAR_PAGE_TRANSLATED.png.sha1 new file mode 100644 index 0000000..ca326e15 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_TRANSLATE_MESSAGE_SNACKBAR_PAGE_TRANSLATED.png.sha1
@@ -0,0 +1 @@ +e2b467b71f4b7297092a432b95c69fdec909a3d1 \ No newline at end of file
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc index 85dc581..e29b179 100644 --- a/chrome/browser/ui/browser_command_controller.cc +++ b/chrome/browser/ui/browser_command_controller.cc
@@ -1907,6 +1907,7 @@ CanCloseOtherTabs(browser_)); command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_TO_NEW_WINDOW, CanMoveActiveTabToNewWindow(browser_)); + UpdateCommandsForBookmarkEditing(); } BrowserWindow* BrowserCommandController::window() {
diff --git a/chrome/browser/ui/browser_command_controller_unittest.cc b/chrome/browser/ui/browser_command_controller_unittest.cc index f480776..c25d56c 100644 --- a/chrome/browser/ui/browser_command_controller_unittest.cc +++ b/chrome/browser/ui/browser_command_controller_unittest.cc
@@ -6,11 +6,13 @@ #include "base/command_line.h" #include "base/memory/raw_ptr.h" +#include "base/test/run_until.h" #include "base/test/scoped_feature_list.h" #include "build/branding_buildflags.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/app/chrome_command_ids.h" +#include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/command_updater.h" #include "chrome/browser/prefs/incognito_mode_prefs.h" @@ -28,10 +30,12 @@ #include "chrome/test/base/test_browser_window.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" +#include "components/bookmarks/browser/bookmark_model.h" #include "components/performance_manager/public/features.h" #include "components/policy/core/common/policy_pref_names.h" #include "components/signin/public/base/signin_pref_names.h" #include "content/public/common/input/native_web_keyboard_event.h" +#include "content/public/test/web_contents_tester.h" #include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/keyboard_codes.h" @@ -531,3 +535,47 @@ chrome::BrowserCommandController command_controller(incognito_browser.get()); EXPECT_EQ(true, command_controller.IsCommandEnabled(IDC_CLEAR_BROWSING_DATA)); } + +class BrowserCommandControllerWithBookmarksTest + : public BrowserCommandControllerTest { + public: + BrowserCommandControllerWithBookmarksTest() = default; + + // BrowserWithTestWindowTest overrides: + TestingProfile::TestingFactories GetTestingFactories() override { + return {{BookmarkModelFactory::GetInstance(), + BookmarkModelFactory::GetDefaultFactory()}}; + } + + void AddTab() { + std::unique_ptr<content::WebContents> contents( + content::WebContentsTester::CreateTestWebContents(profile(), nullptr)); + browser()->tab_strip_model()->AppendWebContents(std::move(contents), + /*foreground=*/false); + } +}; + +// Adding and removing background tabs should update the bookmark all tab +// command. +TEST_F(BrowserCommandControllerWithBookmarksTest, + BookmarkAllTabsUpdatesOnTabStripChanges) { + ASSERT_TRUE(base::test::RunUntil([&]() { + return BookmarkModelFactory::GetForBrowserContext(profile())->loaded(); + })) << "Timeout waiting for bookmarks to load"; + + chrome::BrowserCommandController command_controller(browser()); + EXPECT_FALSE(command_controller.IsCommandEnabled(IDC_BOOKMARK_ALL_TABS)); + + AddTab(); + ASSERT_EQ(1, browser()->tab_strip_model()->count()); + browser()->tab_strip_model()->ActivateTabAt(/*index=*/0); + EXPECT_FALSE(command_controller.IsCommandEnabled(IDC_BOOKMARK_ALL_TABS)); + + AddTab(); + ASSERT_EQ(2, browser()->tab_strip_model()->count()); + EXPECT_TRUE(command_controller.IsCommandEnabled(IDC_BOOKMARK_ALL_TABS)); + + browser()->tab_strip_model()->CloseWebContentsAt(/*index=*/1, + TabCloseTypes::CLOSE_NONE); + EXPECT_FALSE(command_controller.IsCommandEnabled(IDC_BOOKMARK_ALL_TABS)); +}
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc index 69bf9d2f..fe26455b 100644 --- a/chrome/browser/ui/chrome_pages.cc +++ b/chrome/browser/ui/chrome_pages.cc
@@ -232,11 +232,9 @@ url.SchemeIs(chrome::kIsolatedAppScheme))) { std::string origin_string = site_origin.Serialize(); url::RawCanonOutputT<char> percent_encoded_origin; - url::EncodeURIComponent(origin_string.c_str(), origin_string.length(), - &percent_encoded_origin); - link_destination = chrome::kChromeUISiteDetailsPrefixURL + - std::string(percent_encoded_origin.data(), - percent_encoded_origin.length()); + url::EncodeURIComponent(origin_string, &percent_encoded_origin); + link_destination = base::StrCat( + {chrome::kChromeUISiteDetailsPrefixURL, percent_encoded_origin.view()}); } NavigateParams params(profile, GURL(link_destination), ui::PAGE_TRANSITION_TYPED);
diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java index dda02f3..a0b289e 100644 --- a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java +++ b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java
@@ -114,6 +114,7 @@ public static final int UMA_CREATOR_UNFOLLOW_SUCCESS = 58; public static final int UMA_CREATOR_UNFOLLOW_FAILURE = 59; public static final int UMA_QUICK_DELETE = 60; + public static final int UMA_AUTO_TRANSLATE = 61; private @Nullable SnackbarController mController; private CharSequence mText;
diff --git a/chrome/browser/ui/toolbar/bookmark_sub_menu_model.cc b/chrome/browser/ui/toolbar/bookmark_sub_menu_model.cc index d7dbeb40..903afad 100644 --- a/chrome/browser/ui/toolbar/bookmark_sub_menu_model.cc +++ b/chrome/browser/ui/toolbar/bookmark_sub_menu_model.cc
@@ -73,8 +73,8 @@ auto set_icon = [this](int command_id, const gfx::VectorIcon& vector_icon) { auto index = GetIndexOfCommandId(command_id); if (index) { - SetIcon(index.value(), - ui::ImageModel::FromVectorIcon(vector_icon, SK_ColorBLACK, 16)); + SetIcon(index.value(), ui::ImageModel::FromVectorIcon( + vector_icon, ui::kColorMenuIcon, 16)); } };
diff --git a/chrome/browser/ui/views/editor_menu/BUILD.gn b/chrome/browser/ui/views/editor_menu/BUILD.gn index c490e4a3..b7598f9 100644 --- a/chrome/browser/ui/views/editor_menu/BUILD.gn +++ b/chrome/browser/ui/views/editor_menu/BUILD.gn
@@ -39,6 +39,7 @@ deps = [ ":utils", ":views", + "//ash/webui/settings/public/constants:mojom", "//base", "//chromeos/components/editor_menu/public/cpp", "//chromeos/crosapi/mojom",
diff --git a/chrome/browser/ui/views/editor_menu/editor_menu_controller_impl.cc b/chrome/browser/ui/views/editor_menu/editor_menu_controller_impl.cc index aa5d2d28..ac397448 100644 --- a/chrome/browser/ui/views/editor_menu/editor_menu_controller_impl.cc +++ b/chrome/browser/ui/views/editor_menu/editor_menu_controller_impl.cc
@@ -7,6 +7,10 @@ #include <string_view> #include <vector> +#include "ash/webui/settings/public/constants/routes.mojom.h" +#include "ash/webui/settings/public/constants/setting.mojom.h" +#include "base/strings/strcat.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" @@ -19,9 +23,12 @@ #include "ui/views/widget/widget.h" #if BUILDFLAG(IS_CHROMEOS_LACROS) +#include "chromeos/crosapi/mojom/url_handler.mojom.h" #include "chromeos/lacros/lacros_service.h" #else +#include "ash/public/cpp/new_window_delegate.h" #include "chrome/browser/ash/input_method/editor_mediator.h" +#include "chromeos/ash/services/ime/public/mojom/input_method.mojom.h" #endif // BUILDFLAG(IS_CHROMEOS_LACROS) namespace chromeos::editor_menu { @@ -111,7 +118,22 @@ } } -void EditorMenuControllerImpl::OnSettingsButtonPressed() {} +void EditorMenuControllerImpl::OnSettingsButtonPressed() { + GURL setting_url = GURL(base::StrCat({"chrome://os-settings/", + chromeos::settings::mojom::kInputSubpagePath, "?settingId=", + base::NumberToString(static_cast<int>( + chromeos::settings::mojom::Setting::kShowOrca))})); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + chromeos::LacrosService* service = chromeos::LacrosService::Get(); + DCHECK(service->IsAvailable<crosapi::mojom::UrlHandler>()); + + service->GetRemote<crosapi::mojom::UrlHandler>()->OpenUrl(setting_url); +#elif BUILDFLAG(IS_CHROMEOS_ASH) + ash::NewWindowDelegate::GetInstance()->OpenUrl( + setting_url, ash::NewWindowDelegate::OpenUrlFrom::kUserInteraction, + ash::NewWindowDelegate::Disposition::kNewForegroundTab); +#endif +} void EditorMenuControllerImpl::OnChipButtonPressed( std::string_view text_query_id) {
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc index 0ea0ec8c..5e541df 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
@@ -2449,7 +2449,7 @@ } gfx::Point TabDragController::GetCursorScreenPoint() { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) views::Widget* widget = GetAttachedBrowserWidget(); DCHECK(widget); aura::Window* widget_window = widget->GetNativeWindow();
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc index 6595983..1f912b9 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -988,14 +988,13 @@ : absl::optional<CustomBackground>()) .value_or(CustomBackground()) .custom_background_url; - url::EncodeURIComponent(custom_background_url.spec().c_str(), - custom_background_url.spec().size(), &encoded_url); + url::EncodeURIComponent(custom_background_url.spec(), &encoded_url); update.Set( "backgroundImageUrl", encoded_url.length() > 0 ? base::StrCat( {"chrome-untrusted://new-tab-page/custom_background_image?url=", - std::string(encoded_url.data(), encoded_url.length())}) + encoded_url.view()}) : ""); content::WebUIDataSource::Update(profile_, chrome::kChromeUINewTabPageHost, std::move(update));
diff --git a/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc b/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc index 3d804255..723d604 100644 --- a/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc +++ b/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc
@@ -153,17 +153,16 @@ if (path == "custom_background_image") { // Parse all query parameters to hash map and decode values. std::unordered_map<std::string, std::string> params; - url::Component query(0, url.query().length()); + url::Component query(0, url.query_piece().length()); url::Component key, value; while ( url::ExtractQueryKeyValue(url.query().c_str(), &query, &key, &value)) { url::RawCanonOutputW<kMaxUriDecodeLen> output; url::DecodeURLEscapeSequences( - url.query().c_str() + value.begin, value.len, + url.query_piece().substr(value.begin, value.len), url::DecodeURLMode::kUTF8OrIsomorphic, &output); - params.insert( - {url.query().substr(key.begin, key.len), - base::UTF16ToUTF8(std::u16string(output.data(), output.length()))}); + params.insert({std::string(url.query_piece().substr(key.begin, key.len)), + base::UTF16ToUTF8(output.view())}); } // Extract desired values. ServeBackgroundImage(
diff --git a/chrome/browser/ui/webui/sanitized_image_source.cc b/chrome/browser/ui/webui/sanitized_image_source.cc index ea0fb0a..2558e3c0 100644 --- a/chrome/browser/ui/webui/sanitized_image_source.cc +++ b/chrome/browser/ui/webui/sanitized_image_source.cc
@@ -7,6 +7,7 @@ #include <map> #include <memory> #include <string> +#include <string_view> #include "base/containers/contains.h" #include "base/memory/ref_counted_memory.h" @@ -51,22 +52,19 @@ constexpr char kStaticEncodeKey[] = "staticEncode"; constexpr char kUrlKey[] = "url"; -std::map<std::string, std::string> ParseParams( - const std::string& param_string) { +std::map<std::string, std::string> ParseParams(std::string_view param_string) { url::Component query(0, param_string.size()); url::Component key; url::Component value; constexpr int kMaxUriDecodeLen = 2048; std::map<std::string, std::string> params; - while ( - url::ExtractQueryKeyValue(param_string.c_str(), &query, &key, &value)) { + while (url::ExtractQueryKeyValue(param_string.data(), &query, &key, &value)) { url::RawCanonOutputW<kMaxUriDecodeLen> output; - url::DecodeURLEscapeSequences(param_string.c_str() + value.begin, value.len, + url::DecodeURLEscapeSequences(param_string.substr(value.begin, value.len), url::DecodeURLMode::kUTF8OrIsomorphic, &output); - params.insert({param_string.substr(key.begin, key.len), - base::UTF16ToUTF8( - base::StringPiece16(output.data(), output.length()))}); + params.insert({std::string(param_string.substr(key.begin, key.len)), + base::UTF16ToUTF8(output.view())}); } return params; }
diff --git a/chrome/browser/ui/webui/sanitized_image_source_unittest.cc b/chrome/browser/ui/webui/sanitized_image_source_unittest.cc index 453f40ce..19f75f45 100644 --- a/chrome/browser/ui/webui/sanitized_image_source_unittest.cc +++ b/chrome/browser/ui/webui/sanitized_image_source_unittest.cc
@@ -207,13 +207,12 @@ // Encode a URL so that it can be used as a param value. url::RawCanonOutputT<char> encoded_url; - url::EncodeURIComponent(kImageUrl, std::size(kImageUrl), &encoded_url); + url::EncodeURIComponent(kImageUrl, &encoded_url); EXPECT_GT(encoded_url.length(), 0u); - base::StringPiece encoded_url_str(encoded_url.data(), encoded_url.length()); // Verify that param-formatted requests can be sent with auth tokens. sanitized_image_source_->StartDataRequest( - GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", encoded_url_str, + GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", encoded_url.view(), "&isGooglePhotos=true"})), content::WebContents::Getter(), callback.Get()); ASSERT_EQ(1, test_url_loader_factory_.NumPending()); @@ -228,7 +227,7 @@ // Verify that param-formatted requests can be sent without auth tokens. sanitized_image_source_->StartDataRequest( - GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", encoded_url_str, + GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", encoded_url.view(), "&isGooglePhotos=false"})), content::WebContents::Getter(), callback.Get()); EXPECT_FALSE(identity_test_env.IsAccessTokenRequestPending()); @@ -238,7 +237,8 @@ net::HttpRequestHeaders::kAuthorization)); sanitized_image_source_->StartDataRequest( - GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", encoded_url_str})), + GURL(base::StrCat( + {chrome::kChromeUIImageURL, "?url=", encoded_url.view()})), content::WebContents::Getter(), callback.Get()); EXPECT_FALSE(identity_test_env.IsAccessTokenRequestPending()); @@ -249,7 +249,7 @@ // Verify that no download is attempted when authentication fails. sanitized_image_source_->StartDataRequest( - GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", encoded_url_str, + GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", encoded_url.view(), "&isGooglePhotos=true"})), content::WebContents::Getter(), callback.Get()); ASSERT_EQ(4, test_url_loader_factory_.NumPending()); @@ -262,15 +262,12 @@ // Verify that no auth token is sent for URLs not served by Google Photos. constexpr char kBadImageUrl[] = "https://foo.com/img.png"; url::RawCanonOutputT<char> encoded_bad_url; - url::EncodeURIComponent(kBadImageUrl, std::size(kBadImageUrl), - &encoded_bad_url); + url::EncodeURIComponent(kBadImageUrl, &encoded_bad_url); EXPECT_GT(encoded_bad_url.length(), 0u); - base::StringPiece encoded_bad_url_str(encoded_bad_url.data(), - encoded_bad_url.length()); sanitized_image_source_->StartDataRequest( GURL(base::StrCat({chrome::kChromeUIImageURL, "?url=", - encoded_bad_url_str, "&isGooglePhotos=true"})), + encoded_bad_url.view(), "&isGooglePhotos=true"})), content::WebContents::Getter(), callback.Get()); EXPECT_FALSE(identity_test_env.IsAccessTokenRequestPending()); ASSERT_EQ(5, test_url_loader_factory_.NumPending());
diff --git a/chrome/browser/ui/webui/settings/ash/device_section.cc b/chrome/browser/ui/webui/settings/ash/device_section.cc index 0b13783f..6043ed5 100644 --- a/chrome/browser/ui/webui/settings/ash/device_section.cc +++ b/chrome/browser/ui/webui/settings/ash/device_section.cc
@@ -1297,6 +1297,7 @@ mojom::Setting::kAddInputMethod, mojom::Setting::kShowEmojiSuggestions, mojom::Setting::kShowInputOptionsInShelf, + mojom::Setting::kShowOrca, mojom::Setting::kSpellCheck, }; RegisterNestedSettingBulk(mojom::Subpage::kInput, kInputSubpageSettings,
diff --git a/chrome/browser/ui/webui/settings/ash/languages_section.cc b/chrome/browser/ui/webui/settings/ash/languages_section.cc index 5de1204..b461ef82 100644 --- a/chrome/browser/ui/webui/settings/ash/languages_section.cc +++ b/chrome/browser/ui/webui/settings/ash/languages_section.cc
@@ -660,6 +660,7 @@ mojom::Setting::kAddInputMethod, mojom::Setting::kShowEmojiSuggestions, mojom::Setting::kShowInputOptionsInShelf, + mojom::Setting::kShowOrca, mojom::Setting::kSpellCheck, }; RegisterNestedSettingBulk(mojom::Subpage::kInput, kInputSubpageSettings,
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.cc index e74d1a4f..63690c7 100644 --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.cc +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.cc
@@ -10,12 +10,11 @@ #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" -#include "chrome/browser/manta/manta_service_factory.h" -#include "chrome/browser/manta/manta_status.h" -#include "chrome/browser/manta/proto/manta.pb.h" -#include "chrome/browser/manta/snapper_provider.h" +#include "chrome/browser/browser_features.h" #include "chrome/browser/new_tab_page/modules/new_tab_page_modules.h" #include "chrome/browser/new_tab_page/new_tab_page_util.h" +#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" +#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/background/ntp_background_service_factory.h" #include "chrome/browser/themes/theme_service.h" @@ -30,13 +29,17 @@ #include "chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_section.h" #include "chrome/common/pref_names.h" #include "chrome/grit/generated_resources.h" -#include "components/manta/features.h" +#include "components/optimization_guide/core/optimization_guide_features.h" +#include "components/optimization_guide/core/optimization_guide_util.h" +#include "components/optimization_guide/proto/model_execution.pb.h" +#include "components/optimization_guide/proto/wallpaper_search.pb.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/search/ntp_features.h" #include "content/public/browser/web_contents.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/extension.h" +#include "mojo/public/cpp/bindings/callback_helpers.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/ui_base_features.h" @@ -94,13 +97,6 @@ ntp_custom_background_service_observation_.Observe( ntp_custom_background_service_.get()); - - if (base::FeatureList::IsEnabled( - ntp_features::kCustomizeChromeWallpaperSearch) && - manta::features::IsMantaServiceEnabled()) { - manta_service_ = manta::MantaServiceFactory::GetForProfile(profile_); - snapper_provider_ = manta_service_->CreateSnapperProvider(); - } } CustomizeChromePageHandler::~CustomizeChromePageHandler() { @@ -228,16 +224,19 @@ void CustomizeChromePageHandler::WallpaperSearchCallback( SearchWallpaperCallback callback, - std::unique_ptr<manta::proto::Response> response, - manta::MantaStatus manta_status) { - if (manta_status.status_code != manta::MantaStatusCode::kOk || !response || - response->output_data_size() < 1) { - std::move(callback).Run(false); + optimization_guide::OptimizationGuideModelExecutionResult result) { + if (!result.has_value()) { + return; + } + auto response = optimization_guide::ParsedAnyMetadata< + chrome_intelligence_modelexecution_proto::WallpaperSearchResponse>( + result.value()); + if (response->images_size() < 1) { return; } if (ntp_custom_background_service_) { ntp_custom_background_service_->SelectLocalBackgroundImage( - response->output_data(0).image().serialized_bytes()); + response->images(0)); } std::move(callback).Run(true); } @@ -245,34 +244,27 @@ void CustomizeChromePageHandler::SearchWallpaper( const std::string& query, SearchWallpaperCallback callback) { - if (base::FeatureList::IsEnabled( - ntp_features::kCustomizeChromeWallpaperSearch) && - manta::features::IsMantaServiceEnabled()) { - manta::proto::Request request; - request.set_feature_name(manta::proto::FeatureName::IMAGE_TEST); - manta::proto::RequestConfig& request_config = - *request.mutable_request_config(); - request_config.set_num_outputs(1); - auto resolution_param = base::GetFieldTrialParamValueByFeature( - ntp_features::kCustomizeChromeWallpaperSearch, - ntp_features::kCustomizeChromeWallpaperSearchResolutionParam); - if (resolution_param == "64") { - request_config.set_image_resolution( - manta::proto::ImageResolution::RESOLUTION_64); - } else if (resolution_param == "256") { - request_config.set_image_resolution( - manta::proto::ImageResolution::RESOLUTION_256); - } else if (resolution_param == "1024") { - request_config.set_image_resolution( - manta::proto::ImageResolution::RESOLUTION_1024); - } - manta::proto::InputData& input_data = *request.add_input_data(); - input_data.set_text(query); - snapper_provider_->Call( - request, - base::BindOnce(&CustomizeChromePageHandler::WallpaperSearchCallback, - weak_ptr_factory_.GetWeakPtr(), std::move(callback))); + callback = + mojo::WrapCallbackWithDefaultInvokeIfNotRun(std::move(callback), false); + if (!base::FeatureList::IsEnabled( + ntp_features::kCustomizeChromeWallpaperSearch) || + !base::FeatureList::IsEnabled( + optimization_guide::features::kOptimizationGuideModelExecution)) { + return; } + auto* optimization_guide_keyed_service = + OptimizationGuideKeyedServiceFactory::GetForProfile(profile_); + if (!optimization_guide_keyed_service) { + return; + } + chrome_intelligence_modelexecution_proto::WallpaperSearchRequest request; + request.set_query(query); + optimization_guide_keyed_service->ExecuteModel( + optimization_guide::proto::ModelExecutionFeature:: + MODEL_EXECUTION_FEATURE_WALLPAPER_SEARCH, + request, + base::BindOnce(&CustomizeChromePageHandler::WallpaperSearchCallback, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); } void CustomizeChromePageHandler::UpdateTheme() {
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.h b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.h index 3aab8e2..a3c9909 100644 --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.h +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler.h
@@ -8,10 +8,6 @@ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observation.h" -#include "chrome/browser/manta/manta_service.h" -#include "chrome/browser/manta/manta_status.h" -#include "chrome/browser/manta/proto/manta.pb.h" -#include "chrome/browser/manta/snapper_provider.h" #include "chrome/browser/search/background/ntp_background_service.h" #include "chrome/browser/search/background/ntp_background_service_observer.h" #include "chrome/browser/search/background/ntp_custom_background_service.h" @@ -21,6 +17,7 @@ #include "chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome.mojom.h" #include "chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_section.h" #include "chrome/common/search/ntp_logging_events.h" +#include "components/optimization_guide/core/optimization_guide_model_executor.h" #include "components/prefs/pref_change_registrar.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -103,9 +100,9 @@ private: void LogEvent(NTPLoggingEventType event); - void WallpaperSearchCallback(SearchWallpaperCallback callback, - std::unique_ptr<manta::proto::Response> response, - manta::MantaStatus manta_status); + void WallpaperSearchCallback( + SearchWallpaperCallback callback, + optimization_guide::OptimizationGuideModelExecutionResult result); bool IsCustomLinksEnabled() const; bool IsShortcutsVisible() const; @@ -138,8 +135,6 @@ scoped_refptr<ui::SelectFileDialog> select_file_dialog_; raw_ptr<content::WebContents> web_contents_; raw_ptr<NtpBackgroundService> ntp_background_service_; - raw_ptr<manta::MantaService> manta_service_; - std::unique_ptr<manta::SnapperProvider> snapper_provider_; GetBackgroundCollectionsCallback background_collections_callback_; base::TimeTicks background_collections_request_start_time_; std::string images_request_collection_id_;
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc index 8e6f54f..84ac672 100644 --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc
@@ -18,11 +18,9 @@ #include "base/test/metrics/user_action_tester.h" #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" -#include "chrome/browser/manta/manta_service.h" -#include "chrome/browser/manta/manta_service_callbacks.h" -#include "chrome/browser/manta/manta_service_factory.h" -#include "chrome/browser/manta/manta_status.h" -#include "chrome/browser/manta/snapper_provider.h" +#include "chrome/browser/browser_features.h" +#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" +#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/search/background/ntp_background_data.h" #include "chrome/browser/search/background/ntp_background_service_factory.h" #include "chrome/browser/search/background/ntp_custom_background_service.h" @@ -41,7 +39,9 @@ #include "chrome/test/base/test_browser_window.h" #include "chrome/test/base/testing_profile.h" #include "components/keyed_service/core/keyed_service.h" -#include "components/manta/features.h" +#include "components/optimization_guide/core/optimization_guide_features.h" +#include "components/optimization_guide/proto/model_execution.pb.h" +#include "components/optimization_guide/proto/wallpaper_search.pb.h" #include "components/prefs/pref_service.h" #include "components/search/ntp_features.h" #include "content/public/browser/web_contents.h" @@ -55,6 +55,7 @@ #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/ui_base_features.h" @@ -225,37 +226,21 @@ ThemeHelper theme_helper_; }; -using SnapperProviderCall = - base::RepeatingCallback<void(const manta::proto::Request&, - manta::MantaProtoResponseCallback)>; - -class TestSnapperProvider : public manta::SnapperProvider { +class MockOptimizationGuideKeyedService : public OptimizationGuideKeyedService { public: - explicit TestSnapperProvider(SnapperProviderCall call) - : manta::SnapperProvider(nullptr, nullptr), call_(call) {} - void Call(const manta::proto::Request& request, - manta::MantaProtoResponseCallback done_callback) override { - call_.Run(request, std::move(done_callback)); - } + explicit MockOptimizationGuideKeyedService(content::BrowserContext* context) + : OptimizationGuideKeyedService(context) {} + MOCK_METHOD( + void, + ExecuteModel, + (optimization_guide::proto::ModelExecutionFeature, + const google::protobuf::MessageLite&, + optimization_guide::OptimizationGuideModelExecutionResultCallback)); - private: - SnapperProviderCall call_; -}; - -class TestMantaService : public manta::MantaService { - public: - explicit TestMantaService(Profile* profile, SnapperProviderCall call) - : manta::MantaService(profile), call_(call) {} - std::unique_ptr<manta::SnapperProvider> CreateSnapperProvider() override { - return std::make_unique<TestSnapperProvider>(call_); - } - - private: - SnapperProviderCall call_; + bool ComponentUpdatesEnabledProvider() const override { return false; } }; std::unique_ptr<TestingProfile> MakeTestingProfile( - SnapperProviderCall snapper_provider_call, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { TestingProfile::Builder profile_builder; profile_builder.AddTestingFactory( @@ -276,15 +261,12 @@ return std::make_unique<testing::NiceMock<MockThemeService>>(); })); profile_builder.AddTestingFactory( - manta::MantaServiceFactory::GetInstance(), - base::BindRepeating( - [](SnapperProviderCall snapper_provider_call, - content::BrowserContext* context) - -> std::unique_ptr<KeyedService> { - return std::make_unique<TestMantaService>( - static_cast<Profile*>(context), snapper_provider_call); - }, - snapper_provider_call)); + OptimizationGuideKeyedServiceFactory::GetInstance(), + base::BindRepeating([](content::BrowserContext* context) + -> std::unique_ptr<KeyedService> { + return std::make_unique< + testing::NiceMock<MockOptimizationGuideKeyedService>>(context); + })); profile_builder.SetSharedURLLoaderFactory(url_loader_factory); auto profile = profile_builder.Build(); return profile; @@ -296,7 +278,6 @@ public: CustomizeChromePageHandlerTest() : profile_(MakeTestingProfile( - mock_snapper_provider_call_.Get(), base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( &test_url_loader_factory_))), mock_ntp_custom_background_service_(profile_.get()), @@ -304,7 +285,11 @@ NtpBackgroundServiceFactory::GetForProfile(profile_.get()))), web_contents_(web_contents_factory_.CreateWebContents(profile_.get())), mock_theme_service_(static_cast<MockThemeService*>( - ThemeServiceFactory::GetForProfile(profile_.get()))) {} + ThemeServiceFactory::GetForProfile(profile_.get()))), + mock_optimization_guide_keyed_service_( + static_cast<MockOptimizationGuideKeyedService*>( + OptimizationGuideKeyedServiceFactory::GetForProfile( + profile_.get()))) {} void SetUp() override { EXPECT_CALL(mock_ntp_background_service(), AddObserver) @@ -352,13 +337,15 @@ return *ntp_background_service_observer_; } MockThemeService& mock_theme_service() { return *mock_theme_service_; } + MockOptimizationGuideKeyedService& mock_optimization_guide_keyed_service() { + return *mock_optimization_guide_keyed_service_; + } Browser& browser() { return *browser_; } base::HistogramTester& histogram_tester() { return histogram_tester_; } base::UserActionTester& user_action_tester() { return user_action_tester_; } protected: // NOTE: The initialization order of these members matters. - base::MockCallback<SnapperProviderCall> mock_snapper_provider_call_; content::BrowserTaskEnvironment task_environment_; std::unique_ptr<TestingProfile> profile_; testing::NiceMock<MockNtpCustomBackgroundService> @@ -377,6 +364,8 @@ RAW_PTR_EXCLUSION NtpBackgroundServiceObserver* ntp_background_service_observer_; raw_ptr<MockThemeService> mock_theme_service_; + raw_ptr<MockOptimizationGuideKeyedService> + mock_optimization_guide_keyed_service_; base::test::ScopedFeatureList scoped_feature_list_; std::unique_ptr<Browser> browser_; std::unique_ptr<TestBrowserWindow> browser_window_; @@ -839,7 +828,8 @@ void SetUp() override { feature_list_.InitWithFeatures( /*enabled_features=*/{ntp_features::kCustomizeChromeWallpaperSearch, - manta::features::kMantaService}, + optimization_guide::features:: + kOptimizationGuideModelExecution}, /*disabled_features=*/{}); CustomizeChromePageHandlerTest::SetUp(); } @@ -850,47 +840,75 @@ TEST_F(CustomizeChromePageHandlerWithWallpaperSearchTest, SearchWallpaper_Success) { - manta::proto::Request request; - manta::MantaProtoResponseCallback done_callback; - EXPECT_CALL(mock_snapper_provider_call_, Run(_, _)) + optimization_guide::proto::ModelExecutionFeature feature; + chrome_intelligence_modelexecution_proto::WallpaperSearchRequest request; + optimization_guide::OptimizationGuideModelExecutionResultCallback + done_callback; + EXPECT_CALL(mock_optimization_guide_keyed_service(), ExecuteModel(_, _, _)) .Times(1) - .WillOnce(DoAll(SaveArg<0>(&request), MoveArg<1>(&done_callback))); + .WillOnce(Invoke( + [&feature, &request, &done_callback]( + optimization_guide::proto::ModelExecutionFeature feature_arg, + const google::protobuf::MessageLite& request_arg, + optimization_guide::OptimizationGuideModelExecutionResultCallback + done_callback_arg) { + feature = feature_arg; + ASSERT_EQ(request.GetTypeName(), request_arg.GetTypeName()); + request.CheckTypeAndMergeFrom(request_arg); + done_callback = std::move(done_callback_arg); + })); base::MockCallback<CustomizeChromePageHandler::SearchWallpaperCallback> callback; handler().SearchWallpaper("foo", callback.Get()); - EXPECT_EQ("foo", request.input_data(0).text()); + EXPECT_EQ("foo", request.query()); std::string bytes; EXPECT_CALL(mock_ntp_custom_background_service_, SelectLocalBackgroundImage(An<const std::string&>())) .Times(1) .WillOnce(SaveArg<0>(&bytes)); - auto response = std::make_unique<manta::proto::Response>(); - auto& output_data = *response->add_output_data(); - auto& image = *output_data.mutable_image(); - image.set_serialized_bytes("bar"); + + chrome_intelligence_modelexecution_proto::WallpaperSearchResponse response; + response.add_images("bar"); + std::string serialized_metadata; + response.SerializeToString(&serialized_metadata); + auto result = absl::make_optional(optimization_guide::proto::Any()); + result->set_value(serialized_metadata); + result->set_type_url("type.googleapis.com/" + response.GetTypeName()); + bool success = false; EXPECT_CALL(callback, Run(_)).Times(1).WillOnce(SaveArg<0>(&success)); - std::move(done_callback) - .Run(std::move(response), {manta::MantaStatusCode::kOk, std::string()}); + std::move(done_callback).Run(result); EXPECT_EQ("bar", bytes); EXPECT_TRUE(success); } TEST_F(CustomizeChromePageHandlerWithWallpaperSearchTest, SearchWallpaper_NoResponse) { - manta::proto::Request request; - manta::MantaProtoResponseCallback done_callback; - EXPECT_CALL(mock_snapper_provider_call_, Run(_, _)) + optimization_guide::proto::ModelExecutionFeature feature; + chrome_intelligence_modelexecution_proto::WallpaperSearchRequest request; + optimization_guide::OptimizationGuideModelExecutionResultCallback + done_callback; + EXPECT_CALL(mock_optimization_guide_keyed_service(), ExecuteModel(_, _, _)) .Times(1) - .WillOnce(DoAll(SaveArg<0>(&request), MoveArg<1>(&done_callback))); + .WillOnce(Invoke( + [&feature, &request, &done_callback]( + optimization_guide::proto::ModelExecutionFeature feature_arg, + const google::protobuf::MessageLite& request_arg, + optimization_guide::OptimizationGuideModelExecutionResultCallback + done_callback_arg) { + feature = feature_arg; + ASSERT_EQ(request.GetTypeName(), request_arg.GetTypeName()); + request.CheckTypeAndMergeFrom(request_arg); + done_callback = std::move(done_callback_arg); + })); base::MockCallback<CustomizeChromePageHandler::SearchWallpaperCallback> callback; handler().SearchWallpaper("foo", callback.Get()); - EXPECT_EQ("foo", request.input_data(0).text()); + EXPECT_EQ("foo", request.query()); EXPECT_CALL(mock_ntp_custom_background_service_, SelectLocalBackgroundImage(An<const std::string&>())) @@ -898,33 +916,49 @@ bool success = true; EXPECT_CALL(callback, Run(_)).Times(1).WillOnce(SaveArg<0>(&success)); - std::move(done_callback) - .Run(nullptr, - {manta::MantaStatusCode::kMalformedResponse, std::string()}); + std::move(done_callback).Run(absl::nullopt); EXPECT_FALSE(success); } TEST_F(CustomizeChromePageHandlerWithWallpaperSearchTest, SearchWallpaper_NoImages) { - manta::proto::Request request; - manta::MantaProtoResponseCallback done_callback; - EXPECT_CALL(mock_snapper_provider_call_, Run(_, _)) + optimization_guide::proto::ModelExecutionFeature feature; + chrome_intelligence_modelexecution_proto::WallpaperSearchRequest request; + optimization_guide::OptimizationGuideModelExecutionResultCallback + done_callback; + EXPECT_CALL(mock_optimization_guide_keyed_service(), ExecuteModel(_, _, _)) .Times(1) - .WillOnce(DoAll(SaveArg<0>(&request), MoveArg<1>(&done_callback))); + .WillOnce(Invoke( + [&feature, &request, &done_callback]( + optimization_guide::proto::ModelExecutionFeature feature_arg, + const google::protobuf::MessageLite& request_arg, + optimization_guide::OptimizationGuideModelExecutionResultCallback + done_callback_arg) { + feature = feature_arg; + ASSERT_EQ(request.GetTypeName(), request_arg.GetTypeName()); + request.CheckTypeAndMergeFrom(request_arg); + done_callback = std::move(done_callback_arg); + })); base::MockCallback<CustomizeChromePageHandler::SearchWallpaperCallback> callback; handler().SearchWallpaper("foo", callback.Get()); - EXPECT_EQ("foo", request.input_data(0).text()); + EXPECT_EQ("foo", request.query()); EXPECT_CALL(mock_ntp_custom_background_service_, SelectLocalBackgroundImage(An<const std::string&>())) .Times(0); - auto response = std::make_unique<manta::proto::Response>(); + + chrome_intelligence_modelexecution_proto::WallpaperSearchResponse response; + std::string serialized_metadata; + response.SerializeToString(&serialized_metadata); + auto result = absl::make_optional(optimization_guide::proto::Any()); + result->set_value(serialized_metadata); + result->set_type_url("type.googleapis.com/" + response.GetTypeName()); + bool success = true; EXPECT_CALL(callback, Run(_)).Times(1).WillOnce(SaveArg<0>(&success)); - std::move(done_callback) - .Run(std::move(response), {manta::MantaStatusCode::kOk, std::string()}); + std::move(done_callback).Run(result); EXPECT_FALSE(success); }
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc index 10a7e33..e474939 100644 --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc
@@ -26,7 +26,7 @@ #include "chrome/grit/side_panel_customize_chrome_resources_map.h" #include "chrome/grit/side_panel_shared_resources.h" #include "chrome/grit/side_panel_shared_resources_map.h" -#include "components/manta/features.h" +#include "components/optimization_guide/core/optimization_guide_features.h" #include "components/search/ntp_features.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/web_contents.h" @@ -134,10 +134,12 @@ ntp_features::kCustomizeChromeSidePanelExtensionsCard) && features::IsChromeWebuiRefresh2023()); - source->AddBoolean("wallpaperSearchEnabled", - base::FeatureList::IsEnabled( - ntp_features::kCustomizeChromeWallpaperSearch) && - manta::features::IsMantaServiceEnabled()); + source->AddBoolean( + "wallpaperSearchEnabled", + base::FeatureList::IsEnabled( + ntp_features::kCustomizeChromeWallpaperSearch) && + base::FeatureList::IsEnabled( + optimization_guide::features::kOptimizationGuideModelExecution)); webui::SetupChromeRefresh2023(source);
diff --git a/chrome/browser/web_applications/commands/callback_command.cc b/chrome/browser/web_applications/commands/callback_command.cc index 65011ad..b5485ad4 100644 --- a/chrome/browser/web_applications/commands/callback_command.cc +++ b/chrome/browser/web_applications/commands/callback_command.cc
@@ -28,16 +28,19 @@ std::move(lock_description), // Return an empty base::Value() as the debug value. std::move(callback).Then( - base::BindOnce([]() { return base::Value(); }))) {} + base::BindOnce([]() { return base::Value(); })), + base::DoNothing()) {} template <class LockType, class DescriptionType> CallbackCommand<LockType, DescriptionType>::CallbackCommand( const std::string& name, std::unique_ptr<DescriptionType> lock_description, - base::OnceCallback<base::Value(LockType& lock)> callback) + base::OnceCallback<base::Value(LockType& lock)> callback, + base::OnceClosure on_complete) : WebAppCommandTemplate<LockType>(name), lock_description_(std::move(lock_description)), - callback_(std::move(callback)) { + callback_(std::move(callback)), + on_complete_(std::move(on_complete)) { DCHECK(lock_description_); } @@ -47,10 +50,11 @@ template <class LockType, class DescriptionType> void CallbackCommand<LockType, DescriptionType>::StartWithLock( std::unique_ptr<LockType> lock) { + CHECK(!lock_); lock_ = std::move(lock); debug_value_ = std::move(callback_).Run(*lock_.get()); this->SignalCompletionAndSelfDestruct(CommandResult::kSuccess, - base::DoNothing()); + std::move(on_complete_)); } template <class LockType, class DescriptionType>
diff --git a/chrome/browser/web_applications/commands/callback_command.h b/chrome/browser/web_applications/commands/callback_command.h index 9ef5e95..35b31a45 100644 --- a/chrome/browser/web_applications/commands/callback_command.h +++ b/chrome/browser/web_applications/commands/callback_command.h
@@ -8,6 +8,7 @@ #include <memory> #include "base/functional/callback.h" +#include "base/functional/callback_forward.h" #include "base/values.h" #include "chrome/browser/web_applications/commands/web_app_command.h" @@ -18,6 +19,8 @@ // CallbackCommand simply runs the callback being passed. This is handy for // small operations to web app system to avoid defining a new command class but // still providing isolation for the work done in the callback. +// Note: Prefer using WebAppCommandScheduler::ScheduleCallbackWithLock instead +// of this class directly. template <typename LockType, typename DescriptionType = typename LockType::LockDescription> class CallbackCommand : public WebAppCommandTemplate<LockType> { @@ -27,7 +30,8 @@ base::OnceCallback<void(LockType& lock)> callback); CallbackCommand(const std::string& name, std::unique_ptr<DescriptionType> lock_description, - base::OnceCallback<base::Value(LockType& lock)> callback); + base::OnceCallback<base::Value(LockType& lock)> callback, + base::OnceClosure on_complete); ~CallbackCommand() override; @@ -42,6 +46,7 @@ std::unique_ptr<LockType> lock_; base::OnceCallback<base::Value(LockType& lock)> callback_; + base::OnceClosure on_complete_; base::Value debug_value_; };
diff --git a/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc b/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc index 3adbe32..0020bbb5 100644 --- a/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc +++ b/chrome/browser/web_applications/preinstalled_web_app_manager_unittest.cc
@@ -102,6 +102,10 @@ } void TearDown() override { + // Set `provider_` to nullptr before `profile_` is reset to avoid a dangling + // pointer. + provider_ = nullptr; + profile_.reset(); #if BUILDFLAG(IS_CHROMEOS_ASH) user_manager_enabler_.reset(); #endif @@ -109,29 +113,33 @@ } protected: + void set_profile(std::unique_ptr<Profile> profile) { + profile_ = std::move(profile); + } + + // Use the primary OTR profile of `profile_` when loading apps. + void UseOtrProfile() { + DCHECK(profile_); + Profile* otr_profile = + profile_->GetPrimaryOTRProfile(/*create_if_needed=*/true); + provider_ = FakeWebAppProvider::Get(otr_profile); + test::AwaitStartWebAppProviderAndSubsystems(otr_profile); + } + std::vector<ExternalInstallOptions> LoadApps( base::StringPiece test_dir, - Profile* profile = nullptr, bool disable_default_apps = false) { - std::unique_ptr<TestingProfile> testing_profile; - if (!profile) { -#if BUILDFLAG(IS_CHROMEOS) - testing_profile = CreateProfileAndLogin(); - profile = testing_profile.get(); -#else - NOTREACHED(); -#endif + DCHECK(profile_); + + // Set the `FakeWebAppProvider` if it hasn't been set yet. + if (!provider_) { + provider_ = FakeWebAppProvider::Get(profile_.get()); + test::AwaitStartWebAppProviderAndSubsystems(profile_.get()); } base::FilePath config_dir = GetConfigDir(test_dir); SetPreinstalledWebAppConfigDirForTesting(&config_dir); - if (profile_ != profile) { - provider_ = FakeWebAppProvider::Get(profile); - test::AwaitStartWebAppProviderAndSubsystems(profile); - profile_ = profile; - } - if (!disable_default_apps) { base::CommandLine::ForCurrentProcess()->RemoveSwitch( switches::kDisableDefaultApps); @@ -214,8 +222,8 @@ #endif // BUILDFLAG(IS_CHROMEOS_ASH) } - void VerifySetOfApps(Profile* profile, const std::set<GURL>& expectations) { - const auto install_options_list = LoadApps(kUserTypesTestDir, profile); + void VerifySetOfApps(const std::set<GURL>& expectations) { + const auto install_options_list = LoadApps(kUserTypesTestDir); ASSERT_EQ(expectations.size(), install_options_list.size()); for (const auto& install_options : install_options_list) ASSERT_EQ(1u, expectations.count(install_options.install_url)); @@ -259,8 +267,8 @@ base::test::ScopedCommandLine command_line_; #endif - raw_ptr<FakeWebAppProvider, DanglingUntriaged> provider_ = nullptr; - raw_ptr<Profile, DanglingUntriaged> profile_ = nullptr; + raw_ptr<FakeWebAppProvider> provider_ = nullptr; + std::unique_ptr<Profile> profile_; base::test::ScopedFeatureList scoped_feature_list_; // To support context of browser threads. @@ -273,6 +281,7 @@ auto test_profile = CreateProfile(); sync_preferences::TestingPrefServiceSyncable* prefs = test_profile->GetTestingPrefService(); + set_profile(std::move(test_profile)); GURL install_url("https://test.app"); constexpr char kExtensionId[] = "abcdefghijklmnopabcdefghijklmnop"; @@ -287,19 +296,17 @@ auto expect_present = [&]() { std::vector<ExternalInstallOptions> options_list = - LoadApps(/*test_dir=*/"", test_profile.get()); + LoadApps(/*test_dir=*/""); ASSERT_EQ(options_list.size(), 1u); EXPECT_EQ(options_list[0].install_url, install_url); }; auto expect_not_present = [&]() { std::vector<ExternalInstallOptions> options_list = - LoadApps(/*test_dir=*/"", test_profile.get()); + LoadApps(/*test_dir=*/""); ASSERT_EQ(options_list.size(), 0u); }; - expect_present(); - PolicyUpdater(prefs).SetBlocklistedByDefault(false); expect_present(); @@ -325,6 +332,7 @@ // Only Chrome OS parses config files. #if BUILDFLAG(IS_CHROMEOS) TEST_F(PreinstalledWebAppManagerTest, GoodJson) { + set_profile(CreateProfileAndLogin()); const auto install_options_list = LoadApps(kGoodJsonTestDir); // The good_json directory contains two good JSON files: @@ -372,6 +380,7 @@ } TEST_F(PreinstalledWebAppManagerTest, BadJson) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("bad_json"); // The bad_json directory contains one (malformed) JSON file. @@ -380,6 +389,7 @@ } TEST_F(PreinstalledWebAppManagerTest, TxtButNoJson) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("txt_but_no_json"); // The txt_but_no_json directory contains one file, and the contents of that @@ -389,6 +399,7 @@ } TEST_F(PreinstalledWebAppManagerTest, MixedJson) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("mixed_json"); // The mixed_json directory contains one empty JSON file, one malformed JSON @@ -403,6 +414,7 @@ } TEST_F(PreinstalledWebAppManagerTest, MissingAppUrl) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("missing_app_url"); // The missing_app_url directory contains one JSON file which is correct @@ -412,6 +424,7 @@ } TEST_F(PreinstalledWebAppManagerTest, EmptyAppUrl) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("empty_app_url"); // The empty_app_url directory contains one JSON file which is correct @@ -421,6 +434,7 @@ } TEST_F(PreinstalledWebAppManagerTest, InvalidAppUrl) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("invalid_app_url"); // The invalid_app_url directory contains one JSON file which is correct @@ -430,6 +444,7 @@ } TEST_F(PreinstalledWebAppManagerTest, TrueHideFromUser) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("true_hide_from_user"); EXPECT_EQ(1u, app_infos.size()); @@ -441,6 +456,7 @@ } TEST_F(PreinstalledWebAppManagerTest, InvalidHideFromUser) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("invalid_hide_from_user"); // The invalid_hide_from_user directory contains on JSON file which is correct @@ -450,6 +466,7 @@ } TEST_F(PreinstalledWebAppManagerTest, InvalidCreateShortcuts) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("invalid_create_shortcuts"); // The invalid_create_shortcuts directory contains one JSON file which is @@ -459,6 +476,7 @@ } TEST_F(PreinstalledWebAppManagerTest, MissingLaunchContainer) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("missing_launch_container"); // The missing_launch_container directory contains one JSON file which is @@ -468,6 +486,7 @@ } TEST_F(PreinstalledWebAppManagerTest, InvalidLaunchContainer) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("invalid_launch_container"); // The invalid_launch_container directory contains one JSON file which is @@ -477,6 +496,7 @@ } TEST_F(PreinstalledWebAppManagerTest, InvalidUninstallAndReplace) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("invalid_uninstall_and_replace"); // The invalid_uninstall_and_replace directory contains 2 JSON files which are @@ -486,6 +506,7 @@ } TEST_F(PreinstalledWebAppManagerTest, PreinstalledWebAppInstallDisabled) { + set_profile(CreateProfileAndLogin()); base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndDisableFeature( features::kPreinstalledWebAppInstallation); @@ -501,6 +522,7 @@ } TEST_F(PreinstalledWebAppManagerTest, EnabledByFinch) { + set_profile(CreateProfileAndLogin()); base::AutoReset<bool> testing_scope = SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting(); @@ -514,6 +536,7 @@ } TEST_F(PreinstalledWebAppManagerTest, NotEnabledByFinch) { + set_profile(CreateProfileAndLogin()); const auto app_infos = LoadApps("enabled_by_finch"); // The enabled_by_finch directory contains two JSON file containing apps @@ -526,49 +549,52 @@ TEST_F(PreinstalledWebAppManagerTest, GuestUser) { #if BUILDFLAG(IS_CHROMEOS_ASH) // App service is available for OTR profile in Guest mode. - auto primary_profile = CreateGuestProfileAndLogin(); - auto* otr_profile = - primary_profile->GetPrimaryOTRProfile(/*create_if_needed=*/true); - VerifySetOfApps(otr_profile, {GURL(kAppAllUrl), GURL(kAppGuestUrl)}); + set_profile(CreateGuestProfileAndLogin()); + UseOtrProfile(); + VerifySetOfApps({GURL(kAppAllUrl), GURL(kAppGuestUrl)}); #else - VerifySetOfApps(CreateGuestProfileAndLogin().get(), - {GURL(kAppAllUrl), GURL(kAppGuestUrl)}); + set_profile(CreateGuestProfileAndLogin()); + VerifySetOfApps({GURL(kAppAllUrl), GURL(kAppGuestUrl)}); #endif } TEST_F(PreinstalledWebAppManagerTest, UnmanagedUser) { - VerifySetOfApps(CreateProfileAndLogin().get(), - {GURL(kAppAllUrl), GURL(kAppUnmanagedUrl)}); + set_profile(CreateProfileAndLogin()); + VerifySetOfApps({GURL(kAppAllUrl), GURL(kAppUnmanagedUrl)}); } TEST_F(PreinstalledWebAppManagerTest, ManagedUser) { - const auto profile = CreateProfileAndLogin(); + auto profile = CreateProfileAndLogin(); profile->GetProfilePolicyConnector()->OverrideIsManagedForTesting(true); - VerifySetOfApps(profile.get(), {GURL(kAppAllUrl), GURL(kAppManagedUrl)}); + set_profile(std::move(profile)); + VerifySetOfApps({GURL(kAppAllUrl), GURL(kAppManagedUrl)}); } TEST_F(PreinstalledWebAppManagerTest, ManagedGuestUser) { profiles::testing::ScopedTestManagedGuestSession test_managed_guest_session; - const auto profile = CreateProfileAndLogin(); + auto profile = CreateProfileAndLogin(); profile->GetProfilePolicyConnector()->OverrideIsManagedForTesting(true); - VerifySetOfApps(profile.get(), {}); + set_profile(std::move(profile)); + VerifySetOfApps({}); } TEST_F(PreinstalledWebAppManagerTest, ChildUser) { - const auto profile = CreateProfileAndLogin(); + auto profile = CreateProfileAndLogin(); profile->SetIsSupervisedProfile(); EXPECT_TRUE(profile->IsChild()); - VerifySetOfApps(profile.get(), {GURL(kAppAllUrl), GURL(kAppChildUrl)}); + set_profile(std::move(profile)); + VerifySetOfApps({GURL(kAppAllUrl), GURL(kAppChildUrl)}); } #if BUILDFLAG(IS_CHROMEOS_ASH) TEST_F(PreinstalledWebAppManagerTest, NonPrimaryProfile) { - VerifySetOfApps(CreateProfile().get(), - {GURL(kAppAllUrl), GURL(kAppUnmanagedUrl)}); + set_profile(CreateProfile()); + VerifySetOfApps({GURL(kAppAllUrl), GURL(kAppUnmanagedUrl)}); } #endif // BUILDFLAG(IS_CHROMEOS_ASH) TEST_F(PreinstalledWebAppManagerTest, ExtraWebApps) { + set_profile(CreateProfileAndLogin()); // The extra_web_apps directory contains two JSON files in different named // subdirectories. The --extra-web-apps-dir switch should control which // directory apps are loaded from. @@ -580,6 +606,7 @@ } TEST_F(PreinstalledWebAppManagerTest, ExtraWebAppsNoMatchingDirectory) { + set_profile(CreateProfileAndLogin()); SetExtraWebAppsDir("extra_web_apps", "model3"); const auto app_infos = LoadApps("extra_web_apps"); @@ -589,7 +616,8 @@ #else // No app is expected for non-ChromeOS builds. TEST_F(PreinstalledWebAppManagerTest, NoApp) { - EXPECT_TRUE(LoadApps(kUserTypesTestDir, CreateProfile().get()).empty()); + set_profile(CreateProfile()); + EXPECT_TRUE(LoadApps(kUserTypesTestDir).empty()); } #endif // BUILDFLAG(IS_CHROMEOS) @@ -604,7 +632,8 @@ }; TEST_F(DisabledPreinstalledWebAppManagerTest, LoadConfigsWhileDisabled) { - EXPECT_EQ(LoadApps(kGoodJsonTestDir, /*profile=*/nullptr, + set_profile(CreateProfileAndLogin()); + EXPECT_EQ(LoadApps(kGoodJsonTestDir, /*disable_default_apps=*/true) .size(), 0u);
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.cc b/chrome/browser/web_applications/web_app_command_scheduler.cc index a76d7ff..cff5eee 100644 --- a/chrome/browser/web_applications/web_app_command_scheduler.cc +++ b/chrome/browser/web_applications/web_app_command_scheduler.cc
@@ -11,6 +11,7 @@ #include "base/files/file_path.h" #include "base/functional/bind.h" #include "base/functional/callback.h" +#include "base/functional/callback_forward.h" #include "base/location.h" #include "base/metrics/histogram_functions.h" #include "base/task/sequenced_task_runner.h" @@ -697,14 +698,18 @@ const std::string& operation_name, std::unique_ptr<DescriptionType> lock_description, base::OnceCallback<base::Value(LockType& lock)> callback, - const base::Location& location) { + const base::Location& location, + base::OnceClosure on_complete) { if (IsShuttingDown()) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, std::move(on_complete)); return; } provider_->command_manager().ScheduleCommand( std::make_unique<CallbackCommand<LockType>>( - operation_name, std::move(lock_description), std::move(callback)), + operation_name, std::move(lock_description), std::move(callback), + std::move(on_complete)), location); } @@ -883,7 +888,8 @@ const std::string& operation_name, std::unique_ptr<NoopLock::LockDescription> lock_description, base::OnceCallback<base::Value(NoopLock& lock)> callback, - const base::Location& location); + const base::Location& location, + base::OnceClosure on_complete); template void WebAppCommandScheduler::ScheduleCallbackWithLock<SharedWebContentsLock>( @@ -896,7 +902,8 @@ const std::string& operation_name, std::unique_ptr<SharedWebContentsLock::LockDescription> lock_description, base::OnceCallback<base::Value(SharedWebContentsLock& lock)> callback, - const base::Location& location); + const base::Location& location, + base::OnceClosure on_complete); template void WebAppCommandScheduler::ScheduleCallbackWithLock<AppLock>( const std::string& operation_name, @@ -907,7 +914,8 @@ const std::string& operation_name, std::unique_ptr<AppLock::LockDescription> lock_description, base::OnceCallback<base::Value(AppLock& lock)> callback, - const base::Location& location); + const base::Location& location, + base::OnceClosure on_complete); template void WebAppCommandScheduler::ScheduleCallbackWithLock<SharedWebContentsWithAppLock>( @@ -923,7 +931,8 @@ lock_description, base::OnceCallback<base::Value(SharedWebContentsWithAppLock& lock)> callback, - const base::Location& location); + const base::Location& location, + base::OnceClosure on_complete); template void WebAppCommandScheduler::ScheduleCallbackWithLock<AllAppsLock>( const std::string& operation_name, @@ -934,6 +943,7 @@ const std::string& operation_name, std::unique_ptr<AllAppsLock::LockDescription> lock_description, base::OnceCallback<base::Value(AllAppsLock& lock)> callback, - const base::Location& location); + const base::Location& location, + base::OnceClosure on_complete); } // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.h b/chrome/browser/web_applications/web_app_command_scheduler.h index a51ce9b..a8f2569 100644 --- a/chrome/browser/web_applications/web_app_command_scheduler.h +++ b/chrome/browser/web_applications/web_app_command_scheduler.h
@@ -9,6 +9,7 @@ #include "base/containers/flat_map.h" #include "base/functional/callback_forward.h" +#include "base/functional/callback_helpers.h" #include "base/location.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_ref.h" @@ -328,15 +329,23 @@ std::unique_ptr<DescriptionType> lock_description, base::OnceCallback<void(LockType& lock)> callback, const base::Location& location = FROM_HERE); - // Same as above, but the callback can return a debug value to also be used in - // WebAppCommandManager logs, viewable from chrome://web-app-internals. + // Same as above, with the following diffences: + // - The callback now returns a debug value that is included in + // WebAppCommandManager logs, viewable from chrome://web-app-internals. + // - An `on_complete` callback argument allows callers to specify a callback + // to be called after the command has completed. This is because it can no + // longer be simply chained on the command callback with `.Then`, as the + // command callback now returns a value. + // Note: The `on_complete` callback will be called if the system has already + // been shut down. template <typename LockType, typename DescriptionType = typename LockType::LockDescription> void ScheduleCallbackWithLock( const std::string& operation_name, std::unique_ptr<DescriptionType> lock_description, base::OnceCallback<base::Value(LockType& lock)> callback, - const base::Location& location = FROM_HERE); + const base::Location& location = FROM_HERE, + base::OnceClosure on_complete = base::DoNothing()); // Schedules to clear the browsing data for web app, given the inclusive time // range.
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 92ea943..b6050b3 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1696269474-dc08ab58135bf3101052fd4fd8201b02c98e0309.profdata +chrome-mac-arm-main-1696283846-838d4d07f361a1738d67798c7af4245edeaac932.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt index 073152b..4124befb 100644 --- a/chrome/build/win-arm64.pgo.txt +++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@ -chrome-win-arm64-main-1696247976-9992948f6edc579f186906d21f9ff3940ff99fbe.profdata +chrome-win-arm64-main-1696269474-0975493356fde74b46ba1d67d884bb3d400eef3c.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 678e31e..6afc261a 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1696258690-6ae0a9cfb1e9de37fd86ca07fb8b0828a1a1e251.profdata +chrome-win32-main-1696280377-f664b9009f99b4a8e57e0168c8a62dc02feb188d.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 86ab363..de7e658 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1696269474-5d4ed41388aafd386000c257ddb807d0a9812d7e.profdata +chrome-win64-main-1696280377-67decbe93fa438cce28431efa4a25afb3225a0f7.profdata
diff --git a/chrome/test/base/devtools_listener.cc b/chrome/test/base/devtools_listener.cc index 177e225..b9d27f99 100644 --- a/chrome/test/base/devtools_listener.cc +++ b/chrome/test/base/devtools_listener.cc
@@ -35,8 +35,8 @@ std::string EncodeURIComponent(const std::string& component) { url::RawCanonOutputT<char> encoded; - url::EncodeURIComponent(component.c_str(), component.size(), &encoded); - return {encoded.data(), static_cast<size_t>(encoded.length())}; + url::EncodeURIComponent(component, &encoded); + return std::string(encoded.view()); } } // namespace
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc index bdd1c5eb..9a0f5bc 100644 --- a/chrome/test/chromedriver/server/http_handler.cc +++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -1705,10 +1705,8 @@ CHECK(name.length()); url::RawCanonOutputT<char16_t> output; url::DecodeURLEscapeSequences( - path_parts[i].data(), path_parts[i].length(), - url::DecodeURLMode::kUTF8OrIsomorphic, &output); - std::string decoded = - base::UTF16ToASCII(std::u16string(output.data(), output.length())); + path_parts[i], url::DecodeURLMode::kUTF8OrIsomorphic, &output); + std::string decoded = base::UTF16ToASCII(output.view()); // Due to crbug.com/533361, the url decoding libraries decodes all of the // % escape sequences except for %%. We need to handle this case manually. // So, replacing all the instances of "%%" with "%".
diff --git a/chrome/test/data/banners/manifest_display_browser_maskable.json b/chrome/test/data/banners/manifest_display_browser_maskable.json new file mode 100644 index 0000000..c94b6a3 --- /dev/null +++ b/chrome/test/data/banners/manifest_display_browser_maskable.json
@@ -0,0 +1,19 @@ +{ + "name": "Manifest test app with browser display", + "icons": [ + { + "src": "launcher-icon-4x.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "launcher-icon-3x.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "maskable" + } + ], + "start_url": "manifest_test_page.html", + "display": "browser" +}
diff --git a/chrome/test/data/extensions/api_test/user_scripts/persistent_scripts/worker.js b/chrome/test/data/extensions/api_test/user_scripts/persistent_scripts/worker.js index ee29f5f7..c36128d 100644 --- a/chrome/test/data/extensions/api_test/user_scripts/persistent_scripts/worker.js +++ b/chrome/test/data/extensions/api_test/user_scripts/persistent_scripts/worker.js
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {openTab} from '/_test_resources/test_util/tabs_util.js'; +import { openTab, getInjectedElementIds } from '/_test_resources/test_util/tabs_util.js'; // Navigates to an url requested by the extension and returns the opened tab. async function navigateToRequestedUrl() { @@ -12,21 +12,6 @@ return tab; } -// Returns the injected element ids in `tabId`. -async function getInjectedElementIds(tabId) { - let injectedElements = await chrome.scripting.executeScript({ - target: {tabId: tabId}, - func: () => { - let childIds = []; - for (const child of document.body.children) - childIds.push(child.id); - return childIds.sort(); - } - }); - chrome.test.assertEq(1, injectedElements.length); - return injectedElements[0].result; -}; - // For the first session, register two user scripts. async function runFirstSession() { console.log('runFirstSession');
diff --git a/chrome/test/data/extensions/api_test/user_scripts/register/inject_element.js b/chrome/test/data/extensions/api_test/user_scripts/register/inject_element.js new file mode 100644 index 0000000..e84222c --- /dev/null +++ b/chrome/test/data/extensions/api_test/user_scripts/register/inject_element.js
@@ -0,0 +1,7 @@ +// 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. + +var div = document.createElement('div'); +div.id = 'injected_user_script'; +document.body.appendChild(div);
diff --git a/chrome/test/data/extensions/api_test/user_scripts/register/inject_element_2.js b/chrome/test/data/extensions/api_test/user_scripts/register/inject_element_2.js new file mode 100644 index 0000000..ba8b8bc --- /dev/null +++ b/chrome/test/data/extensions/api_test/user_scripts/register/inject_element_2.js
@@ -0,0 +1,7 @@ +// 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. + +var div = document.createElement('div'); +div.id = 'injected_user_script_2'; +document.body.appendChild(div);
diff --git a/chrome/test/data/extensions/api_test/user_scripts/register/worker.js b/chrome/test/data/extensions/api_test/user_scripts/register/worker.js index 2bc8792..04ce6fb 100644 --- a/chrome/test/data/extensions/api_test/user_scripts/register/worker.js +++ b/chrome/test/data/extensions/api_test/user_scripts/register/worker.js
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {openTab} from '/_test_resources/test_util/tabs_util.js'; +import { openTab, getInjectedElementIds } from '/_test_resources/test_util/tabs_util.js'; chrome.test.runTests([ // Tests that an error is returned when multiple user script entries in @@ -190,15 +190,16 @@ chrome.test.succeed(); }, - // Tests that a (valid) script is registered and injected into a frame where - // the extension has host permissions for. - async function scriptRegistered_HostPermissions() { + // Tests that a registered user script with files is injected into a frame + // where the extension has host permissions for and matches the script match + // patterns. + async function registerFile_HostPermissions() { await chrome.userScripts.unregister(); const scripts = [{ id: 'hostPerms', matches: ['*://requested.com/*'], - js: [{file: 'script.js'}], + js: [{ file: 'inject_element.js' }, { file: 'inject_element_2.js' }], runAt: 'document_end' }]; @@ -210,15 +211,16 @@ const url = `http://requested.com:${config.testServer.port}/simple.html`; const tab = await openTab(url); - // Verify script changed the tab title. - const currentTab = await chrome.tabs.get(tab.id); - chrome.test.assertEq('NEW TITLE', currentTab.title); + // Verify script files were injected. + chrome.test.assertEq( + ['injected_user_script', 'injected_user_script_2'], + await getInjectedElementIds(tab.id)); chrome.test.succeed(); }, - // Tests that a registered user script will not be injected into a frame - // where the extension does not have the host permissions for. - async function scriptRegistered_NoHostPermissions() { + // Tests that a registered user script with a file will not be injected into a + // frame where the extension does not have the host permissions for. + async function registerFile_NoHostPermissions() { await chrome.userScripts.unregister(); const scripts = [{
diff --git a/chrome/test/data/extensions/api_test/user_scripts/unregister/worker.js b/chrome/test/data/extensions/api_test/user_scripts/unregister/worker.js index 404f3fbc..e7027b0 100644 --- a/chrome/test/data/extensions/api_test/user_scripts/unregister/worker.js +++ b/chrome/test/data/extensions/api_test/user_scripts/unregister/worker.js
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {openTab} from '/_test_resources/test_util/tabs_util.js'; +import { openTab, getInjectedElementIds } from '/_test_resources/test_util/tabs_util.js'; // Navigates to an url requested by the extension and returns the opened tab. async function navigateToRequestedUrl() { @@ -12,21 +12,6 @@ return tab; } -// Returns the injected element ids in `tabId`. -async function getInjectedElementIds(tabId) { - let injectedElements = await chrome.scripting.executeScript({ - target: {tabId: tabId}, - func: () => { - let childIds = []; - for (const child of document.body.children) - childIds.push(child.id); - return childIds.sort(); - } - }); - chrome.test.assertEq(1, injectedElements.length); - return injectedElements[0].result; -}; - chrome.test.runTests([ // Tests that calling unregister with specific ids unregisters such scripts // and does not inject them into a (former) matching frame.
diff --git a/chrome/test/data/extensions/test_util/tabs_util.js b/chrome/test/data/extensions/test_util/tabs_util.js index afeea33..169f40f 100644 --- a/chrome/test/data/extensions/test_util/tabs_util.js +++ b/chrome/test/data/extensions/test_util/tabs_util.js
@@ -40,3 +40,22 @@ }); }); } + +/** + * Returns the injected element ids in `tabId`. + * @param {string} tabId + * @return {string[]} + */ +export async function getInjectedElementIds(tabId) { + let injectedElements = await chrome.scripting.executeScript({ + target: { tabId: tabId }, + func: () => { + let childIds = []; + for (const child of document.body.children) + childIds.push(child.id); + return childIds.sort(); + } + }); + chrome.test.assertEq(1, injectedElements.length); + return injectedElements[0].result; +};
diff --git a/chrome/test/data/webui/new_tab_page/modules/history_clusters/module_test.ts b/chrome/test/data/webui/new_tab_page/modules/history_clusters/module_test.ts index fef5ba1..bbe0d2e 100644 --- a/chrome/test/data/webui/new_tab_page/modules/history_clusters/module_test.ts +++ b/chrome/test/data/webui/new_tab_page/modules/history_clusters/module_test.ts
@@ -457,8 +457,8 @@ }); }); - suite('UnloadMetricNoImages', () => { - test('Module records no images state metric on unload', async () => { + suite('PagehideMetricNoImages', () => { + test('Module records no images state metric on pagehide', async () => { imageServiceHandler.setResultFor( 'getPageImageUrl', Promise.resolve(null)); @@ -467,7 +467,7 @@ assertTrue(!!moduleElement); await waitAfterNextRender(moduleElement); - window.dispatchEvent(new Event('unload')); + window.dispatchEvent(new Event('pagehide')); assertEquals(2, imageServiceHandler.getCallCount('getPageImageUrl')); assertEquals( @@ -483,8 +483,8 @@ }); }); - suite('UnloadMetricAllImages', () => { - test('Module records all images state metric on unload', async () => { + suite('PagehideMetricAllImages', () => { + test('Module records all images state metric on pagehide', async () => { imageServiceHandler.setResultFor('getPageImageUrl', Promise.resolve({ result: {imageUrl: {url: 'https://example.com/image.png'}}, })); @@ -494,7 +494,7 @@ assertTrue(!!moduleElement); await waitAfterNextRender(moduleElement); - window.dispatchEvent(new Event('unload')); + window.dispatchEvent(new Event('pagehide')); assertEquals(2, imageServiceHandler.getCallCount('getPageImageUrl')); assertEquals(
diff --git a/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc b/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc index 6e38765..fb68f6a 100644 --- a/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc +++ b/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc
@@ -274,17 +274,17 @@ } IN_PROC_BROWSER_TEST_F(NewTabPageModulesHistoryClustersModuleTest, - UnloadMetricImageDisplayStateNone) { + PagehideMetricImageDisplayStateNone) { RunTest("new_tab_page/modules/history_clusters/module_test.js", "runMochaSuite('NewTabPageModulesHistoryClustersModuleTest " - "UnloadMetricNoImages')"); + "PagehideMetricNoImages')"); } IN_PROC_BROWSER_TEST_F(NewTabPageModulesHistoryClustersModuleTest, - UnloadMetricImageDisplayStateAll) { + PagehideMetricImageDisplayStateAll) { RunTest("new_tab_page/modules/history_clusters/module_test.js", "runMochaSuite('NewTabPageModulesHistoryClustersModuleTest " - "UnloadMetricAllImages')"); + "PagehideMetricAllImages')"); } IN_PROC_BROWSER_TEST_F(NewTabPageModulesHistoryClustersModuleTest,
diff --git a/chrome/test/data/webui/settings/chromeos/os_languages_page/input_page_test.ts b/chrome/test/data/webui/settings/chromeos/os_languages_page/input_page_test.ts index b1a64a2..c080fe1 100644 --- a/chrome/test/data/webui/settings/chromeos/os_languages_page/input_page_test.ts +++ b/chrome/test/data/webui/settings/chromeos/os_languages_page/input_page_test.ts
@@ -1403,6 +1403,25 @@ const orcaToggle = inputPage.shadowRoot!.querySelector('#orcaToggle'); assertTrue(isVisible(orcaToggle)); }); + + test('Deep link to orca suggestion toggle', async () => { + await createInputPage(); + + const params = new URLSearchParams(); + const setting = settingMojom.Setting.kShowOrca; + params.append('settingId', setting.toString()); + Router.getInstance().navigateTo(routes.OS_LANGUAGES_INPUT, params); + flush(); + + const deepLinkElement = + inputPage.shadowRoot!.querySelector<HTMLElement>('#orcaToggle'); + assertTrue(!!deepLinkElement); + await waitAfterNextRender(deepLinkElement); + assertEquals( + deepLinkElement, inputPage.shadowRoot!.activeElement, + `Orca suggestion toggle should be focused for settingId=${ + setting}.`); + }); }); suite('when both the emoji suggestions and orca are not allowed', () => {
diff --git a/chrome/updater/app/app_server_win.cc b/chrome/updater/app/app_server_win.cc index c53a61c..5cbcc7e 100644 --- a/chrome/updater/app/app_server_win.cc +++ b/chrome/updater/app/app_server_win.cc
@@ -265,6 +265,9 @@ } bool AppServerWin::RestoreComInterfaces(bool is_internal) { + if (AreComInterfacesPresent(updater_scope(), is_internal)) { + return true; + } return InstallComInterfaces(updater_scope(), is_internal); }
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc index 828cf24e..58aed04 100644 --- a/chrome/updater/test/integration_tests.cc +++ b/chrome/updater/test/integration_tests.cc
@@ -903,10 +903,12 @@ ScopedServer test_server(test_commands_); ASSERT_NO_FATAL_FAILURE(Install()); + const UpdaterScope scope = GetTestScope(); + ASSERT_TRUE(AreComInterfacesPresent(scope, true)); + ASSERT_TRUE(AreComInterfacesPresent(scope, false)); // Delete IUpdaterXXX, used by `InstallApp` via `RegisterApp`. // Delete IUpdaterInternal, used by the `wake` task. { - const UpdaterScope scope = GetTestScope(); for (const IID& iid : [&scope]() -> std::vector<IID> { switch (scope) { case UpdaterScope::kUser: @@ -931,6 +933,8 @@ ASSERT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND); } } + ASSERT_FALSE(AreComInterfacesPresent(scope, true)); + ASSERT_FALSE(AreComInterfacesPresent(scope, false)); const std::string kAppId("test"); ASSERT_NO_FATAL_FAILURE(InstallApp(kAppId));
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc index 7f4b6cf..893ae02 100644 --- a/chrome/updater/test/integration_tests_win.cc +++ b/chrome/updater/test/integration_tests_win.cc
@@ -1636,7 +1636,10 @@ const HKEY root = UpdaterScopeToHKeyRoot(scope); base::win::RegKey key; - ASSERT_EQ(key.Create(root, GetAppClientsKey(kLegacyGoogleUpdateAppID).c_str(), + ASSERT_EQ(key.Create(root, + base::StrCat( + {UPDATER_KEY L"Clients\\", kLegacyGoogleUpdateAppID}) + .c_str(), Wow6432(KEY_WRITE)), ERROR_SUCCESS); ASSERT_EQ(key.WriteValue(kRegValuePV, L"1.1.1.1"), ERROR_SUCCESS); @@ -1647,17 +1650,17 @@ ASSERT_EQ( key.Create( root, - GetAppClientsKey(L"{8A69D345-D564-463C-AFF1-A69D9E530F96}").c_str(), + UPDATER_KEY L"\\Clients\\{8A69D345-D564-463C-AFF1-A69D9E530F96}", Wow6432(KEY_WRITE)), ERROR_SUCCESS); ASSERT_EQ(key.WriteValue(kRegValuePV, L"99.0.0.1"), ERROR_SUCCESS); key.Close(); ASSERT_EQ( - key.Create(root, - GetAppClientStateKey(L"{8A69D345-D564-463C-AFF1-A69D9E530F96}") - .c_str(), - Wow6432(KEY_WRITE)), + key.Create( + root, + UPDATER_KEY L"\\ClientState\\{8A69D345-D564-463C-AFF1-A69D9E530F96}", + Wow6432(KEY_WRITE)), ERROR_SUCCESS); ASSERT_EQ(key.WriteValue(kRegValueBrandCode, L"GGLS"), ERROR_SUCCESS); ASSERT_EQ(key.WriteValue(kRegValueAP, L"TestAP"), ERROR_SUCCESS); @@ -1666,12 +1669,12 @@ ASSERT_EQ(key.WriteValue(kRegValueDateOfLastRollcall, 5929), ERROR_SUCCESS); key.Close(); - ASSERT_EQ( - key.Create( - root, - GetAppCohortKey(L"{8A69D345-D564-463C-AFF1-A69D9E530F96}").c_str(), - Wow6432(KEY_WRITE)), - ERROR_SUCCESS); + ASSERT_EQ(key.Create( + root, + UPDATER_KEY L"\\ClientState" + L"\\{8A69D345-D564-463C-AFF1-A69D9E530F96}\\cohort", + Wow6432(KEY_WRITE)), + ERROR_SUCCESS); ASSERT_EQ(key.WriteValue(nullptr, L"TestCohort"), ERROR_SUCCESS); ASSERT_EQ(key.WriteValue(kRegValueCohortName, L"TestCohortName"), ERROR_SUCCESS); @@ -1682,7 +1685,7 @@ ASSERT_EQ( key.Create( root, - GetAppClientsKey(L"{fc54d8f9-b6fd-4274-92eb-c4335cd8761e}").c_str(), + UPDATER_KEY L"\\Clients\\{fc54d8f9-b6fd-4274-92eb-c4335cd8761e}", Wow6432(KEY_WRITE)), ERROR_SUCCESS); ASSERT_EQ(key.WriteValue(kRegValueBrandCode, L"GGLS"), ERROR_SUCCESS);
diff --git a/chrome/updater/updater.cc b/chrome/updater/updater.cc index 4ca7a48..94cd1dd 100644 --- a/chrome/updater/updater.cc +++ b/chrome/updater/updater.cc
@@ -15,7 +15,9 @@ #include "base/logging.h" #include "base/message_loop/message_pump_type.h" #include "base/process/memory.h" +#include "base/process/process_handle.h" #include "base/ranges/algorithm.h" +#include "base/system/sys_info.h" #include "base/task/single_thread_task_executor.h" #include "base/task/thread_pool/thread_pool_instance.h" #include "base/threading/platform_thread.h" @@ -281,9 +283,11 @@ const UpdaterScope updater_scope = GetUpdaterScope(); InitLogging(updater_scope); - VLOG(1) << "Version " << kUpdaterVersion << ", " << BuildFlavor() << ", " << BuildArch() << ", command line: " << GetCommandLineString(); + VLOG(1) << "System uptime (seconds): " << base::SysInfo::Uptime().InSeconds() + << ", parent pid: " + << base::GetParentProcessId(base::GetCurrentProcessHandle()); const int retval = HandleUpdaterCommands(updater_scope, command_line); VLOG(1) << __func__ << " (--" << GetUpdaterCommand(command_line) << ")" << " returned " << retval << ".";
diff --git a/chrome/updater/util/win_util.cc b/chrome/updater/util/win_util.cc index b47778c1..fe57539 100644 --- a/chrome/updater/util/win_util.cc +++ b/chrome/updater/util/win_util.cc
@@ -296,7 +296,7 @@ } std::wstring GetAppCohortKey(const std::wstring& app_id) { - return base::StrCat({COHORT_KEY, app_id}); + return base::StrCat({GetAppClientStateKey(app_id), L"\\", kRegKeyCohort}); } std::wstring GetAppCommandKey(const std::wstring& app_id,
diff --git a/chrome/updater/win/setup/setup_util.cc b/chrome/updater/win/setup/setup_util.cc index d04c00a..5b11dfff 100644 --- a/chrome/updater/win/setup/setup_util.cc +++ b/chrome/updater/win/setup/setup_util.cc
@@ -23,6 +23,7 @@ #include "base/logging.h" #include "base/memory/scoped_refptr.h" #include "base/strings/strcat.h" +#include "base/win/registry.h" #include "base/win/win_util.h" #include "chrome/installer/util/install_service_work_item.h" #include "chrome/installer/util/registry_util.h" @@ -237,6 +238,26 @@ return list->Do(); } +bool AreComInterfacesPresent(UpdaterScope scope, bool is_internal) { + VLOG(1) << __func__ << ": scope: " << scope + << ": is_internal: " << is_internal; + for (const auto& iid : GetInterfaces(is_internal, scope)) { + const HKEY root = UpdaterScopeToHKeyRoot(scope); + const std::wstring iid_path = GetComIidRegistryPath(iid); + const std::wstring typelib_path = GetComTypeLibRegistryPath(iid); + for (const auto& path : + {iid_path, base::StrCat({iid_path, L"\\", L"ProxyStubClsid32"}), + base::StrCat({iid_path, L"\\", L"TypeLib"}), typelib_path}) { + if (!base::win::RegKey(root, path.c_str(), KEY_QUERY_VALUE).Valid()) { + VLOG(2) << __func__ << ": interface missing: " << iid_path; + return false; + } + } + } + VLOG(2) << __func__ << ": all interfaces present"; + return true; +} + // Adds work items to `list` to install the interface `iid`. void AddInstallComInterfaceWorkItems(HKEY root, const base::FilePath& typelib_path,
diff --git a/chrome/updater/win/setup/setup_util.h b/chrome/updater/win/setup/setup_util.h index fdad3da..59a2093a4 100644 --- a/chrome/updater/win/setup/setup_util.h +++ b/chrome/updater/win/setup/setup_util.h
@@ -85,6 +85,11 @@ // success. bool InstallComInterfaces(UpdaterScope scope, bool is_internal); +// Checks the COM interfaces and corresponding typelibs in the registry for +// the updater at the given `scope` and `is_internal`. Returns `true` if the +// interfaces are present, `false` otherwise. +bool AreComInterfacesPresent(UpdaterScope scope, bool is_internal); + // Adds work items to `list` to install the interface `iid`. void AddInstallComInterfaceWorkItems(HKEY root, const base::FilePath& typelib_path,
diff --git a/chrome/updater/win/win_constants.cc b/chrome/updater/win/win_constants.cc index 543239ed..874b0c9 100644 --- a/chrome/updater/win/win_constants.cc +++ b/chrome/updater/win/win_constants.cc
@@ -27,6 +27,8 @@ const wchar_t kRegValueName[] = L"name"; const wchar_t kRegValueUninstallCmdLine[] = L"UninstallCmdLine"; const wchar_t kRegValueVersion[] = L"version"; + +const wchar_t kRegKeyCohort[] = L"cohort"; const wchar_t kRegValueCohortName[] = L"name"; const wchar_t kRegValueCohortHint[] = L"hint";
diff --git a/chrome/updater/win/win_constants.h b/chrome/updater/win/win_constants.h index 42894e2..5441d8a 100644 --- a/chrome/updater/win/win_constants.h +++ b/chrome/updater/win/win_constants.h
@@ -30,7 +30,6 @@ #define CLIENTS_KEY UPDATER_KEY L"Clients\\" #define CLIENT_STATE_KEY UPDATER_KEY L"ClientState\\" #define CLIENT_STATE_MEDIUM_KEY UPDATER_KEY L"ClientStateMedium\\" -#define COHORT_KEY CLIENT_STATE_KEY L"cohort\\" #define COMPANY_POLICIES_KEY \ L"Software\\Policies\\" COMPANY_SHORTNAME_STRING L"\\" @@ -56,7 +55,8 @@ extern const wchar_t kRegValueUninstallCmdLine[]; extern const wchar_t kRegValueVersion[]; -// Cohort values under `COHORT_KEY`. +// Cohort registry constants. +extern const wchar_t kRegKeyCohort[]; extern const wchar_t kRegValueCohortName[]; extern const wchar_t kRegValueCohortHint[];
diff --git a/clank b/clank index aa3c18d..fd3c2ef 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit aa3c18d7af25c04cdf5ff613708d191707815647 +Subproject commit fd3c2ef103a6345bca3075730c1cb70dedbdd9ec
diff --git a/components/aggregation_service/aggregation_coordinator_utils.h b/components/aggregation_service/aggregation_coordinator_utils.h index e70204e..8c90552 100644 --- a/components/aggregation_service/aggregation_coordinator_utils.h +++ b/components/aggregation_service/aggregation_coordinator_utils.h
@@ -14,10 +14,10 @@ namespace aggregation_service { constexpr char kDefaultAggregationCoordinatorAwsCloud[] = - "https://publickeyservice.aws.privacysandboxservices.com"; + "https://publickeyservice.msmt.aws.privacysandboxservices.com"; constexpr char kDefaultAggregationCoordinatorGcpCloud[] = - "https://gcp-server.example"; + "https://publickeyservice.msmt.gcp.privacysandboxservices.com"; COMPONENT_EXPORT(AGGREGATION_SERVICE) url::Origin GetDefaultAggregationCoordinatorOrigin();
diff --git a/components/aggregation_service/features.cc b/components/aggregation_service/features.cc index 6096ff3..17d4975 100644 --- a/components/aggregation_service/features.cc +++ b/components/aggregation_service/features.cc
@@ -14,7 +14,7 @@ BASE_FEATURE(kAggregationServiceMultipleCloudProviders, "AggregationServiceMultipleCloudProviders", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); const base::FeatureParam<std::string> kAggregationServiceCoordinatorAwsCloud{ &kAggregationServiceMultipleCloudProviders, "aws_cloud",
diff --git a/components/arc/common/intent_helper/link_handler_model.cc b/components/arc/common/intent_helper/link_handler_model.cc index 096ac42..af6b8ef 100644 --- a/components/arc/common/intent_helper/link_handler_model.cc +++ b/components/arc/common/intent_helper/link_handler_model.cc
@@ -4,6 +4,7 @@ #include "components/arc/common/intent_helper/link_handler_model.h" +#include <string_view> #include <utility> #include "base/functional/bind.h" @@ -28,25 +29,25 @@ constexpr int kMaxValueLen = 2048; bool GetQueryValue(const GURL& url, - const std::string& key_to_find, + std::string_view key_to_find, std::u16string* out) { - const std::string str(url.query()); + const std::string_view str = url.query_piece(); url::Component query(0, str.length()); url::Component key; url::Component value; - while (url::ExtractQueryKeyValue(str.c_str(), &query, &key, &value)) { + while (url::ExtractQueryKeyValue(str.data(), &query, &key, &value)) { if (value.is_empty()) continue; if (str.substr(key.begin, key.len) == key_to_find) { if (value.len >= kMaxValueLen) return false; url::RawCanonOutputW<kMaxValueLen> output; - url::DecodeURLEscapeSequences(str.c_str() + value.begin, value.len, + url::DecodeURLEscapeSequences(str.substr(value.begin, value.len), url::DecodeURLMode::kUTF8OrIsomorphic, &output); - *out = std::u16string(output.data(), output.length()); + *out = std::u16string(output.view()); return true; } }
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index 659d8a4b..cb9a0b8 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -969,7 +969,7 @@ } // Add the new IBAN to the web database. - database_helper_->GetLocalDatabase()->AddIban(iban); + database_helper_->GetLocalDatabase()->AddLocalIban(iban); // Refresh our local cache and send notifications to observers. Refresh(); @@ -981,7 +981,7 @@ return std::string(); // Make the update. - database_helper_->GetLocalDatabase()->UpdateIban(iban); + database_helper_->GetLocalDatabase()->UpdateLocalIban(iban); // Refresh our local cache and send notifications to observers. Refresh(); @@ -1319,7 +1319,7 @@ // Refresh our local cache and send notifications to observers. Refresh(); } else if (FindByGUID(local_ibans_, guid)) { - database_helper_->GetLocalDatabase()->RemoveIban(guid); + database_helper_->GetLocalDatabase()->RemoveLocalIban(guid); // Refresh our local cache and send notifications to observers. Refresh(); } else { @@ -2136,7 +2136,7 @@ CancelPendingServerQuery(&pending_server_ibans_query_); pending_local_ibans_query_ = - database_helper_->GetLocalDatabase()->GetIbans(this); + database_helper_->GetLocalDatabase()->GetLocalIbans(this); if (database_helper_->GetServerDatabase()) { pending_server_ibans_query_ = database_helper_->GetServerDatabase()->GetServerIbans(this);
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc index 695aa42..9e6072e 100644 --- a/components/autofill/core/browser/webdata/autofill_table.cc +++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -1186,7 +1186,7 @@ } bool AutofillTable::CreateTablesIfNecessary() { - return InitMainTable() && InitCreditCardsTable() && InitIbansTable() && + return InitMainTable() && InitCreditCardsTable() && InitLocalIbansTable() && InitMaskedCreditCardsTable() && InitUnmaskedCreditCardsTable() && InitServerCardMetadataTable() && InitServerAddressesTable() && InitServerAddressMetadataTable() && InitAutofillSyncMetadataTable() && @@ -1980,7 +1980,7 @@ SetServerProfilesAndMetadata(profiles, /*update_metadata=*/true); } -bool AutofillTable::AddIban(const Iban& iban) { +bool AutofillTable::AddLocalIban(const Iban& iban) { sql::Statement s; InsertBuilder(db_, s, kLocalIbansTable, {kGuid, kUseCount, kUseDate, kValueEncrypted, kNickname}); @@ -1992,10 +1992,10 @@ return true; } -bool AutofillTable::UpdateIban(const Iban& iban) { +bool AutofillTable::UpdateLocalIban(const Iban& iban) { DCHECK(base::Uuid::ParseCaseInsensitive(iban.guid()).is_valid()); - std::unique_ptr<Iban> old_iban = GetIban(iban.guid()); + std::unique_ptr<Iban> old_iban = GetLocalIban(iban.guid()); if (!old_iban) { return false; } @@ -2015,12 +2015,12 @@ return result; } -bool AutofillTable::RemoveIban(const std::string& guid) { +bool AutofillTable::RemoveLocalIban(const std::string& guid) { DCHECK(base::Uuid::ParseCaseInsensitive(guid).is_valid()); return DeleteWhereColumnEq(db_, kLocalIbansTable, kGuid, guid); } -std::unique_ptr<Iban> AutofillTable::GetIban(const std::string& guid) { +std::unique_ptr<Iban> AutofillTable::GetLocalIban(const std::string& guid) { DCHECK(base::Uuid::ParseCaseInsensitive(guid).is_valid()); sql::Statement s; SelectBuilder(db_, s, kLocalIbansTable, @@ -2034,7 +2034,7 @@ return IbanFromStatement(s, *autofill_table_encryptor_); } -bool AutofillTable::GetIbans(std::vector<std::unique_ptr<Iban>>* ibans) { +bool AutofillTable::GetLocalIbans(std::vector<std::unique_ptr<Iban>>* ibans) { DCHECK(ibans); ibans->clear(); @@ -2044,7 +2044,7 @@ while (s.Step()) { std::string guid = s.ColumnString(0); - std::unique_ptr<Iban> iban = GetIban(guid); + std::unique_ptr<Iban> iban = GetLocalIban(guid); if (!iban) return false; ibans->push_back(std::move(iban)); @@ -3967,7 +3967,7 @@ {kNickname, "VARCHAR"}}); } -bool AutofillTable::InitIbansTable() { +bool AutofillTable::InitLocalIbansTable() { return CreateTableIfNotExists(db_, kLocalIbansTable, {{kGuid, "VARCHAR PRIMARY KEY"}, {kUseCount, "INTEGER NOT NULL DEFAULT 0"},
diff --git a/components/autofill/core/browser/webdata/autofill_table.h b/components/autofill/core/browser/webdata/autofill_table.h index b4a9ba7..e395b01b 100644 --- a/components/autofill/core/browser/webdata/autofill_table.h +++ b/components/autofill/core/browser/webdata/autofill_table.h
@@ -701,21 +701,21 @@ // the given ones. void SetServerProfiles(const std::vector<AutofillProfile>& profiles); - // Records a single IBAN in the iban table. - bool AddIban(const Iban& iban); + // Records a single IBAN in the local_ibans table. + bool AddLocalIban(const Iban& iban); // Updates the database values for the specified IBAN. - bool UpdateIban(const Iban& iban); + bool UpdateLocalIban(const Iban& iban); - // Removes a row from the ibans table. |guid| is the identifier of the + // Removes a row from the local_ibans table. `guid` is the identifier of the // IBAN to remove. - bool RemoveIban(const std::string& guid); + bool RemoveLocalIban(const std::string& guid); - // Retrieves an IBAN with the given |guid|. - std::unique_ptr<Iban> GetIban(const std::string& guid); + // Retrieves an IBAN with the given `guid`. + std::unique_ptr<Iban> GetLocalIban(const std::string& guid); // Retrieves the local IBANs in the database. - bool GetIbans(std::vector<std::unique_ptr<Iban>>* ibans); + bool GetLocalIbans(std::vector<std::unique_ptr<Iban>>* ibans); // Records a single credit card in the credit_cards table. bool AddCreditCard(const CreditCard& credit_card); @@ -1030,7 +1030,7 @@ bool InitMainTable(); bool InitCreditCardsTable(); - bool InitIbansTable(); + bool InitLocalIbansTable(); bool InitLegacyProfilesTable(); bool InitLegacyProfileAddressesTable(); bool InitLegacyProfileNamesTable();
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc index a861be8e..402a78c5 100644 --- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -1116,10 +1116,10 @@ iban.SetRawInfo(IBAN_VALUE, u"IE12 BOFI 9000 0112 3456 78"); iban.set_nickname(u"My doctor's IBAN"); - EXPECT_TRUE(table_->AddIban(iban)); + EXPECT_TRUE(table_->AddLocalIban(iban)); // Get the inserted IBAN. - std::unique_ptr<Iban> db_iban = table_->GetIban(iban.guid()); + std::unique_ptr<Iban> db_iban = table_->GetLocalIban(iban.guid()); ASSERT_TRUE(db_iban); EXPECT_EQ(guid, db_iban->guid()); sql::Statement s_work(db_->GetSQLConnection()->GetUniqueStatement( @@ -1137,9 +1137,9 @@ another_iban.SetRawInfo(IBAN_VALUE, u"DE91 1000 0000 0123 4567 89"); another_iban.set_nickname(u"My brother's IBAN"); - EXPECT_TRUE(table_->AddIban(another_iban)); + EXPECT_TRUE(table_->AddLocalIban(another_iban)); - db_iban = table_->GetIban(another_iban.guid()); + db_iban = table_->GetLocalIban(another_iban.guid()); ASSERT_TRUE(db_iban); EXPECT_EQ(another_guid, db_iban->guid()); @@ -1154,8 +1154,8 @@ // Update the another_iban. another_iban.SetRawInfo(IBAN_VALUE, u"GB98 MIDL 0700 9312 3456 78"); another_iban.set_nickname(u"My teacher's IBAN"); - EXPECT_TRUE(table_->UpdateIban(another_iban)); - db_iban = table_->GetIban(another_iban.guid()); + EXPECT_TRUE(table_->UpdateLocalIban(another_iban)); + db_iban = table_->GetLocalIban(another_iban.guid()); ASSERT_TRUE(db_iban); EXPECT_EQ(another_guid, db_iban->guid()); sql::Statement s_target_updated(db_->GetSQLConnection()->GetUniqueStatement( @@ -1167,8 +1167,8 @@ EXPECT_FALSE(s_target_updated.Step()); // Remove the 'Target' IBAN. - EXPECT_TRUE(table_->RemoveIban(another_iban.guid())); - db_iban = table_->GetIban(another_iban.guid()); + EXPECT_TRUE(table_->RemoveLocalIban(another_iban.guid())); + db_iban = table_->GetLocalIban(another_iban.guid()); EXPECT_FALSE(db_iban); } @@ -1323,13 +1323,13 @@ std::unique_ptr<CreditCard> db_card = table_->GetCreditCard(card.guid()); EXPECT_EQ(card.cvc(), db_card->cvc()); Iban iban = test::GetIban(); - EXPECT_TRUE(table_->AddIban(iban)); + EXPECT_TRUE(table_->AddLocalIban(iban)); // After calling ClearLocalPaymentMethodsData, the local_stored_cvc, // credit_cards, and local_ibans tables should be empty. table_->ClearLocalPaymentMethodsData(); EXPECT_FALSE(table_->GetCreditCard(card.guid())); - EXPECT_FALSE(table_->GetIban(iban.guid())); + EXPECT_FALSE(table_->GetLocalIban(iban.guid())); sql::Statement s(db_->GetSQLConnection()->GetUniqueStatement( "SELECT guid FROM local_stored_cvc WHERE guid=?")); s.BindString(0, card.guid());
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc index 44b0d90..41d0264 100644 --- a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc +++ b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
@@ -647,11 +647,11 @@ return WebDatabase::COMMIT_NEEDED; } -std::unique_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetIbans( +std::unique_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetLocalIbans( WebDatabase* db) { DCHECK(owning_task_runner()->RunsTasksInCurrentSequence()); std::vector<std::unique_ptr<Iban>> ibans; - AutofillTable::FromWebDatabase(db)->GetIbans(&ibans); + AutofillTable::FromWebDatabase(db)->GetLocalIbans(&ibans); return std::make_unique<WDResult<std::vector<std::unique_ptr<Iban>>>>( AUTOFILL_IBANS_RESULT, std::move(ibans)); @@ -666,10 +666,10 @@ AUTOFILL_IBANS_RESULT, std::move(ibans)); } -WebDatabase::State AutofillWebDataBackendImpl::AddIban(const Iban& iban, - WebDatabase* db) { +WebDatabase::State AutofillWebDataBackendImpl::AddLocalIban(const Iban& iban, + WebDatabase* db) { DCHECK(owning_task_runner()->RunsTasksInCurrentSequence()); - if (!AutofillTable::FromWebDatabase(db)->AddIban(iban)) { + if (!AutofillTable::FromWebDatabase(db)->AddLocalIban(iban)) { ReportResult(Result::kAddIban_Failure); return WebDatabase::COMMIT_NOT_NEEDED; } @@ -681,19 +681,20 @@ return WebDatabase::COMMIT_NEEDED; } -WebDatabase::State AutofillWebDataBackendImpl::UpdateIban(const Iban& iban, - WebDatabase* db) { +WebDatabase::State AutofillWebDataBackendImpl::UpdateLocalIban( + const Iban& iban, + WebDatabase* db) { DCHECK(owning_task_runner()->RunsTasksInCurrentSequence()); // It is currently valid to try to update a missing IBAN. We simply drop // the write and the caller will detect this on the next refresh. std::unique_ptr<Iban> original_iban = - AutofillTable::FromWebDatabase(db)->GetIban(iban.guid()); + AutofillTable::FromWebDatabase(db)->GetLocalIban(iban.guid()); if (!original_iban) { ReportResult(Result::kUpdateIban_ReadFailure); return WebDatabase::COMMIT_NOT_NEEDED; } - if (!AutofillTable::FromWebDatabase(db)->UpdateIban(iban)) { + if (!AutofillTable::FromWebDatabase(db)->UpdateLocalIban(iban)) { ReportResult(Result::kUpdateIban_WriteFailure); return WebDatabase::COMMIT_NOT_NEEDED; } @@ -705,18 +706,18 @@ return WebDatabase::COMMIT_NEEDED; } -WebDatabase::State AutofillWebDataBackendImpl::RemoveIban( +WebDatabase::State AutofillWebDataBackendImpl::RemoveLocalIban( const std::string& guid, WebDatabase* db) { DCHECK(owning_task_runner()->RunsTasksInCurrentSequence()); std::unique_ptr<Iban> iban = - AutofillTable::FromWebDatabase(db)->GetIban(guid); + AutofillTable::FromWebDatabase(db)->GetLocalIban(guid); if (!iban) { ReportResult(Result::kRemoveIban_ReadFailure); return WebDatabase::COMMIT_NOT_NEEDED; } - if (!AutofillTable::FromWebDatabase(db)->RemoveIban(guid)) { + if (!AutofillTable::FromWebDatabase(db)->RemoveLocalIban(guid)) { ReportResult(Result::kRemoveIban_WriteFailure); return WebDatabase::COMMIT_NOT_NEEDED; }
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h index 236db85..fd59d91 100644 --- a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h +++ b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h
@@ -188,17 +188,17 @@ std::unique_ptr<WDTypedResult> GetServerCreditCards(WebDatabase* db); // Returns a vector of local/server IBANs from the web database. - std::unique_ptr<WDTypedResult> GetIbans(WebDatabase* db); + std::unique_ptr<WDTypedResult> GetLocalIbans(WebDatabase* db); std::unique_ptr<WDTypedResult> GetServerIbans(WebDatabase* db); - // Adds an IBAN to the web database. Valid only for local IBANs. - WebDatabase::State AddIban(const Iban& iban, WebDatabase* db); + // Adds an IBAN to the web database. + WebDatabase::State AddLocalIban(const Iban& iban, WebDatabase* db); - // Updates an IBAN in the web database. Valid only for local IBANs. - WebDatabase::State UpdateIban(const Iban& iban, WebDatabase* db); + // Updates an IBAN in the web database. + WebDatabase::State UpdateLocalIban(const Iban& iban, WebDatabase* db); - // Removes an IBAN from the web database. Valid only for local IBANs. - WebDatabase::State RemoveIban(const std::string& guid, WebDatabase* db); + // Removes an IBAN from the web database. + WebDatabase::State RemoveLocalIban(const std::string& guid, WebDatabase* db); // Server credit cards can be masked (only last 4 digits stored) or unmasked // (all data stored). These toggle between the two states.
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_service.cc b/components/autofill/core/browser/webdata/autofill_webdata_service.cc index 400edda..b1b25a3 100644 --- a/components/autofill/core/browser/webdata/autofill_webdata_service.cc +++ b/components/autofill/core/browser/webdata/autofill_webdata_service.cc
@@ -222,17 +222,18 @@ autofill_backend_, credit_card)); } -void AutofillWebDataService::AddIban(const Iban& iban) { - wdbs_->ScheduleDBTask(FROM_HERE, - base::BindOnce(&AutofillWebDataBackendImpl::AddIban, - autofill_backend_, iban)); +void AutofillWebDataService::AddLocalIban(const Iban& iban) { + wdbs_->ScheduleDBTask( + FROM_HERE, base::BindOnce(&AutofillWebDataBackendImpl::AddLocalIban, + autofill_backend_, iban)); } -WebDataServiceBase::Handle AutofillWebDataService::GetIbans( +WebDataServiceBase::Handle AutofillWebDataService::GetLocalIbans( WebDataServiceConsumer* consumer) { return wdbs_->ScheduleDBTaskWithResult( FROM_HERE, - base::BindOnce(&AutofillWebDataBackendImpl::GetIbans, autofill_backend_), + base::BindOnce(&AutofillWebDataBackendImpl::GetLocalIbans, + autofill_backend_), consumer); } @@ -245,16 +246,16 @@ consumer); } -void AutofillWebDataService::UpdateIban(const Iban& iban) { - wdbs_->ScheduleDBTask(FROM_HERE, - base::BindOnce(&AutofillWebDataBackendImpl::UpdateIban, - autofill_backend_, iban)); +void AutofillWebDataService::UpdateLocalIban(const Iban& iban) { + wdbs_->ScheduleDBTask( + FROM_HERE, base::BindOnce(&AutofillWebDataBackendImpl::UpdateLocalIban, + autofill_backend_, iban)); } -void AutofillWebDataService::RemoveIban(const std::string& guid) { - wdbs_->ScheduleDBTask(FROM_HERE, - base::BindOnce(&AutofillWebDataBackendImpl::RemoveIban, - autofill_backend_, guid)); +void AutofillWebDataService::RemoveLocalIban(const std::string& guid) { + wdbs_->ScheduleDBTask( + FROM_HERE, base::BindOnce(&AutofillWebDataBackendImpl::RemoveLocalIban, + autofill_backend_, guid)); } void AutofillWebDataService::AddServerCvc(int64_t instrument_id,
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_service.h b/components/autofill/core/browser/webdata/autofill_webdata_service.h index ca0caff..f2697e8 100644 --- a/components/autofill/core/browser/webdata/autofill_webdata_service.h +++ b/components/autofill/core/browser/webdata/autofill_webdata_service.h
@@ -118,22 +118,22 @@ base::RepeatingCallback<void(const AutofillProfileDeepChange&)> change_cb); - // Schedules a task to add IBAN to the web database. - void AddIban(const Iban& iban); + // Schedules a task to add a local IBAN to the web database. + void AddLocalIban(const Iban& iban); // Initiates the request for local/server IBANs. The method // OnWebDataServiceRequestDone of |consumer| gets called when the request is // finished, with the IBAN included in the argument |result|. The consumer // owns the IBAN. - WebDataServiceBase::Handle GetIbans(WebDataServiceConsumer* consumer); + WebDataServiceBase::Handle GetLocalIbans(WebDataServiceConsumer* consumer); WebDataServiceBase::Handle GetServerIbans(WebDataServiceConsumer* consumer); - // Schedules a task to update iban in the web database. - void UpdateIban(const Iban& iban); + // Schedules a task to update a local IBAN in the web database. + void UpdateLocalIban(const Iban& iban); - // Schedules a task to remove an IBAN from the web database. - // |guid| is the identifier of the IBAN to remove. - void RemoveIban(const std::string& guid); + // Schedules a task to remove an existing local IBAN from the web database. + // `guid` is the identifier of the IBAN to remove. + void RemoveLocalIban(const std::string& guid); // Schedules a task to add credit card to the web database. void AddCreditCard(const CreditCard& credit_card);
diff --git a/components/commerce/core/discounts_storage.cc b/components/commerce/core/discounts_storage.cc index cb26c0b..97b7b6c0 100644 --- a/components/commerce/core/discounts_storage.cc +++ b/components/commerce/core/discounts_storage.cc
@@ -6,6 +6,7 @@ #include "base/check.h" #include "base/functional/callback.h" +#include "base/metrics/histogram_functions.h" #include "base/time/time.h" #include "components/commerce/core/commerce_types.h" #include "components/commerce/core/proto/discounts_db_content.pb.h" @@ -13,6 +14,9 @@ namespace commerce { +const char kDiscountsFetchResultHistogramName[] = + "Commerce.Discounts.FetchResult"; + DiscountsStorage::DiscountsStorage( SessionProtoStorage<DiscountsContent>* discounts_proto_db, history::HistoryService* history_service) @@ -95,15 +99,21 @@ return; } + int urls_found_in_db_number = 0; for (SessionProtoStorage<DiscountsContent>::KeyAndValue& kv : data) { if (std::find(urls_to_check.begin(), urls_to_check.end(), kv.first) != urls_to_check.end()) { + urls_found_in_db_number++; std::vector<DiscountInfo> infos = GetUnexpiredDiscountsFromProto(kv.second); if (infos.size() == 0) { DeleteDiscountsForUrl(kv.first); + base::UmaHistogramEnumeration(kDiscountsFetchResultHistogramName, + DiscountsFetchResult::kInvalidInfoInDb); } else { server_results[GURL(kv.first)] = infos; + base::UmaHistogramEnumeration(kDiscountsFetchResultHistogramName, + DiscountsFetchResult::kValidInfoInDb); // Update local database if expired discounts found. if ((int)(infos.size()) != kv.second.discounts().size()) { @@ -112,6 +122,13 @@ } } } + + int urls_not_found_number = urls_to_check.size() - urls_found_in_db_number; + for (int i = 0; i < urls_not_found_number; i++) { + base::UmaHistogramEnumeration(kDiscountsFetchResultHistogramName, + DiscountsFetchResult::kInfoNotFound); + } + std::move(callback).Run(std::move(server_results)); }
diff --git a/components/commerce/core/discounts_storage.h b/components/commerce/core/discounts_storage.h index 164017ba..6697e224 100644 --- a/components/commerce/core/discounts_storage.h +++ b/components/commerce/core/discounts_storage.h
@@ -26,6 +26,25 @@ using DiscountsKeyAndValues = std::vector<SessionProtoStorage<DiscountsContent>::KeyAndValue>; +extern const char kDiscountsFetchResultHistogramName[]; + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum class DiscountsFetchResult { + // We got info back from OptGuide. + kInfoFromOptGuide = 0, + // We found valid info in local db. This is only recorded when we don't get + // info back from OptGuide. + kValidInfoInDb = 1, + // We found invalid info in local db. This is only recorded when we don't get + // info back from OptGuide. + kInvalidInfoInDb = 2, + // We don't get info back from OptGuide and don't find any info in local db. + kInfoNotFound = 3, + + kMaxValue = kInfoNotFound +}; + class DiscountsStorage : public history::HistoryServiceObserver { public: explicit DiscountsStorage(
diff --git a/components/commerce/core/discounts_storage_unittest.cc b/components/commerce/core/discounts_storage_unittest.cc index a9e197d..4b265b2 100644 --- a/components/commerce/core/discounts_storage_unittest.cc +++ b/components/commerce/core/discounts_storage_unittest.cc
@@ -7,6 +7,7 @@ #include "base/check.h" #include "base/functional/callback.h" #include "base/run_loop.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/task_environment.h" #include "base/time/time.h" #include "components/commerce/core/commerce_types.h" @@ -234,6 +235,9 @@ InsertContent(kDiscountsUrlFromServer, ExpectedServerProto(), _)); EXPECT_CALL(*proto_db_, LoadAllEntries).Times(0); + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); + base::RunLoop run_loop; storage_->HandleServerDiscounts( std::vector<std::string>(), MockServerResults(), @@ -248,6 +252,8 @@ }, &run_loop)); run_loop.Run(); + + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); } TEST_F(DiscountsStorageTest, TestHandleServerDiscounts_FailToLoad) { @@ -260,6 +266,9 @@ EXPECT_CALL(*proto_db_, LoadAllEntries); } + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); + base::RunLoop run_loop; storage_->HandleServerDiscounts( std::vector<std::string>{kDiscountsUrlToCheckInDb, kDiscountsUrlInDb}, @@ -275,6 +284,8 @@ }, &run_loop)); run_loop.Run(); + + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); } TEST_F(DiscountsStorageTest, TestHandleServerDiscounts_AllDiscountsUnexpired) { @@ -288,6 +299,9 @@ EXPECT_CALL(*proto_db_, InsertContent).Times(0); } + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); + base::RunLoop run_loop; storage_->HandleServerDiscounts( std::vector<std::string>{kDiscountsUrlToCheckInDb, kDiscountsUrlInDb}, @@ -318,6 +332,10 @@ }, &run_loop)); run_loop.Run(); + + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 2); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 1, 1); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 3, 1); } TEST_F(DiscountsStorageTest, TestHandleServerDiscounts_AllDiscountsExpired) { @@ -331,6 +349,9 @@ EXPECT_CALL(*proto_db_, DeleteOneEntry(kDiscountsUrlInDb, _)); } + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); + base::RunLoop run_loop; storage_->HandleServerDiscounts( std::vector<std::string>{kDiscountsUrlToCheckInDb, kDiscountsUrlInDb}, @@ -346,6 +367,10 @@ }, &run_loop)); run_loop.Run(); + + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 2); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 2, 1); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 3, 1); } TEST_F(DiscountsStorageTest, TestHandleServerDiscounts_PartDiscountsExpired) { @@ -359,6 +384,9 @@ EXPECT_CALL(*proto_db_, InsertContent(kDiscountsUrlInDb, _, _)); } + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); + base::RunLoop run_loop; storage_->HandleServerDiscounts( std::vector<std::string>{kDiscountsUrlToCheckInDb, kDiscountsUrlInDb}, @@ -385,6 +413,10 @@ }, &run_loop)); run_loop.Run(); + + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 2); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 1, 1); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 3, 1); } TEST_F(DiscountsStorageTest, TestHandleServerDiscounts_NoDiscountsFound) { @@ -398,6 +430,9 @@ EXPECT_CALL(*proto_db_, InsertContent).Times(0); } + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); + base::RunLoop run_loop; storage_->HandleServerDiscounts( std::vector<std::string>{kDiscountsUrlToCheckInDb}, MockServerResults(), @@ -412,6 +447,9 @@ }, &run_loop)); run_loop.Run(); + + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 1); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 3, 1); } TEST_F(DiscountsStorageTest, TestOnURLsDeleted_DeleteAll) {
diff --git a/components/commerce/core/shopping_service.cc b/components/commerce/core/shopping_service.cc index 6920a4d..03e15624 100644 --- a/components/commerce/core/shopping_service.cc +++ b/components/commerce/core/shopping_service.cc
@@ -1340,6 +1340,8 @@ for (auto res : results) { if (res.second.size() > 0) { map.insert(res); + base::UmaHistogramEnumeration(kDiscountsFetchResultHistogramName, + DiscountsFetchResult::kInfoFromOptGuide); } else { urls_to_check_in_db.push_back(res.first.spec()); }
diff --git a/components/commerce/core/shopping_service_unittest.cc b/components/commerce/core/shopping_service_unittest.cc index 43f661d5..3bdcf7b 100644 --- a/components/commerce/core/shopping_service_unittest.cc +++ b/components/commerce/core/shopping_service_unittest.cc
@@ -5,6 +5,7 @@ #include "components/commerce/core/shopping_service.h" #include "base/functional/bind.h" #include "base/run_loop.h" +#include "base/test/metrics/histogram_tester.h" #include "base/uuid.h" #include "base/values.h" #include "components/bookmarks/browser/bookmark_model.h" @@ -1159,6 +1160,9 @@ std::vector<std::string>{kDiscountsUrl1}, _, _)); SetDiscountsStorageForTesting(std::move(storage)); + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 0); + base::RunLoop run_loop; shopping_service_->GetDiscountInfoForUrls( std::vector<GURL>{GURL(kDiscountsUrl1), GURL(kDiscountsUrl2)}, @@ -1190,6 +1194,9 @@ }, &run_loop)); run_loop.Run(); + + histogram_tester.ExpectTotalCount(kDiscountsFetchResultHistogramName, 1); + histogram_tester.ExpectBucketCount(kDiscountsFetchResultHistogramName, 0, 1); } TEST_P(ShoppingServiceTest, TestDiscountInfoResponse_InfoWithoutId) {
diff --git a/components/compose/BUILD.gn b/components/compose/BUILD.gn new file mode 100644 index 0000000..831beb3b --- /dev/null +++ b/components/compose/BUILD.gn
@@ -0,0 +1,10 @@ +# 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. +import("//build/buildflag_header.gni") +import("//components/compose/features.gni") + +buildflag_header("buildflags") { + header = "buildflags.h" + flags = [ "ENABLE_COMPOSE=$enable_compose" ] +}
diff --git a/components/compose/features.gni b/components/compose/features.gni new file mode 100644 index 0000000..a6a17d0e --- /dev/null +++ b/components/compose/features.gni
@@ -0,0 +1,8 @@ +# 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. + +declare_args() { + # Whether Compose is enabled in the build. + enable_compose = is_mac || is_win || is_linux || is_fuchsia +}
diff --git a/components/exo/wayland/serial_tracker.cc b/components/exo/wayland/serial_tracker.cc index d68f73b..c0a38551 100644 --- a/components/exo/wayland/serial_tracker.cc +++ b/components/exo/wayland/serial_tracker.cc
@@ -4,6 +4,8 @@ #include "components/exo/wayland/serial_tracker.h" +#include <sstream> + #include <wayland-server-core.h> namespace exo { @@ -95,5 +97,13 @@ key_serial_ = absl::nullopt; } +std::string SerialTracker::ToString() const { + std::ostringstream ss; + ss << "min=" << min_event_ << ", max=" << max_event_ + << ", pointer down=" << (pointer_down_serial_ ? *pointer_down_serial_ : 0) + << ", touch_down=" << (touch_down_serial_ ? *touch_down_serial_ : 0); + return ss.str(); +} + } // namespace wayland } // namespace exo
diff --git a/components/exo/wayland/serial_tracker.h b/components/exo/wayland/serial_tracker.h index ab04bc2..89c9583 100644 --- a/components/exo/wayland/serial_tracker.h +++ b/components/exo/wayland/serial_tracker.h
@@ -62,6 +62,8 @@ // never sent or is too old. absl::optional<EventType> GetEventType(uint32_t serial) const; + std::string ToString() const; + private: raw_ptr<struct wl_display, DanglingUntriaged | ExperimentalAsh> display_;
diff --git a/components/exo/wayland/wl_data_device_manager.cc b/components/exo/wayland/wl_data_device_manager.cc index 9689921..8aeb0cb 100644 --- a/components/exo/wayland/wl_data_device_manager.cc +++ b/components/exo/wayland/wl_data_device_manager.cc
@@ -314,19 +314,32 @@ LOG(ERROR) << "The serial passed to StartDrag does not exist."; return; } - if (event_type == wayland::SerialTracker::EventType::POINTER_BUTTON_DOWN && - serial_tracker_->GetPointerDownSerial() == serial) { + if (event_type == wayland::SerialTracker::EventType::POINTER_BUTTON_DOWN) { + if (serial_tracker_->GetPointerDownSerial() != serial) { + LOG(ERROR) + << "The serial passed to StartDrag for pointer does not match its " + "expected types. serial=" + << serial << ", " << serial_tracker_->ToString(); + return; + } DCHECK(data_device); data_device->StartDrag(source, origin, icon, ui::mojom::DragEventSource::kMouse); - } else if (event_type == wayland::SerialTracker::EventType::TOUCH_DOWN && - serial_tracker_->GetTouchDownSerial() == serial) { + } else if (event_type == wayland::SerialTracker::EventType::TOUCH_DOWN) { + if (serial_tracker_->GetTouchDownSerial() != serial) { + LOG(ERROR) + << "The serial passed to StartDrag for touch does not match its " + "expected types. serial=" + << serial << ", " << serial_tracker_->ToString(); + return; + } DCHECK(data_device); data_device->StartDrag(source, origin, icon, ui::mojom::DragEventSource::kTouch); } else { - LOG(ERROR) << "The serial passed to StartDrag does not match its " - "expected types."; + LOG(ERROR) << "Invalid event type for StartDrag:" << (int)*event_type + << ", serial=" << serial << ", " + << serial_tracker_->ToString(); } }
diff --git a/components/media_router/browser/BUILD.gn b/components/media_router/browser/BUILD.gn index 9e8d1e9..c7cbbc8 100644 --- a/components/media_router/browser/BUILD.gn +++ b/components/media_router/browser/BUILD.gn
@@ -66,6 +66,7 @@ "//components/media_router/common", "//components/media_router/common/mojom:media_router", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] if (is_android) { sources += [
diff --git a/components/media_router/common/BUILD.gn b/components/media_router/common/BUILD.gn index aab022a..2241640 100644 --- a/components/media_router/common/BUILD.gn +++ b/components/media_router/common/BUILD.gn
@@ -3,15 +3,6 @@ # found in the LICENSE file. static_library("common") { - public_deps = [ - "//base", - "//base:i18n", - "//media", - "//net", - "//third_party/icu", - "//url", - ] - sources = [ # media_sink_internal needs to be included with Android due to typemapping. # Ideally, Android shouldn't be the case since it does not use Mojo for @@ -32,12 +23,23 @@ "route_request_result.h", ] + public_deps = [ + "//base", + "//base:i18n", + "//media", + "//net", + "//third_party/icu", + "//url", + ] + deps = [ "mojom:media_route_provider_id", "mojom:route_request_result_code", "//third_party/blink/public:blink_headers", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] + if (!is_android) { sources += [ "discovery/media_sink_service_base.cc", @@ -59,6 +61,12 @@ static_library("test_support") { testonly = true + sources = [ + "test/mock_logger.cc", + "test/mock_logger.h", + "test/test_helper.cc", + "test/test_helper.h", + ] deps = [ "//base", "//base/test:test_support", @@ -66,12 +74,6 @@ "//components/media_router/common/mojom:media_route_provider_id", ] public_deps = [ ":common" ] - sources = [ - "test/mock_logger.cc", - "test/mock_logger.h", - "test/test_helper.cc", - "test/test_helper.h", - ] } source_set("unit_tests") {
diff --git a/components/media_router/common/providers/cast/certificate/BUILD.gn b/components/media_router/common/providers/cast/certificate/BUILD.gn index f90bbd1a..b509cd0 100644 --- a/components/media_router/common/providers/cast/certificate/BUILD.gn +++ b/components/media_router/common/providers/cast/certificate/BUILD.gn
@@ -20,6 +20,7 @@ "//base", "//net", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } source_set("certificate_roots") { @@ -28,6 +29,7 @@ "cast_root_ca_cert_der-inc.h", "eureka_root_ca_der-inc.h", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } static_library("certificate") { @@ -37,7 +39,10 @@ "cast_crl.cc", "cast_crl.h", ] - configs += [ ":developer_certificate_config" ] + configs += [ + ":developer_certificate_config", + "//build/config/compiler:wexit_time_destructors", + ] deps = [ ":certificate_roots", "//base", @@ -71,6 +76,7 @@ "//net", "//third_party/openscreen/src/cast/common:public", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } static_library("test_support") {
diff --git a/components/media_router/common/providers/cast/channel/BUILD.gn b/components/media_router/common/providers/cast/channel/BUILD.gn index 383e66a..ed5f6c7 100644 --- a/components/media_router/common/providers/cast/channel/BUILD.gn +++ b/components/media_router/common/providers/cast/channel/BUILD.gn
@@ -58,6 +58,7 @@ "//services/data_decoder/public/cpp", "//services/network/public/mojom", ] + configs += [ "//build/config/compiler:wexit_time_destructors" ] } static_library("test_support") {
diff --git a/components/messages/android/messages_feature.cc b/components/messages/android/messages_feature.cc index 1bcbd0a6..d903a9b 100644 --- a/components/messages/android/messages_feature.cc +++ b/components/messages/android/messages_feature.cc
@@ -53,7 +53,7 @@ BASE_FEATURE(kMessagesForAndroidStackingAnimation, "MessagesForAndroidStackingAnimation", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); bool IsAdsBlockedMessagesUiEnabled() { return base::FeatureList::IsEnabled(kMessagesForAndroidInfrastructure) &&
diff --git a/components/metrics/content/subprocess_metrics_provider.cc b/components/metrics/content/subprocess_metrics_provider.cc index 8ad1093..ab59d41f 100644 --- a/components/metrics/content/subprocess_metrics_provider.cc +++ b/components/metrics/content/subprocess_metrics_provider.cc
@@ -104,6 +104,14 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); CHECK(allocator); + // Pass a custom RangesManager so that we do not register the BucketRanges + // with the global StatisticsRecorder when creating histogram objects using + // the allocator's underlying data. This avoids unnecessary contention on the + // global StatisticsRecorder lock. + // Note: Since |allocator| may be merged from different threads concurrently, + // for example on the UI thread and on a background thread, we must use + // ThreadSafeRangesManager. + allocator->SetRangesManager(new base::ThreadSafeRangesManager()); // Insert the allocator into the internal map and verify that there was no // allocator with the same ID already. auto result = allocators_by_id_.emplace(
diff --git a/components/metrics/file_metrics_provider.cc b/components/metrics/file_metrics_provider.cc index 90cebfd..8a869d0 100644 --- a/components/metrics/file_metrics_provider.cc +++ b/components/metrics/file_metrics_provider.cc
@@ -548,9 +548,11 @@ std::move(memory_allocator)); // Pass a custom RangesManager so that we do not register the BucketRanges // with the global StatisticsRecorder when creating histogram objects using - // the allocator's underlying data. Otherwise, it could add unnecessary - // contention, and possibly a low amount of extra memory that will never be - // released. + // the allocator's underlying data. This avoids unnecessary contention on the + // global StatisticsRecorder lock. + // Note: Since RangesManager is not thread safe, this means that |allocator| + // must be iterated over one thread at a time (i.e., not concurrently). This + // is the case. source->allocator->SetRangesManager(new base::RangesManager()); // Check that an "independent" file has the necessary information present.
diff --git a/components/omnibox/browser/most_visited_sites_provider.cc b/components/omnibox/browser/most_visited_sites_provider.cc index 2cdb15a..0beabe5 100644 --- a/components/omnibox/browser/most_visited_sites_provider.cc +++ b/components/omnibox/browser/most_visited_sites_provider.cc
@@ -93,6 +93,9 @@ return false; } + size_t num_search_tiles = 0; + size_t num_url_tiles = 0; + if (base::FeatureList::IsEnabled( omnibox::kMostVisitedTilesHorizontalRenderGroup)) { auto* const url_service = client->GetTemplateURLService(); @@ -119,6 +122,9 @@ // Supply blanket SearchTermsArgs so we can also report SearchBoxStats. match.search_terms_args = std::make_unique<TemplateURLRef::SearchTermsArgs>(query); + num_search_tiles++; + } else { + num_url_tiles++; } matches.emplace_back(std::move(match)); --relevance; @@ -130,8 +136,6 @@ AutocompleteMatchType::TILE_NAVSUGGEST); match.suggest_tiles.reserve(container.size()); - size_t num_search_tiles = 0; - size_t num_url_tiles = 0; for (const auto& tile : container) { match.suggest_tiles.push_back({ @@ -147,11 +151,6 @@ } } - base::UmaHistogramExactLinear(kHistogramTileTypeCountSearch, - num_search_tiles, kMaxRecordedTileIndex); - base::UmaHistogramExactLinear(kHistogramTileTypeCountURL, num_url_tiles, - kMaxRecordedTileIndex); - matches.push_back(std::move(match)); } else { int relevance = 600; @@ -162,6 +161,12 @@ --relevance; } } + + base::UmaHistogramExactLinear(kHistogramTileTypeCountSearch, num_search_tiles, + kMaxRecordedTileIndex); + base::UmaHistogramExactLinear(kHistogramTileTypeCountURL, num_url_tiles, + kMaxRecordedTileIndex); + return true; } } // namespace
diff --git a/components/optimization_guide/core/optimization_guide_model_executor.h b/components/optimization_guide/core/optimization_guide_model_executor.h index f126eed..a57ecfa 100644 --- a/components/optimization_guide/core/optimization_guide_model_executor.h +++ b/components/optimization_guide/core/optimization_guide_model_executor.h
@@ -24,9 +24,10 @@ public: // Executes the model for `feature` with `request_metadata` and invokes the // `callback` with the result. - void ExecuteModel(proto::ModelExecutionFeature feature, - const google::protobuf::MessageLite& request_metadata, - OptimizationGuideModelExecutionResultCallback callback); + virtual void ExecuteModel( + proto::ModelExecutionFeature feature, + const google::protobuf::MessageLite& request_metadata, + OptimizationGuideModelExecutionResultCallback callback) = 0; }; } // namespace optimization_guide
diff --git a/components/optimization_guide/proto/BUILD.gn b/components/optimization_guide/proto/BUILD.gn index ed44bc14..e039197a 100644 --- a/components/optimization_guide/proto/BUILD.gn +++ b/components/optimization_guide/proto/BUILD.gn
@@ -27,6 +27,7 @@ "push_notification.proto", "salient_image_metadata.proto", "visual_search_model_metadata.proto", + "wallpaper_search.proto", ] }
diff --git a/components/optimization_guide/proto/wallpaper_search.proto b/components/optimization_guide/proto/wallpaper_search.proto new file mode 100644 index 0000000..521576fba --- /dev/null +++ b/components/optimization_guide/proto/wallpaper_search.proto
@@ -0,0 +1,16 @@ +// 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. + +syntax = "proto2"; +option optimize_for = LITE_RUNTIME; + +package chrome_intelligence_modelexecution_proto; + +message WallpaperSearchRequest { + required string query = 1; +} + +message WallpaperSearchResponse { + repeated bytes images = 1; +}
diff --git a/components/password_manager/core/browser/affiliation/affiliation_utils.cc b/components/password_manager/core/browser/affiliation/affiliation_utils.cc index 20e32db..9f2ef91 100644 --- a/components/password_manager/core/browser/affiliation/affiliation_utils.cc +++ b/components/password_manager/core/browser/affiliation/affiliation_utils.cc
@@ -103,8 +103,7 @@ CanonicalizeBase64Padding(&base64_encoded_hash) && ContainsOnlyAlphanumericAnd(base64_encoded_hash, kBase64NonAlphanumericChars)) { - canonical_output->Append(base64_encoded_hash.data(), - base64_encoded_hash.size()); + canonical_output->Append(base64_encoded_hash); canonical_output->push_back('@'); return true; } @@ -127,7 +126,7 @@ if (!package_name.empty() && ContainsOnlyAlphanumericAnd(package_name, kPackageNameNonAlphanumericChars)) { - canonical_output->Append(package_name.data(), package_name.size()); + canonical_output->Append(package_name); return true; } return false;
diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/components/privacy_sandbox/privacy_sandbox_settings_impl.cc index 510f0e6..cce1f2a 100644 --- a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc +++ b/components/privacy_sandbox/privacy_sandbox_settings_impl.cc
@@ -870,6 +870,9 @@ DCHECK(pref_name == prefs::kPrivacySandboxM1TopicsEnabled || pref_name == prefs::kPrivacySandboxM1FledgeEnabled || pref_name == prefs::kPrivacySandboxM1AdMeasurementEnabled); + if (features::kCookieDeprecationTestingDisableAdsAPIs.Get()) { + return Status::kBlockedByTPCExperiment; + } bool should_ignore_restriction = pref_name == prefs::kPrivacySandboxM1AdMeasurementEnabled &&
diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.h b/components/privacy_sandbox/privacy_sandbox_settings_impl.h index d8ac959f..911b492 100644 --- a/components/privacy_sandbox/privacy_sandbox_settings_impl.h +++ b/components/privacy_sandbox/privacy_sandbox_settings_impl.h
@@ -152,7 +152,8 @@ kAttestationsDownloadedNotYetLoaded = 8, kAttestationsFileCorrupt = 9, kJoiningTopFrameBlocked = 10, - kMaxValue = kJoiningTopFrameBlocked, + kBlockedByTPCExperiment = 11, + kMaxValue = kBlockedByTPCExperiment, }; static bool IsAllowed(Status status);
diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl_unittest.cc b/components/privacy_sandbox/privacy_sandbox_settings_impl_unittest.cc index dc3526b..8378e35f 100644 --- a/components/privacy_sandbox/privacy_sandbox_settings_impl_unittest.cc +++ b/components/privacy_sandbox/privacy_sandbox_settings_impl_unittest.cc
@@ -2568,4 +2568,125 @@ } } +// TODO(trishalfonso@google.com): Make these parameterized tests. +class PrivacySandboxTPCDExperimentTest : public PrivacySandboxSettingsM1Test { + public: + PrivacySandboxTPCDExperimentTest() = default; + + void InitializePrefsBeforeStart() override { + prefs()->SetUserPref(prefs::kPrivacySandboxM1TopicsEnabled, + std::make_unique<base::Value>(::base::TimeToValue( + base::Time::FromTimeT(12345)))); + } + + void InitializeFeaturesBeforeStart() override { + feature_list_.InitAndEnableFeature( + privacy_sandbox::kPrivacySandboxSettings4); + cookie_deprecation_feature_list_.Reset(); + } + + protected: + base::test::ScopedFeatureList cookie_deprecation_feature_list_; +}; + +// Topics blocked by experiment, when privacy sandbox settings would otherwise +// disallow it. +TEST_F(PrivacySandboxTPCDExperimentTest, + ExperimentDisablesAdsAPIsTrueTopicsDisabled) { + cookie_deprecation_feature_list_.InitAndEnableFeatureWithParameters( + features::kCookieDeprecationFacilitatedTesting, + {{features::kCookieDeprecationTestingDisableAdsAPIsName, "true"}}); + + RunTestCase( + TestState{{kM1TopicsEnabledUserPrefValue, false}, + {kHasAppropriateTopicsConsent, false}}, + TestInput{ + {kTopFrameOrigin, url::Origin::Create(GURL("https://top-frame.com"))}, + {kTopicsURL, GURL("https://embedded.com")}, + }, + TestOutput{ + {MultipleOutputKeys{kIsTopicsAllowed, kIsTopicsAllowedForContext}, + false}, + {MultipleOutputKeys{ + kIsTopicsAllowedMetric, + kIsTopicsAllowedForContextMetric, + }, + static_cast<int>(Status::kBlockedByTPCExperiment)}}); +} + +// Topics blocked by experiment, when privacy sandbox settings would otherwise +// allow it. +TEST_F(PrivacySandboxTPCDExperimentTest, + ExperimentDisablesAdsAPIsTopicsEnabled) { + cookie_deprecation_feature_list_.InitAndEnableFeatureWithParameters( + features::kCookieDeprecationFacilitatedTesting, + {{features::kCookieDeprecationTestingDisableAdsAPIsName, "true"}}); + + RunTestCase( + TestState{{kM1TopicsEnabledUserPrefValue, true}, + {kHasAppropriateTopicsConsent, true}}, + TestInput{ + {kTopFrameOrigin, url::Origin::Create(GURL("https://top-frame.com"))}, + {kTopicsURL, GURL("https://embedded.com")}, + }, + TestOutput{ + {MultipleOutputKeys{kIsTopicsAllowed, kIsTopicsAllowedForContext}, + false}, + {MultipleOutputKeys{ + kIsTopicsAllowedMetric, + kIsTopicsAllowedForContextMetric, + }, + static_cast<int>(Status::kBlockedByTPCExperiment)}}); +} + +// Topics not blocked by experiment, when privacy sandbox settings would +// otherwise disallow it. +TEST_F(PrivacySandboxTPCDExperimentTest, + ExperimentDisablesAdsAPIsDoesNothingTopicsDisabled) { + cookie_deprecation_feature_list_.InitAndEnableFeatureWithParameters( + features::kCookieDeprecationFacilitatedTesting, + {{features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}}); + + RunTestCase( + TestState{{kM1TopicsEnabledUserPrefValue, false}, + {kHasAppropriateTopicsConsent, false}}, + TestInput{ + {kTopFrameOrigin, url::Origin::Create(GURL("https://top-frame.com"))}, + {kTopicsURL, GURL("https://embedded.com")}, + }, + TestOutput{ + {MultipleOutputKeys{kIsTopicsAllowed, kIsTopicsAllowedForContext}, + false}, + {MultipleOutputKeys{ + kIsTopicsAllowedMetric, + kIsTopicsAllowedForContextMetric, + }, + static_cast<int>(Status::kApisDisabled)}}); +} + +// Topics not blocked by experiment, when privacy sandbox settings would +// otherwise allow it. +TEST_F(PrivacySandboxTPCDExperimentTest, + ExperimentDisablesAdsAPIsDoesNothingTopicsEnabled) { + cookie_deprecation_feature_list_.InitAndEnableFeatureWithParameters( + features::kCookieDeprecationFacilitatedTesting, + {{features::kCookieDeprecationTestingDisableAdsAPIsName, "false"}}); + + RunTestCase( + TestState{{kM1TopicsEnabledUserPrefValue, true}, + {kHasAppropriateTopicsConsent, true}}, + TestInput{ + {kTopFrameOrigin, url::Origin::Create(GURL("https://top-frame.com"))}, + {kTopicsURL, GURL("https://embedded.com")}, + }, + TestOutput{ + {MultipleOutputKeys{kIsTopicsAllowed, kIsTopicsAllowedForContext}, + true}, + {MultipleOutputKeys{ + kIsTopicsAllowedMetric, + kIsTopicsAllowedForContextMetric, + }, + static_cast<int>(Status::kAllowed)}}); +} + } // namespace privacy_sandbox
diff --git a/components/search/ntp_features.cc b/components/search/ntp_features.cc index 00e2d70..ed1ada3 100644 --- a/components/search/ntp_features.cc +++ b/components/search/ntp_features.cc
@@ -419,8 +419,6 @@ const char kNtpHistoryClustersModuleMaxClustersParam[] = "NtpHistoryClustersModuleMaxClustersParam"; const char kNtpRealboxWidthBehaviorParam[] = "NtpRealboxWidthBehaviorParam"; -const char kCustomizeChromeWallpaperSearchResolutionParam[] = - "CustomizeChromeWallpaperSearchResolutionParam"; base::TimeDelta GetModulesLoadTimeout() { std::string param_value = base::GetFieldTrialParamValueByFeature(
diff --git a/components/search/ntp_features.h b/components/search/ntp_features.h index 1bf589b57..e2be12f 100644 --- a/components/search/ntp_features.h +++ b/components/search/ntp_features.h
@@ -177,7 +177,6 @@ // History Clusters Service to return. extern const char kNtpHistoryClustersModuleMaxClustersParam[]; extern const char kNtpRealboxWidthBehaviorParam[]; -extern const char kCustomizeChromeWallpaperSearchResolutionParam[]; // Returns the timeout after which the load of a module should be aborted. base::TimeDelta GetModulesLoadTimeout();
diff --git a/components/services/storage/privileged/mojom/indexed_db_control.mojom b/components/services/storage/privileged/mojom/indexed_db_control.mojom index abc4851..b2509e38 100644 --- a/components/services/storage/privileged/mojom/indexed_db_control.mojom +++ b/components/services/storage/privileged/mojom/indexed_db_control.mojom
@@ -50,16 +50,9 @@ // implementation will eventually live in the storage service which may run // out-of-process. interface IndexedDBControl { - // Binds an IDBFactory to the given `storage_key` and ids that identify - // the `RenderFrameHost` for the default bucket. + // Binds an IDBFactory for the given bucket. If the bucket locator refers to + // the default bucket, its ID may be invalid. BindIndexedDB( - blink.mojom.StorageKey storage_key, - pending_associated_remote<storage.mojom.IndexedDBClientStateChecker> - client_state_checker_remote, - pending_receiver<blink.mojom.IDBFactory> receiver); - - // Binds an IDBFactory for the given bucket. - BindIndexedDBForBucket( storage.mojom.BucketLocator bucket_locator, pending_associated_remote<storage.mojom.IndexedDBClientStateChecker> client_state_checker_remote,
diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc index d194e58..19403c0 100644 --- a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc +++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc
@@ -379,9 +379,8 @@ // A character may be encoded into a maximum of 4 characters. constexpr int kEncodedLength = kTruncatedLength * 4; url::RawCanonOutputT<char, kEncodedLength> encoded_data; - url::EncodeURIComponent(data.c_str(), data.size(), &encoded_data); - results_[it->second] = - std::string(encoded_data.data(), encoded_data.length()); + url::EncodeURIComponent(data, &encoded_data); + results_[it->second] = std::string(encoded_data.view()); // Clean up tracking of this fetcher. The rest will be cleaned up after // the timer expires in CleanupTransientState().
diff --git a/components/update_client/background_downloader_win.cc b/components/update_client/background_downloader_win.cc index 2bf6109..37aaca5e 100644 --- a/components/update_client/background_downloader_win.cc +++ b/components/update_client/background_downloader_win.cc
@@ -124,8 +124,7 @@ const int kMinimumRetryDelayMin = 1; // How long to wait for stuck jobs. Stuck jobs could be queued for too long, -// have trouble connecting, could be suspended for any reason, or they have -// encountered some transient error. +// have trouble connecting, or could be suspended for any reason. const int kJobStuckTimeoutMin = 15; // How long BITS waits before giving up on a job that could not be completed @@ -675,13 +674,6 @@ // Called when the job has encountered a transient error, such as a // network disconnect, a server error, or some other recoverable error. bool BackgroundDownloader::OnStateTransientError() { - // If the job appears to be stuck, handle the transient error as if - // it were a final error. This causes the job to be cancelled and a specific - // error be returned, if the error was available. - if (IsStuck()) { - return OnStateError(); - } - // Don't retry at all if the transient error was a 5xx. HRESULT error_code = S_OK; HRESULT hr = GetJobError(job_, &error_code);
diff --git a/content/browser/aggregation_service/aggregatable_report.cc b/content/browser/aggregation_service/aggregatable_report.cc index 3710241..c47b0640 100644 --- a/content/browser/aggregation_service/aggregatable_report.cc +++ b/content/browser/aggregation_service/aggregatable_report.cc
@@ -60,14 +60,6 @@ constexpr char kHistogramValue[] = "histogram"; constexpr char kOperationKey[] = "operation"; -GURL GetProcessingUrl(const url::Origin& origin) { - GURL::Replacements replacements; - static constexpr char kEndpointPath[] = - ".well-known/aggregation-service/v1/public-keys"; - replacements.SetPathStr(kEndpointPath); - return origin.GetURL().ReplaceComponents(replacements); -} - std::vector<GURL> GetDefaultProcessingUrls( blink::mojom::AggregationServiceMode aggregation_mode, const absl::optional<url::Origin>& aggregation_coordinator_origin) { @@ -76,14 +68,15 @@ if (base::FeatureList::IsEnabled( aggregation_service::kAggregationServiceMultipleCloudProviders)) { if (!aggregation_coordinator_origin.has_value()) { - return {GetProcessingUrl( + return {GetAggregationServiceProcessingUrl( ::aggregation_service::GetDefaultAggregationCoordinatorOrigin())}; } if (!::aggregation_service::IsAggregationCoordinatorOriginAllowed( *aggregation_coordinator_origin)) { return {}; } - return {GetProcessingUrl(*aggregation_coordinator_origin)}; + return {GetAggregationServiceProcessingUrl( + *aggregation_coordinator_origin)}; } else { return {GURL( kPrivacySandboxAggregationServiceTrustedServerUrlAwsParam.Get())}; @@ -515,6 +508,14 @@ } // namespace +GURL GetAggregationServiceProcessingUrl(const url::Origin& origin) { + GURL::Replacements replacements; + static constexpr char kEndpointPath[] = + ".well-known/aggregation-service/v1/public-keys"; + replacements.SetPathStr(kEndpointPath); + return origin.GetURL().ReplaceComponents(replacements); +} + AggregationServicePayloadContents::AggregationServicePayloadContents( Operation operation, std::vector<blink::mojom::AggregatableReportHistogramContribution>
diff --git a/content/browser/aggregation_service/aggregatable_report.h b/content/browser/aggregation_service/aggregatable_report.h index 27f9fd7c..0b98b3cb2a 100644 --- a/content/browser/aggregation_service/aggregatable_report.h +++ b/content/browser/aggregation_service/aggregatable_report.h
@@ -393,6 +393,8 @@ int failed_send_attempts_ = 0; }; +CONTENT_EXPORT GURL GetAggregationServiceProcessingUrl(const url::Origin&); + } // namespace content #endif // CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATABLE_REPORT_H_
diff --git a/content/browser/aggregation_service/aggregatable_report_unittest.cc b/content/browser/aggregation_service/aggregatable_report_unittest.cc index 20587a58..b06ba89bb 100644 --- a/content/browser/aggregation_service/aggregatable_report_unittest.cc +++ b/content/browser/aggregation_service/aggregatable_report_unittest.cc
@@ -196,11 +196,22 @@ public: void SetUp() override { if (GetParam()) { - scoped_feature_list_.InitAndEnableFeature( - kPrivacySandboxAggregationServiceReportPadding); + scoped_feature_list_.InitWithFeaturesAndParameters( + /*enabled_features=*/{{kPrivacySandboxAggregationServiceReportPadding, + {}}, + {::aggregation_service:: + kAggregationServiceMultipleCloudProviders, + {{"aws_cloud", "https://aws.example.test"}, + {"gcp_cloud", "https://gcp.example.test"}}}}, + /*disabled_features=*/{}); } else { - scoped_feature_list_.InitAndDisableFeature( - kPrivacySandboxAggregationServiceReportPadding); + scoped_feature_list_.InitWithFeaturesAndParameters( + /*enabled_features=*/{{::aggregation_service:: + kAggregationServiceMultipleCloudProviders, + {{"aws_cloud", "https://aws.example.test"}, + {"gcp_cloud", "https://gcp.example.test"}}}}, + /*disabled_features=*/{ + kPrivacySandboxAggregationServiceReportPadding}); } } @@ -565,6 +576,7 @@ const char kExpectedJsonString[] = R"({)" + R"("aggregation_coordinator_origin":"https://aws.example.test",)" R"("aggregation_service_payloads":[)" R"({"key_id":"key_1","payload":"ABCD1234"})" R"(],)" @@ -592,6 +604,7 @@ const char kExpectedJsonString[] = R"({)" + R"("aggregation_coordinator_origin":"https://aws.example.test",)" R"("aggregation_service_payloads":[)" R"({"key_id":"key_1","payload":"ABCD1234"},)" R"({"key_id":"key_2","payload":"EFGH5678"})" @@ -616,14 +629,16 @@ std::string report_json_string; base::JSONWriter::Write(base::Value(report.GetAsJson()), &report_json_string); - const char kExpectedJsonString[] = R"({)" - R"("aggregation_service_payloads":[{)" - R"("debug_cleartext_payload":"EFGH5678",)" - R"("key_id":"key_1",)" - R"("payload":"ABCD1234")" - R"(}],)" - R"("shared_info":"example_shared_info")" - R"(})"; + const char kExpectedJsonString[] = + R"({)" + R"("aggregation_coordinator_origin":"https://aws.example.test",)" + R"("aggregation_service_payloads":[{)" + R"("debug_cleartext_payload":"EFGH5678",)" + R"("key_id":"key_1",)" + R"("payload":"ABCD1234")" + R"(}],)" + R"("shared_info":"example_shared_info")" + R"(})"; EXPECT_EQ(report_json_string, kExpectedJsonString); } @@ -640,15 +655,17 @@ std::string report_json_string; base::JSONWriter::Write(base::Value(report.GetAsJson()), &report_json_string); - const char kExpectedJsonString[] = R"({)" - R"("aggregation_service_payloads":[{)" - R"("debug_cleartext_payload":"EFGH5678",)" - R"("key_id":"key_1",)" - R"("payload":"ABCD1234")" - R"(}],)" - R"("debug_key":"1234",)" - R"("shared_info":"example_shared_info")" - R"(})"; + const char kExpectedJsonString[] = + R"({)" + R"("aggregation_coordinator_origin":"https://aws.example.test",)" + R"("aggregation_service_payloads":[{)" + R"("debug_cleartext_payload":"EFGH5678",)" + R"("key_id":"key_1",)" + R"("payload":"ABCD1234")" + R"(}],)" + R"("debug_key":"1234",)" + R"("shared_info":"example_shared_info")" + R"(})"; EXPECT_EQ(report_json_string, kExpectedJsonString); } @@ -667,16 +684,18 @@ std::string report_json_string; base::JSONWriter::Write(base::Value(report.GetAsJson()), &report_json_string); - const char kExpectedJsonString[] = R"({)" - R"("":"",)" - R"("additional_key":"example_value",)" - R"("aggregation_service_payloads":[{)" - R"("key_id":"key_1",)" - R"("payload":"ABCD1234")" - R"(}],)" - R"("second":"field",)" - R"("shared_info":"example_shared_info")" - R"(})"; + const char kExpectedJsonString[] = + R"({)" + R"("":"",)" + R"("additional_key":"example_value",)" + R"("aggregation_coordinator_origin":"https://aws.example.test",)" + R"("aggregation_service_payloads":[{)" + R"("key_id":"key_1",)" + R"("payload":"ABCD1234")" + R"(}],)" + R"("second":"field",)" + R"("shared_info":"example_shared_info")" + R"(})"; EXPECT_EQ(report_json_string, kExpectedJsonString); } @@ -889,9 +908,11 @@ std::string report_json_string; base::JSONWriter::Write(base::Value(report.GetAsJson()), &report_json_string); - const char kExpectedJsonString[] = R"({)" - R"("shared_info":"example_shared_info")" - R"(})"; + const char kExpectedJsonString[] = + R"({)" + R"("aggregation_coordinator_origin":"https://aws.example.test",)" + R"("shared_info":"example_shared_info")" + R"(})"; EXPECT_EQ(report_json_string, kExpectedJsonString); } @@ -1033,17 +1054,13 @@ aggregation_service::CreateExampleRequest(); EXPECT_THAT( request.processing_urls(), - ::testing::ElementsAre(GURL( - kPrivacySandboxAggregationServiceTrustedServerUrlAwsParam.Get()))); + ::testing::ElementsAre( + GetAggregationServiceProcessingUrl(url::Origin::Create( + GURL(::aggregation_service::kAggregationServiceCoordinatorAwsCloud + .Get()))))); } TEST_P(AggregatableReportTest, AggregationCoordinator_ProcessingUrlSet) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters( - ::aggregation_service::kAggregationServiceMultipleCloudProviders, - {{"aws_cloud", "https://aws.example.test"}, - {"gcp_cloud", "https://gcp.example.test"}}); - const struct { absl::optional<url::Origin> aggregation_coordinator_origin; std::vector<GURL> expected_urls;
diff --git a/content/browser/attribution_reporting/aggregatable_attribution_utils_unittest.cc b/content/browser/attribution_reporting/aggregatable_attribution_utils_unittest.cc index 5c0f40e..706a71d 100644 --- a/content/browser/attribution_reporting/aggregatable_attribution_utils_unittest.cc +++ b/content/browser/attribution_reporting/aggregatable_attribution_utils_unittest.cc
@@ -13,6 +13,7 @@ #include "base/test/metrics/histogram_tester.h" #include "base/time/time.h" #include "base/values.h" +#include "components/aggregation_service/features.h" #include "components/attribution_reporting/aggregatable_trigger_data.h" #include "components/attribution_reporting/aggregatable_values.h" #include "components/attribution_reporting/aggregation_keys.h" @@ -188,8 +189,8 @@ } TEST(AggregatableAttributionUtilsTest, AggregationCoordinatorSet) { - auto coordinator_origin = - attribution_reporting::SuitableOrigin::Deserialize("https://a.test"); + auto coordinator_origin = attribution_reporting::SuitableOrigin::Deserialize( + ::aggregation_service::kAggregationServiceCoordinatorAwsCloud.Get()); AttributionReport report = ReportBuilder(AttributionInfoBuilder().Build(), SourceBuilder().BuildStored())
diff --git a/content/browser/attribution_reporting/attribution_aggregatable_report_golden_unittest.cc b/content/browser/attribution_reporting/attribution_aggregatable_report_golden_unittest.cc index e325dda9..3015f20 100644 --- a/content/browser/attribution_reporting/attribution_aggregatable_report_golden_unittest.cc +++ b/content/browser/attribution_reporting/attribution_aggregatable_report_golden_unittest.cc
@@ -21,7 +21,9 @@ #include "base/test/gmock_expected_support.h" #include "base/test/values_test_util.h" #include "base/time/time.h" +#include "components/aggregation_service/features.h" #include "components/attribution_reporting/source_registration_time_config.mojom.h" +#include "content/browser/aggregation_service/aggregatable_report.h" #include "content/browser/aggregation_service/aggregation_service.h" #include "content/browser/aggregation_service/aggregation_service_features.h" #include "content/browser/aggregation_service/aggregation_service_impl.h" @@ -40,6 +42,7 @@ #include "third_party/abseil-cpp/absl/types/variant.h" #include "third_party/boringssl/src/include/openssl/hpke.h" #include "url/gurl.h" +#include "url/origin.h" namespace content { namespace { @@ -78,7 +81,9 @@ ASSERT_EQ(keyset.keys.size(), 1u); aggregation_service().SetPublicKeysForTesting( - GURL(kPrivacySandboxAggregationServiceTrustedServerUrlAwsParam.Get()), + GetAggregationServiceProcessingUrl(url::Origin::Create( + GURL(::aggregation_service::kAggregationServiceCoordinatorAwsCloud + .Get()))), std::move(keyset)); absl::optional<std::vector<uint8_t>> private_key =
diff --git a/content/browser/attribution_reporting/attribution_interop_runner.cc b/content/browser/attribution_reporting/attribution_interop_runner.cc index 2c89618..794a653c 100644 --- a/content/browser/attribution_reporting/attribution_interop_runner.cc +++ b/content/browser/attribution_reporting/attribution_interop_runner.cc
@@ -33,9 +33,11 @@ #include "base/types/expected.h" #include "base/types/expected_macros.h" #include "base/values.h" +#include "components/aggregation_service/features.h" #include "components/attribution_reporting/parsing_utils.h" #include "components/attribution_reporting/source_registration.h" #include "components/attribution_reporting/trigger_registration.h" +#include "content/browser/aggregation_service/aggregatable_report.h" #include "content/browser/aggregation_service/aggregation_service_features.h" #include "content/browser/aggregation_service/aggregation_service_impl.h" #include "content/browser/aggregation_service/aggregation_service_test_utils.h" @@ -63,6 +65,7 @@ #include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/abseil-cpp/absl/types/variant.h" #include "url/gurl.h" +#include "url/origin.h" namespace content { @@ -464,7 +467,9 @@ static_cast<AggregationServiceImpl*>( storage_partition->GetAggregationService()) ->SetPublicKeysForTesting( - GURL(kPrivacySandboxAggregationServiceTrustedServerUrlAwsParam.Get()), + GetAggregationServiceProcessingUrl(url::Origin::Create( + GURL(::aggregation_service::kAggregationServiceCoordinatorAwsCloud + .Get()))), PublicKeyset({aggregation_service::GenerateKey().public_key}, /*fetch_time=*/base::Time::Now(), /*expiry_time=*/base::Time::Max()));
diff --git a/content/browser/attribution_reporting/attribution_report_unittest.cc b/content/browser/attribution_reporting/attribution_report_unittest.cc index 1f8271b..904ea167 100644 --- a/content/browser/attribution_reporting/attribution_report_unittest.cc +++ b/content/browser/attribution_reporting/attribution_report_unittest.cc
@@ -9,9 +9,11 @@ #include <string> #include "base/containers/flat_set.h" +#include "base/test/scoped_feature_list.h" #include "base/test/values_test_util.h" #include "base/time/time.h" #include "base/values.h" +#include "components/aggregation_service/features.h" #include "components/attribution_reporting/source_type.mojom.h" #include "content/browser/aggregation_service/aggregatable_report.h" #include "content/browser/aggregation_service/aggregation_service_test_utils.h" @@ -262,7 +264,13 @@ } TEST(AttributionReportTest, NullAggregatableReport) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeatureWithParameters( + ::aggregation_service::kAggregationServiceMultipleCloudProviders, + {{"aws_cloud", "https://aws.example.test"}}); + base::Value::Dict expected = base::test::ParseJsonDict(R"json({ + "aggregation_coordinator_origin":"https://aws.example.test", "aggregation_service_payloads": [{ "key_id": "key", "payload": "ABCD1234"
diff --git a/content/browser/buckets/bucket_host.cc b/content/browser/buckets/bucket_host.cc index 0c83bd5..46550019 100644 --- a/content/browser/buckets/bucket_host.cc +++ b/content/browser/buckets/bucket_host.cc
@@ -176,7 +176,7 @@ bucket_manager_host_->GetStoragePartition() ->GetIndexedDBControl() - .BindIndexedDBForBucket( + .BindIndexedDB( bucket_info_.ToBucketLocator(), IndexedDBClientStateCheckerFactory::InitializePendingAssociatedRemote( rfh_id),
diff --git a/content/browser/indexed_db/indexed_db_context_impl.cc b/content/browser/indexed_db/indexed_db_context_impl.cc index 0b3642d1..cec38c2 100644 --- a/content/browser/indexed_db/indexed_db_context_impl.cc +++ b/content/browser/indexed_db/indexed_db_context_impl.cc
@@ -180,30 +180,25 @@ } void IndexedDBContextImpl::BindIndexedDB( - const blink::StorageKey& storage_key, - mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> - client_state_checker_remote, - mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) { - quota_manager_proxy()->UpdateOrCreateBucket( - storage::BucketInitParams::ForDefaultBucket(storage_key), - idb_task_runner_, - base::BindOnce( - &IndexedDBContextImpl::BindIndexedDBImpl, weak_factory_.GetWeakPtr(), - std::move(client_state_checker_remote), std::move(receiver))); -} - -void IndexedDBContextImpl::BindIndexedDBForBucket( const storage::BucketLocator& bucket_locator, mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> client_state_checker_remote, mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) { - // Query the database to make sure the bucket still exists. + auto on_got_bucket = base::BindOnce( + &IndexedDBContextImpl::BindIndexedDBImpl, weak_factory_.GetWeakPtr(), + std::move(client_state_checker_remote), std::move(receiver)); - quota_manager_proxy()->GetBucketById( - bucket_locator.id, idb_task_runner_, - base::BindOnce( - &IndexedDBContextImpl::BindIndexedDBImpl, weak_factory_.GetWeakPtr(), - std::move(client_state_checker_remote), std::move(receiver))); + if (bucket_locator.is_default) { + // If it's for a default bucket, `bucket_locator` will be a placeholder + // without an ID, meaning the bucket still needs to be created. + quota_manager_proxy()->UpdateOrCreateBucket( + storage::BucketInitParams::ForDefaultBucket(bucket_locator.storage_key), + idb_task_runner_, std::move(on_got_bucket)); + } else { + // Query the database to make sure the bucket still exists. + quota_manager_proxy()->GetBucketById(bucket_locator.id, idb_task_runner_, + std::move(on_got_bucket)); + } } void IndexedDBContextImpl::BindIndexedDBImpl(
diff --git a/content/browser/indexed_db/indexed_db_context_impl.h b/content/browser/indexed_db/indexed_db_context_impl.h index e0012d652..520094ba 100644 --- a/content/browser/indexed_db/indexed_db_context_impl.h +++ b/content/browser/indexed_db/indexed_db_context_impl.h
@@ -82,11 +82,6 @@ // mojom::IndexedDBControl implementation: void BindIndexedDB( - const blink::StorageKey& storage_key, - mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> - client_state_checker_remote, - mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) override; - void BindIndexedDBForBucket( const storage::BucketLocator& bucket_locator, mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> client_state_checker_remote,
diff --git a/content/browser/indexed_db/indexed_db_context_unittest.cc b/content/browser/indexed_db/indexed_db_context_unittest.cc index c496533c..b1fbb59 100644 --- a/content/browser/indexed_db/indexed_db_context_unittest.cc +++ b/content/browser/indexed_db/indexed_db_context_unittest.cc
@@ -104,7 +104,7 @@ mojo::AssociatedReceiver<storage::mojom::IndexedDBClientStateChecker> example_checker_receiver(&example_checker); indexed_db_context_->BindIndexedDB( - example_storage_key_, + storage::BucketLocator::ForDefaultBucket(example_storage_key_), example_checker_receiver.BindNewEndpointAndPassDedicatedRemote(), example_remote.BindNewPipeAndPassReceiver()); @@ -112,7 +112,7 @@ mojo::AssociatedReceiver<storage::mojom::IndexedDBClientStateChecker> google_checker_receiver(&example_checker); indexed_db_context_->BindIndexedDB( - google_storage_key_, + storage::BucketLocator::ForDefaultBucket(google_storage_key_), google_checker_receiver.BindNewEndpointAndPassDedicatedRemote(), google_remote.BindNewPipeAndPassReceiver()); @@ -160,7 +160,7 @@ mojo::AssociatedReceiver<storage::mojom::IndexedDBClientStateChecker> example_checker_receiver(&example_checker); indexed_db_context_->BindIndexedDB( - example_storage_key_, + storage::BucketLocator::ForDefaultBucket(example_storage_key_), example_checker_receiver.BindNewEndpointAndPassDedicatedRemote(), example_remote.BindNewPipeAndPassReceiver());
diff --git a/content/browser/indexed_db/indexed_db_control_wrapper.cc b/content/browser/indexed_db/indexed_db_control_wrapper.cc index a54b178..9e10452 100644 --- a/content/browser/indexed_db/indexed_db_control_wrapper.cc +++ b/content/browser/indexed_db/indexed_db_control_wrapper.cc
@@ -44,22 +44,6 @@ } void IndexedDBControlWrapper::BindIndexedDB( - const blink::StorageKey& storage_key, - mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> - client_state_checker_remote, - mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - BindRemoteIfNeeded(); - if (storage_policy_observer_) { - // TODO(https://crbug.com/1199077): Pass the real StorageKey once - // StoragePolicyObserver is migrated. - storage_policy_observer_->StartTrackingOrigin(storage_key.origin()); - } - indexed_db_control_->BindIndexedDB( - storage_key, std::move(client_state_checker_remote), std::move(receiver)); -} - -void IndexedDBControlWrapper::BindIndexedDBForBucket( const storage::BucketLocator& bucket_locator, mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> client_state_checker_remote, @@ -72,9 +56,9 @@ storage_policy_observer_->StartTrackingOrigin( bucket_locator.storage_key.origin()); } - indexed_db_control_->BindIndexedDBForBucket( - bucket_locator, std::move(client_state_checker_remote), - std::move(receiver)); + indexed_db_control_->BindIndexedDB(bucket_locator, + std::move(client_state_checker_remote), + std::move(receiver)); } void IndexedDBControlWrapper::GetUsage(GetUsageCallback usage_callback) {
diff --git a/content/browser/indexed_db/indexed_db_control_wrapper.h b/content/browser/indexed_db/indexed_db_control_wrapper.h index 2401783..ff59989 100644 --- a/content/browser/indexed_db/indexed_db_control_wrapper.h +++ b/content/browser/indexed_db/indexed_db_control_wrapper.h
@@ -18,7 +18,13 @@ namespace content { -// All functions should be called on the UI thread. +// This wrapper is created, destroyed, and operated on the UI thread in the +// browser process. It owns `IndexedDBContextImpl` and forwards all +// `IndexedDBControl` calls to that context. It observes the +// `special_storage_policy` and forwards policy updates to the context. In the +// theoretical world where IndexedDBContextImpl lives in a separate process, +// this class is necessary because `special_storage_policy` lives in the browser +// process. class IndexedDBControlWrapper : public storage::mojom::IndexedDBControl { public: explicit IndexedDBControlWrapper( @@ -40,11 +46,6 @@ // mojom::IndexedDBControl implementation: void BindIndexedDB( - const blink::StorageKey& storage_key, - mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> - client_state_checker_remote, - mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) override; - void BindIndexedDBForBucket( const storage::BucketLocator& bucket_locator, mojo::PendingAssociatedRemote<storage::mojom::IndexedDBClientStateChecker> client_state_checker_remote, @@ -69,9 +70,6 @@ void AddObserver( mojo::PendingRemote<storage::mojom::IndexedDBObserver> observer) override; - // TODO(enne): remove this once IndexedDB moves to storage service. - IndexedDBContextImpl* GetIndexedDBContextInternal() { return context_.get(); } - private: void BindRemoteIfNeeded();
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc b/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc index 43ea01e5..548a9e6 100644 --- a/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc +++ b/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc
@@ -207,7 +207,8 @@ context_impl_->IDBTaskRunner()->PostTask( FROM_HERE, base::BindLambdaForTesting([&]() { context_impl_->BindIndexedDB( - blink::StorageKey::CreateFromStringForTesting(kOrigin), + storage::BucketLocator::ForDefaultBucket( + blink::StorageKey::CreateFromStringForTesting(kOrigin)), mojo::PendingAssociatedRemote< storage::mojom::IndexedDBClientStateChecker>(), idb_mojo_factory_.BindNewPipeAndPassReceiver());
diff --git a/content/browser/interest_group/interest_group_storage.cc b/content/browser/interest_group/interest_group_storage.cc index 9988166..752e565 100644 --- a/content/browser/interest_group/interest_group_storage.cc +++ b/content/browser/interest_group/interest_group_storage.cc
@@ -556,9 +556,12 @@ } } -// Adds indices to the `interest_group` table. Called after the table has been -// created. -bool CreateInterestGroupIndicesForV17AndPrior(sql::Database& db) { +// Adds indices to the `interest_group` table. +// Call this function after the table has been created, +// both when creating a new database in CreateVxxSchema +// and after dropping/recreating the `interest_groups` table +// in the *latest* UpgradeVxxSchemaToVxx function to do so. +bool CreateInterestGroupIndices(sql::Database& db) { // Index on group expiration. Owner and Name are only here to speed up // queries that don't need the full group. DCHECK(!db.DoesIndexExist("interest_group_expiration")); @@ -582,6 +585,18 @@ return false; } + // Index on group expiration by owner and IG type (regular vs negative) + DCHECK(!db.DoesIndexExist("interest_group_owner_and_type")); + static const char kInterestGroupOwnerAndTypeIndexSql[] = + // clang-format off + "CREATE INDEX interest_group_owner_and_type" + " ON interest_groups(" + "LENGTH(additional_bid_key) == 0,owner,expiration DESC,name)"; + // clang-format on + if (!db.Execute(kInterestGroupOwnerAndTypeIndexSql)) { + return false; + } + // Index on group expiration by joining origin. Owner and Name are only here // to speed up queries that don't need the full group. DCHECK(!db.DoesIndexExist("interest_group_joining_origin")); @@ -597,24 +612,11 @@ return true; } -bool CreateInterestGroupIndicesForV18(sql::Database& db) { - CreateInterestGroupIndicesForV17AndPrior(db); - - // Index on group expiration by owner and IG type (regular vs negative) - DCHECK(!db.DoesIndexExist("interest_group_owner_and_type")); - static const char kInterestGroupOwnerAndTypeIndexSql[] = - // clang-format off - "CREATE INDEX interest_group_owner_and_type" - " ON interest_groups(" - "LENGTH(additional_bid_key) == 0,owner,expiration DESC,name)"; - // clang-format on - if (!db.Execute(kInterestGroupOwnerAndTypeIndexSql)) { - return false; - } - return true; -} - -// Create indices on the k_anon table. +// Adds indices to the `kanon` table. +// Call this function after the table has been created, +// both when creating a new database in CreateVxxSchema +// and after dropping/recreating the `kanon` table +// in the *latest* UpgradeVxxSchemaToVxx function to do so. bool CreateKAnonIndices(sql::Database& db) { DCHECK(!db.DoesIndexExist("kanon_key_idx")); static const char kCreateKAnonIndexSQL[] = @@ -786,7 +788,7 @@ return false; } - if (!CreateInterestGroupIndicesForV18(db)) { + if (!CreateInterestGroupIndices(db)) { return false; } @@ -870,7 +872,10 @@ } bool UpgradeV17SchemaToV18(sql::Database& db, sql::MetaTable& meta_table) { - DCHECK(!db.DoesIndexExist("interest_group_owner_and_type")); + // If we just upgraded from V15 to V16, we already created this index. + if (db.DoesIndexExist("interest_group_owner_and_type")) { + return true; + } static const char kInterestGroupOwnerAndTypeIndexSql[] = // clang-format off "CREATE INDEX interest_group_owner_and_type" @@ -1085,7 +1090,7 @@ return false; } - return CreateInterestGroupIndicesForV17AndPrior(db); + return CreateInterestGroupIndices(db); } bool UpgradeV14SchemaToV15(sql::Database& db, sql::MetaTable& meta_table) { @@ -1175,7 +1180,7 @@ return false; } - return CreateInterestGroupIndicesForV17AndPrior(db); + return true; } bool UpgradeV13SchemaToV14(sql::Database& db, sql::MetaTable& meta_table) { @@ -1263,7 +1268,7 @@ return false; } - return CreateInterestGroupIndicesForV17AndPrior(db); + return true; } bool UpgradeV12SchemaToV13(sql::Database& db, sql::MetaTable& meta_table) { @@ -1349,7 +1354,7 @@ return false; } - return CreateInterestGroupIndicesForV17AndPrior(db); + return true; } bool UpgradeV11SchemaToV12(sql::Database& db, sql::MetaTable& meta_table) { @@ -1431,7 +1436,7 @@ return false; } - return CreateInterestGroupIndicesForV17AndPrior(db); + return true; } bool UpgradeV10SchemaToV11(sql::Database& db, sql::MetaTable& meta_table) { @@ -1509,7 +1514,7 @@ return false; } - return CreateInterestGroupIndicesForV17AndPrior(db); + return true; } bool UpgradeV9SchemaToV10(sql::Database& db, sql::MetaTable& meta_table) {
diff --git a/content/browser/loader/keep_alive_url_browsertest.cc b/content/browser/loader/keep_alive_url_browsertest.cc index 25ea88f..5f366778 100644 --- a/content/browser/loader/keep_alive_url_browsertest.cc +++ b/content/browser/loader/keep_alive_url_browsertest.cc
@@ -70,8 +70,8 @@ // Encodes the given `url` using the JS method encodeURIComponent. std::string EncodeURL(const GURL& url) { url::RawCanonOutputT<char> buffer; - url::EncodeURIComponent(url.spec().data(), url.spec().size(), &buffer); - return std::string(buffer.data(), buffer.length()); + url::EncodeURIComponent(url.spec(), &buffer); + return std::string(buffer.view()); } MATCHER(IsFrameHidden,
diff --git a/content/browser/media/audio_stream_monitor_unittest.cc b/content/browser/media/audio_stream_monitor_unittest.cc index 3a33d70d..9b2b4dc 100644 --- a/content/browser/media/audio_stream_monitor_unittest.cc +++ b/content/browser/media/audio_stream_monitor_unittest.cc
@@ -70,6 +70,11 @@ const_cast<const base::TickClock*&>(monitor_->clock_) = &clock_; } + void TearDown() override { + monitor_ = nullptr; + RenderViewHostTestHarness::TearDown(); + } + base::TimeTicks GetTestClockTime() { return clock_.NowTicks(); } void AdvanceClock(const base::TimeDelta& delta) { clock_.Advance(delta); } @@ -163,7 +168,7 @@ WebContents* web_contents() { return monitor_->web_contents_; } protected: - raw_ptr<AudioStreamMonitor, DanglingUntriaged> monitor_; + raw_ptr<AudioStreamMonitor> monitor_; private: void ExpectWasRecentlyAudible() const {
diff --git a/content/browser/media/media_browsertest.cc b/content/browser/media/media_browsertest.cc index 44a364d..e0c348342 100644 --- a/content/browser/media/media_browsertest.cc +++ b/content/browser/media/media_browsertest.cc
@@ -120,9 +120,8 @@ std::string MediaBrowserTest::EncodeErrorMessage( const std::string& original_message) { url::RawCanonOutputT<char> buffer; - url::EncodeURIComponent(original_message.data(), original_message.size(), - &buffer); - return std::string(buffer.data(), buffer.length()); + url::EncodeURIComponent(original_message, &buffer); + return std::string(buffer.view()); } void MediaBrowserTest::AddTitlesToAwait(content::TitleWatcher* title_watcher) {
diff --git a/content/browser/preloading/prefetch/prefetch_service.cc b/content/browser/preloading/prefetch/prefetch_service.cc index ff333c56..261ec059 100644 --- a/content/browser/preloading/prefetch/prefetch_service.cc +++ b/content/browser/preloading/prefetch/prefetch_service.cc
@@ -523,30 +523,6 @@ return; } - // This blocks same-site cross-origin prefetches that require the prefetch - // proxy. Same-site prefetches are made using the default network context, and - // the prefetch request cannot be configured to use the proxy in that network - // context. - // TODO(https://crbug.com/1439986): Allow same-site cross-origin prefetches - // that require the prefetch proxy to be made. - if (prefetch_container->IsProxyRequiredForURL(url) && - !prefetch_container - ->IsIsolatedNetworkContextRequiredForCurrentPrefetch()) { - std::move(result_callback) - .Run(prefetch_container, false, - PrefetchStatus:: - kPrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy); - return; - } - - // We do not need to check the cookies of prefetches that do not need an - // isolated network context. - if (!prefetch_container - ->IsIsolatedNetworkContextRequiredForCurrentPrefetch()) { - std::move(result_callback).Run(prefetch_container, true, absl::nullopt); - return; - } - CheckHasServiceWorker(url, prefetch_container, std::move(result_callback)); } @@ -619,6 +595,28 @@ PrefetchStatus::kPrefetchNotEligibleUserHasServiceWorker); return; } + // This blocks same-site cross-origin prefetches that require the prefetch + // proxy. Same-site prefetches are made using the default network context, and + // the prefetch request cannot be configured to use the proxy in that network + // context. + // TODO(https://crbug.com/1439986): Allow same-site cross-origin prefetches + // that require the prefetch proxy to be made. + if (prefetch_container->IsProxyRequiredForURL(url) && + !prefetch_container + ->IsIsolatedNetworkContextRequiredForCurrentPrefetch()) { + std::move(result_callback) + .Run(prefetch_container, false, + PrefetchStatus:: + kPrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy); + return; + } + // We do not need to check the cookies of prefetches that do not need an + // isolated network context. + if (!prefetch_container + ->IsIsolatedNetworkContextRequiredForCurrentPrefetch()) { + std::move(result_callback).Run(prefetch_container, true, absl::nullopt); + return; + } StoragePartition* default_storage_partition = browser_context_->GetDefaultStoragePartition(); CHECK(default_storage_partition);
diff --git a/content/browser/private_aggregation/DEPS b/content/browser/private_aggregation/DEPS index aea8140..f46118f 100644 --- a/content/browser/private_aggregation/DEPS +++ b/content/browser/private_aggregation/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+components/aggregation_service", "+components/sqlite_proto", "+third_party/protobuf/src/google/protobuf", ]
diff --git a/content/browser/private_aggregation/private_aggregation_report_golden_unittest.cc b/content/browser/private_aggregation/private_aggregation_report_golden_unittest.cc index ac13cd9..161ebf398 100644 --- a/content/browser/private_aggregation/private_aggregation_report_golden_unittest.cc +++ b/content/browser/private_aggregation/private_aggregation_report_golden_unittest.cc
@@ -26,6 +26,8 @@ #include "base/time/time.h" #include "base/uuid.h" #include "base/values.h" +#include "components/aggregation_service/features.h" +#include "content/browser/aggregation_service/aggregatable_report.h" #include "content/browser/aggregation_service/aggregation_service.h" #include "content/browser/aggregation_service/aggregation_service_features.h" #include "content/browser/aggregation_service/aggregation_service_impl.h" @@ -84,7 +86,9 @@ ASSERT_EQ(keyset.keys.size(), 1u); aggregation_service().SetPublicKeysForTesting( - GURL(kPrivacySandboxAggregationServiceTrustedServerUrlAwsParam.Get()), + GetAggregationServiceProcessingUrl(url::Origin::Create( + GURL(::aggregation_service::kAggregationServiceCoordinatorAwsCloud + .Get()))), std::move(keyset)); absl::optional<std::vector<uint8_t>> private_key =
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 44922d6..1be46216 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1800,7 +1800,7 @@ } storage_partition_impl_->GetIndexedDBControl().BindIndexedDB( - storage_key, + storage::BucketLocator::ForDefaultBucket(storage_key), IndexedDBClientStateCheckerFactory::InitializePendingAssociatedRemote( rfh_id), std::move(receiver));
diff --git a/content/browser/webid/idp_network_request_manager.cc b/content/browser/webid/idp_network_request_manager.cc index bfd7c09..ba60790 100644 --- a/content/browser/webid/idp_network_request_manager.cc +++ b/content/browser/webid/idp_network_request_manager.cc
@@ -65,7 +65,7 @@ constexpr char kAccountsEndpointKey[] = "accounts_endpoint"; constexpr char kClientMetadataEndpointKey[] = "client_metadata_endpoint"; constexpr char kMetricsEndpoint[] = "metrics_endpoint"; -constexpr char kLoginUrlKeyDeprecated[] = "login_url"; +constexpr char kLoginUrlKeyDeprecated[] = "signin_url"; constexpr char kLoginUrlKey[] = "login_url"; // Keys in fedcm.json 'branding' dictionary.
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index e6edfef..c1267dbc 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -192,9 +192,16 @@ // The experiment label for the cookie deprecation (Mode A/B) study. const base::FeatureParam<std::string> kCookieDeprecationLabel{ &kCookieDeprecationFacilitatedTesting, kCookieDeprecationLabelName, ""}; +// Set whether Ads APIs should be disabled for third-party cookie deprecation. +const base::FeatureParam<bool> kCookieDeprecationTestingDisableAdsAPIs{ + &features::kCookieDeprecationFacilitatedTesting, + /*name=*/kCookieDeprecationTestingDisableAdsAPIsName, + /*default_value=*/false}; const char kCookieDeprecationLabelName[] = "label"; +const char kCookieDeprecationTestingDisableAdsAPIsName[] = "disable_ads_apis"; + // Enables Blink cooperative scheduling. BASE_FEATURE(kCooperativeScheduling, "CooperativeScheduling",
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index e0b3ec4..3618ab7 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -57,7 +57,10 @@ kCookieDeprecationFacilitatedTestingEnableOTRProfiles; CONTENT_EXPORT extern const base::FeatureParam<std::string> kCookieDeprecationLabel; +CONTENT_EXPORT extern const base::FeatureParam<bool> + kCookieDeprecationTestingDisableAdsAPIs; CONTENT_EXPORT extern const char kCookieDeprecationLabelName[]; +CONTENT_EXPORT extern const char kCookieDeprecationTestingDisableAdsAPIsName[]; CONTENT_EXPORT BASE_DECLARE_FEATURE(kCooperativeScheduling); CONTENT_EXPORT BASE_DECLARE_FEATURE(kCrashReporting); CONTENT_EXPORT BASE_DECLARE_FEATURE(kDevicePosture);
diff --git a/content/renderer/pepper/pepper_video_decoder_host.cc b/content/renderer/pepper/pepper_video_decoder_host.cc index 97983c9..8d96467 100644 --- a/content/renderer/pepper/pepper_video_decoder_host.cc +++ b/content/renderer/pepper/pepper_video_decoder_host.cc
@@ -737,7 +737,7 @@ std::unique_ptr<VideoDecoderShim> new_decoder(VideoDecoderShim::Create( this, shim_texture_pool_size, /*use_hw_decoder=*/false, /*use_shared_images=*/use_shared_images_)); - if (!new_decoder->Initialize(profile_)) { + if (!new_decoder || !new_decoder->Initialize(profile_)) { return false; }
diff --git a/content/test/data/accessibility/display-locking/activatable-expected-auralinux.txt b/content/test/data/accessibility/display-locking/activatable-expected-auralinux.txt index a90f31a..91306ba4 100644 --- a/content/test/data/accessibility/display-locking/activatable-expected-auralinux.txt +++ b/content/test/data/accessibility/display-locking/activatable-expected-auralinux.txt
@@ -5,7 +5,9 @@ ++++[static] name='child' ++++[static] name='<newline> ' ++++[section] -++++++[static] name='nested locked element!' +++++++[static] name='<newline> nested locked element!<newline> ' +++++++[push button] name='locked button' +++++++[static] name='<newline> ' ++++[static] name='<newline> ' ++++[section] ++++[static] name='<newline> '
diff --git a/content/test/data/accessibility/display-locking/activatable-expected-blink.txt b/content/test/data/accessibility/display-locking/activatable-expected-blink.txt index 0fa5519..12ff21c 100644 --- a/content/test/data/accessibility/display-locking/activatable-expected-blink.txt +++ b/content/test/data/accessibility/display-locking/activatable-expected-blink.txt
@@ -1,4 +1,4 @@ -rootWebArea +rootWebArea focusable ++genericContainer ignored ++++genericContainer ignored ++++++genericContainer ignored @@ -9,8 +9,14 @@ ++++++++++++staticText offscreen name='child' ++++++++++staticText offscreen name='<newline> ' ++++++++++genericContainer offscreen -++++++++++++staticText offscreen name='nested locked element!' +++++++++++++staticText offscreen name='<newline> nested locked element!<newline> ' +++++++++++++button focusable offscreen name='locked button' +++++++++++++++staticText offscreen name='locked button' +++++++++++++staticText offscreen name='<newline> ' ++++++++++staticText offscreen name='<newline> ' ++++++++++genericContainer offscreen -++++++++++++staticText ignored invisible offscreen name='nested non activatable locked element' +++++++++++++staticText ignored invisible offscreen name='<newline> nested non activatable locked element<newline> ' +++++++++++++button ignored invisible offscreen +++++++++++++++staticText ignored invisible offscreen name='locked button' +++++++++++++staticText ignored invisible offscreen name='<newline> ' ++++++++++staticText offscreen name='<newline> '
diff --git a/content/test/data/accessibility/display-locking/activatable-expected-mac.txt b/content/test/data/accessibility/display-locking/activatable-expected-mac.txt index 0f739123..f9ee043 100644 --- a/content/test/data/accessibility/display-locking/activatable-expected-mac.txt +++ b/content/test/data/accessibility/display-locking/activatable-expected-mac.txt
@@ -5,7 +5,9 @@ ++++AXStaticText AXValue='child' ++++AXStaticText AXValue='<newline> ' ++++AXGroup -++++++AXStaticText AXValue='nested locked element!' +++++++AXStaticText AXValue='<newline> nested locked element!<newline> ' +++++++AXButton AXTitle='locked button' +++++++AXStaticText AXValue='<newline> ' ++++AXStaticText AXValue='<newline> ' ++++AXGroup ++++AXStaticText AXValue='<newline> '
diff --git a/content/test/data/accessibility/display-locking/activatable-expected-win.txt b/content/test/data/accessibility/display-locking/activatable-expected-win.txt index be61584..1001492 100644 --- a/content/test/data/accessibility/display-locking/activatable-expected-win.txt +++ b/content/test/data/accessibility/display-locking/activatable-expected-win.txt
@@ -5,7 +5,9 @@ ++++ROLE_SYSTEM_STATICTEXT name='child' ++++ROLE_SYSTEM_STATICTEXT name='<newline> ' ++++IA2_ROLE_SECTION -++++++ROLE_SYSTEM_STATICTEXT name='nested locked element!' +++++++ROLE_SYSTEM_STATICTEXT name='<newline> nested locked element!<newline> ' +++++++ROLE_SYSTEM_PUSHBUTTON name='locked button' FOCUSABLE +++++++ROLE_SYSTEM_STATICTEXT name='<newline> ' ++++ROLE_SYSTEM_STATICTEXT name='<newline> ' ++++IA2_ROLE_SECTION ++++ROLE_SYSTEM_STATICTEXT name='<newline> '
diff --git a/content/test/data/accessibility/display-locking/activatable.html b/content/test/data/accessibility/display-locking/activatable.html index ba76f2d..d48954a2 100644 --- a/content/test/data/accessibility/display-locking/activatable.html +++ b/content/test/data/accessibility/display-locking/activatable.html
@@ -1,11 +1,18 @@ <!-- @BLINK-ALLOW:offscreen +@BLINK-ALLOW:focus* --> <div> <div id=spacer style="height: 30000px"></div> <div id="locked" style="content-visibility: auto"> <div>child</div> - <div id="nested" style="content-visibility: auto">nested locked element!</div> - <div id="nonActivatable" style="content-visibility: hidden">nested non activatable locked element</div> + <div id="nested" style="content-visibility: auto"> + nested locked element! + <button>locked button</button> + </div> + <div id="nonActivatable" style="content-visibility: hidden"> + nested non activatable locked element + <button>locked button</button> + </div> </div> </div>
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_1.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_1.json index e9d89c1..6fdf866 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_1.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_1.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "debug_cleartext_payload": "omRkYXRhlKJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt", "key_id": "example_id",
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_2.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_2.json index e2a324c0..ea39d4c 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_2.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_2.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id", "payload": "KgkvFUBIbPQYX8T7U/dOqtKtcYVvsO2xRLv4eYt8D2/gWMRXSNYNBsLqwErzkLyr7JOjpafQeNOkuncyOOGg19vmS8JVc/5LalFjKoJAu1byBNDKy6jbisPw9yMFe52ctaJ4i2l3mUBMGROH/V/FYe3ZPdnoXvZL23eb3Eg2ii4g6FiXJAE3oxSRGxgUK3XlwYH1ATPVwSjc9rQPJ88H3GiuJVqTIc+Q/psiBddkC6fSG00UahI42sRV4l0iuf9R9EnChwy1FcFHCzRq4T8t66jhFSxP1kUHwSQMR2toy4g7FZm49F8JBFgxTdUey7fJ1fM/PSyCWu4gP1aY9R/kwh74Yp8tMp/zOGpQUG7UHJHXNmzhpJ+mNaZP0ryb8GuMrMxOsWJ/5N8ajGbFCu8ILOWVkC4eDoCQgfwQRYQKrxMaUlDfqrOrNJNjYvSRTbujtTeAYJCgB94T//3J6G3TCe+/Xx/II6ZOzC6aNylnfPQ0T25mKimuh8Mr5cT2YuXAB1ZL9hXOHJB7xeUAmdFigknwnMubaJsrXRX3L8vadctcg8UfX4a3IXg+0L0WwC5GjHtkA5f6qi2fcV+22XyNVi0ioYl5WQLMQ8rwc0MYtJbHdR/oGncnMwTemAdJrNFvXYIBbz2jtJ5OKhSzxMB3i4dLfNzudWJBBnt1Nwz2SC6eRSkwI+GtJgLa6bslE2B8K7qmz7lP5svxznSbcNzaCrS1CR26GvHSt/bSYPv/MYaTEl2fEsx/dAnkR9N/jquiC2VB79N3vHdCnR0UbhAkBcdHV0ukSbLARhShEEhIuEVLY6L9Ho74AbnCVVU5r9HmNGBrb1DEyecomcYPC3V7Pi05P8cjnQi6Dt+/LuxPXEgZMNxqZ8ZtgT4yqK7dT9+kdgQBoLisRikarJG1yEObpnPdPTAeI04EX10PdXU097DJuynJ9POadvhP3cBMSoMpQc1Kjcb6RaXjjpqNMV/dJGInMLca9STi8aI0cIzXFhUTXWK6sMSSudU+pKZdQ9bmReB4ah5mAjhVyxppasRDpiTw7pWo4BzsFwbH"
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_3.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_3.json index 8990606..ff9f57ee 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_3.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_3.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "debug_cleartext_payload": "omRkYXRhlKJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAABGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAA6JldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt", "key_id": "example_id",
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_4.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_4.json index 23cfdee..cad535f 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_4.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_4.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id", "payload": "Wyln0B1iq+MFr1c7nfZk+Ld/V3+NS+i/LQsfc/fWpFwWvC+VIpV8oZixL2437WX9dpqlf3pDCuug517u38kgnm08pLREujyenwmJlZvl1gzWcQlmq7zK9zc/gPvGp37dQquV3WtQSBq6o47Rcsc9nixqK1G+MrJbwLuEp4OD1htQtA5oh3lg5QnyMJHI/SZi9ybn43UROw16fNxUG4Kb2wa2RndjNLIW/OiKIXachyP2qgZ7CRM/6m9vWPK2OpRRtAewoySNftHb9dEUPnP5l7hBSd1oU/2cOOh3pc9xok0NvLtOXQBZ4D0Bem/50/736QoZCmts7n/3kfhUvAHh1SjLZoCY1QIAwwpzB2TiwCkUIzo3irM3Aqz/z5CN5HtmK5ijM6AXmF3CjgQG2Ev1nK+oDKmXT3tywZsbAdMJ1dNoNqndnS9rpKItsmLTlqTcWoRH/n8U8saG31u3miIzMCSeF552+F7VFnoBYknIrJtG74uihZnI1J/T12QN6hNy6uiYfTxEgFQq2jx1+7T4tyZruV8f6roAd6F2minzT/7e/9m5DT2OFwYrq1syI4KkRqYTGTfsGjGT2fX9EsQm2zm4z+S+ZwrJLvz+ecCdf+xOnifDvhtKVyAU51iCTB3ENE1slA3GIBcmLffrSU+Q4ctzFm7arOOfF8KhrrrRodASivzaqOw/xC1svolwYpv4epnU3IGq0FPbBKdrbHphxue0EP2v4Te8Vy4E2jNxDCVlW3WZ6ThCzo2Ooi2sVcTVhbWIeaUB9h7GRmMIzZoksLnWeXnNU0M8FGeOTif2OnALkP4G+AmwnLSa/JkqUozxfp1zyDKwQyAfmyGihrB9W/3kbiIGWWE2wjTGE06r7WR0+J2+VYckuTEMivQcTfu4vcrDVXW4N32D1tvaZjOnhhmqWXT0XTiAxSrmbfd5BqlcUP1Rj4L3/2Np0mNfPp0xXAyKocQECiNjzsYGUC222tIARPiNBlk6lPXurNOmvtEq3zdT5I40sKSt4qMhwIbh9C0d7mVY9LFHJRxuNH35kqsDNZHM5MiJrz0A"
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_5.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_5.json index 8b8cc661..2371940 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_5.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_5.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "debug_cleartext_payload": "omRkYXRhlKJldmFsdWVEAAAD6GZidWNrZXRQ/////////////////////6JldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt", "key_id": "example_id",
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_6.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_6.json index e774a920..5e7bb407 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_6.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_6.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id", "payload": "F8uZu/YBLODVe39vICj1Jm/vjMN9Zn6WX71mFyA4nk0dyVY7Aha5/fZYUn4TWJRRkU+YVBL7Q3s5uGPrAEr5a5DQE7Kh7jhhOUxVYwgToQUpF5T7nxXrl13wiixD7gN2QuEwI0pCOuQ7PwmNKTF51uwWwJ9KtunJowQOsDTN8JYUJ9VpvURQShYJn2BO9D/mdBWw82NxhZbifA5LtcmZk9ydcjask5bAHH8WRvrWObllkaHX23MLn7Zw6E45rj8U/TD/8+5MvcMYSuDYGscCSVgfrujnVSHvLHTtY0hl2vhUhBv02j9RNqT0rLmy1o6ScXNQ4veI/aOmV7t0C2GY6DX8Yo5UwT5yyuMlvzrJJK1Sp0C7cXB6wZVcB2h3uX3L7i0Bu5d+vFxfObr1E4eHKb3qtgBZ6KC22cFq/Xa12pb0JrRhEhk/mcY6iNED+M2+t5CXSUkHZbJCs7Onx332nldfG6sBJDSJ0PGD+ZyShBIpeQVxMqjc5pimUT71tKagJAvjZdKvdgU/uzbQUiy3In0YWU0dMR9nKkKnJSfhek6SQxY3tlpQicgyl7iQj39CFKZa6FSQ/QHhzJyyi6RJNfPj1hycF3ZoW5pZT5tfUt3qa4J2cl7SAGr8LGHa96Q1g1ZEqp5xDJe/KrI9aWSjJeV9w5RucQ01yv8FfMLVQDb/Nqfo9YVU7Yc1S3l1Hu0io/QS7GCjy0p4p7zulEBbwFfDi5CBY3fx5latUsISpz/VyWheWaYvf4QhRCntBfH3eQDyE/R8CyL39YgLKo3tPpDkxREoyhfDb59UvOQvcDVLkeTiUU71kIrCX1fQUOoDKi3kRC+LO6miCrBnC3j+v9j4h5sODKqZR2xqiJFRxm4PfNp+mxh00hr5w/zH4ko0lbgxoVtqxYaUIa/s27ZGu8neCjyCr2ZelRLfIY9H3PwJLYRbxlHa1C0RTmCZr4lQvSw9ZnGew21+ifPqH+Uf4NMz94M0b8GFTiYtT+INPYqXoIoysB2FWZhKTjP69vthH7BxXYI9ZRCNmOaZe1NibyXEbluGD4cwE6Bg"
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_7.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_7.json index bac79516..adf1b66 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_7.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_7.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id", "payload": "hR9Peif1FVr1+QSK6lK5LxAGuJDIOoArZwo8nkcc7UcfLZf0BOy9tUS4A2smDniFyM/3EhZN+3oZQJjDNmiurcDy459pVma3SDFIyLfUbY+m7ekkupW7l34L2pxvE3fo65YvyJ4ypU26Lizw7yauYQOss/vW0hi410FKQG1wrr7dGCioosMPVJT6wiAFqUEwAfiy+7cr4ed+Mv+YWD6HCmtL+/Zszl93CDNjNJXifQapyD6qVpwSatmcgWVkSuUrgbfPqOiyZvUiUy4aLmYFo8vNHhQUFZYqWh0HiiiHeFbrr9re5y6Tb5pRSLTGkPF5+DHYZgtdsiepWPQ4MIIfLgzrp7l/3bDEjHCYm902mIA1LzhXLNb0VGv+0Z2PhZ+hBTfkejMyyeApfCPcZGimXlaoEG8eNgwPoJDWNriJZJQvta1zl2Xhow8opaFjtl991dcscN+AFE/Z+cYJbYYSTh91/+CONxT7kK3KlTdfc1bnep+3YnzMIdg4tnwQ+gukU/Gd7BrC/pA+g7y5ucQkmnwHrV8j3gKB5dkeYyPF5wpSG5sXLS/Q6DoduwTRMjPYr0rMa00kqyTl0IKjG77z18oZ9lGXGAd8LMTRaP4VTWr4Gn7nNyzmG1xqUQkx3Cj4eQIzC+/fM05nXbNmomKf+07OClrXdHYwiYd9fRTwJqzt4H1gZ3cfK+BNh7wQd5WHmGGeg2JVsofmK3RecM2V0QMO/Py0JGSY+lmRRxhHqLdhaDjWzG3GNTgYkWTQGD3nRAFbKJKObe4pYUnl6D68ogG0IKiJkddvEUImMFrvoafSxLraEVTOz0jyLDp4SIvbAT1qQpvPEYbqq2w7C5TBuGCiRWEASPaVsVeOkUgsx/8/b9C0SH/ikfUWQkPbX/4vXQl8YBGfetn0eowKlxd+Hr4cAd6isl9DTOrU5A/Y3GYhqDnZRAIz42Q0v/i5hQ+HoDBt0OVkcnH0Hq5bbE/NG1lM+FJrUTYgOF5i6VYDeszyQvkcC+aQN2XADikzOwavykg1mX1iIW/9Y67+ls5HX8zdAVJw30IwK12X"
diff --git a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_8.json b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_8.json index 5a54bf04..9e19d18 100644 --- a/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_8.json +++ b/content/test/data/attribution_reporting/aggregatable_report_goldens/latest/report_8.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id",
diff --git a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_1.json b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_1.json index 8ce97b3..4b5d6fd6 100644 --- a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_1.json +++ b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_1.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "debug_cleartext_payload": "omRkYXRhlKJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt",
diff --git a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_2.json b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_2.json index f15a851..0e863bbf 100644 --- a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_2.json +++ b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_2.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id",
diff --git a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_3.json b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_3.json index ade7cca..5515251c 100644 --- a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_3.json +++ b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_3.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "debug_cleartext_payload": "omRkYXRhlKJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAABGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAA6JldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt", "key_id": "example_id",
diff --git a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_4.json b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_4.json index 64806f2..a6e9d664 100644 --- a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_4.json +++ b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_4.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id", "payload": "ihN0q9jGIe7Lcc1cGjyd4bOTrtu4TW3LDOYedqTHkydYVkDvDSHgDt6065vQEoHLTD4gJ87gcdxM9chPI0Rrb0jlpHMVSR9zvxNsHjV+nhlIGXdh5Im3IZl689+joiEu0CUTTkQsKyaR1+FX1jO7BM+IjOrLIosPhlVIIo5dYyObAS9OGbF6ZsKWmf25T5KwHHJ7OJPCg12fCE9ll117FJzBOsdsQFPB/8hSTwgbcNPSrvUvD4+cOijLfKaKb/GET5D8qOqUsU3L0Q3WmmXK809ye5J3qaEYAlIllw/p7yLEfHdGI1EG1akU1obiYRoEqFtmDPB24kt3zSiHUX14rS9C4dmPfojNtNg9p94W4T3l6rHVAfjFnOiGtmdvdqrQ8swlH+MruBXYKVds7UzvgrB4klrXb/hDWoqQNgTxjm3hPosu8Jel4EFKmAlsb5fvKAbs6SotvoINvX7LWKnNWCzLUmbY76EHBybgyorIMV0Wos6fntC3H9BrQCqbD1WW7FD8TzMYxpiYPeaj8qsKyoZloDZPFCUsNQT+OOPlwExa99p7kBCvuhOMjLpu9mkv+ymhEPpk2Bgg84kQcVQ9ipMXYV7Ru6Jc3hRgM5hhm+VENm6PPmwGnGSHmVbpXUbS3FIYZ4w1gvJKeBx1ZY5QjcJ5cOqvXQSCjMvVQygh7IGnUoJxJSOaqOeGQHKo9Vl+Inj9s7lOwtAlH68b90+x3x4TEJxjA8FNltnkBXveaBJL2R0BfHIXmBeOIhE/e+/LK6VJfU4A6OYnWYaQxhUfbxv0t3M7UiSRrWVO886Vab/qdZFHIrBzPRrNmZw48wuVRTsfZTFI627mBZOJOD77gVpIEyMn96x/qDS/Rrk5g6KbQbSYWi4VBeePfI3ZhVZtQhvyQsw7WuIMqCWLYvOUQrh51c8Tdmfd8XaKxFf9EPI6Aiyr/hqfsNbedQv5UzhLqu75GNNkh+s8s6EjkgvlCMWGv3jJuMTazvi0/vHvrMAQjd4hGjGbeWhVXb4OMNQvB38tFIegCop1d+EERWMBUQbH3fRjyKZhZGl9"
diff --git a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_5.json b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_5.json index d97a59fe..103a1e7 100644 --- a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_5.json +++ b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_5.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "debug_cleartext_payload": "omRkYXRhlKJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt",
diff --git a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_6.json b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_6.json index c0243dde..756d090d 100644 --- a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_6.json +++ b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_6.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id",
diff --git a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_7.json b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_7.json index aaf834e..a0137a05 100644 --- a/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_7.json +++ b/content/test/data/private_aggregation/aggregatable_report_goldens/latest/report_7.json
@@ -1,4 +1,5 @@ { + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", "aggregation_service_payloads": [ { "key_id": "example_id",
diff --git a/device/vr/android/cardboard/cardboard_device.cc b/device/vr/android/cardboard/cardboard_device.cc index f45e631..b523bc2 100644 --- a/device/vr/android/cardboard/cardboard_device.cc +++ b/device/vr/android/cardboard/cardboard_device.cc
@@ -218,6 +218,12 @@ return; } + // It's possible that we could get some touch events trail in after we've + // decided to shutdown the render loop due to scheduling conflicts. + if (!render_loop_) { + return; + } + // Cardboard touch events don't make use of any of the pointer information, // so we only need to notify that an touch has happened. PostTaskToRenderThread(base::BindOnce(&CardboardRenderLoop::OnTriggerEvent,
diff --git a/docs/callback.md b/docs/callback.md index db9fa64..8ad867f 100644 --- a/docs/callback.md +++ b/docs/callback.md
@@ -692,19 +692,26 @@ ### Ignoring Arguments Values -Sometimes you want to pass a function that doesn't take any arguments in a -place that expects a callback that takes some arguments +Sometimes you want to use a function that takes fewer arguments than the +designated callback type expects. The extra arguments can be ignored as long +as they are leading. ```cpp -void DoSomething() { - cout << "Hello!" << endl; +void LogError(char* error_message) { + if (error_message) + cout << "Log: " << error_message << endl; } -base::RepeatingCallback<void(int)> cb = - base::IgnoreArgs<int>(base::BindRepeating(&DoSomething)); +base::RepeatingCallback<void(int, char*)> cb = + base::IgnoreArgs<int>(base::BindRepeating(&LogError)); +cb.Run(42, nullptr); ``` -Similarly, you may want to use an existing closure in a place that expects a -value-accepting callback. +Note in the example above that the type(s) passed to `IgnoreArgs` represent +the additional prepended parameters (those which will be "ignored"). The other +arguments to `cb` are inferred from the callback that is being wrapped. + +`IgnoreArgs` can be used to adapt a closure to a callback, ignoring all the +arguments that are eventually passed: ```cpp base::OnceClosure closure = base::BindOnce([](){ cout << "Hello!" << endl; });
diff --git a/extensions/browser/service_worker_task_queue.cc b/extensions/browser/service_worker_task_queue.cc index a19ea39..7eb1953d 100644 --- a/extensions/browser/service_worker_task_queue.cc +++ b/extensions/browser/service_worker_task_queue.cc
@@ -422,8 +422,18 @@ bool pending_tasks = !tasks.empty(); tasks.push_back(std::move(task)); - bool worker_ready_to_run_tasks = CanWorkerImmediatelyRunTasks( - worker_state, GetServiceWorkerContext(lazy_context_id.extension_id())); + content::ServiceWorkerContext* context = + GetServiceWorkerContext(lazy_context_id.extension_id()); + + // We can't CHECK(worker_state->worker_id_) here because sometimes this method + // is called before a worker has been started (so `worker_id_` is null). + if (worker_state->worker_id_ && context->IsLiveStartingServiceWorker( + worker_state->worker_id_->version_id)) { + // ServiceWorkerTaskQueue::DidStartServiceWorkerContext() or + // ServiceWorkerTaskQueue::DidStartWorkerForScope(), whichever runs first, + // will run the task when the worker finishes starting. + return; + } if (worker_state->registration_state_ != RegistrationState::kRegistered || pending_tasks) { @@ -434,7 +444,7 @@ return; } - if (!worker_ready_to_run_tasks) { + if (!CanWorkerImmediatelyRunTasks(worker_state, context)) { RunTasksAfterStartWorker(context_id); } else { // When the worker is already running then immediately dispatch to avoid us
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing.h b/gpu/command_buffer/service/shared_image/iosurface_image_backing.h index f61e0050c..0ae77a2 100644 --- a/gpu/command_buffer/service/shared_image/iosurface_image_backing.h +++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing.h
@@ -60,6 +60,12 @@ void EndAccess(bool readonly); void WillRelease(bool have_context); + // Returns true if we need to (re)bind IOSurface to GLTexture before next + // access. + bool is_bind_pending() const { return is_bind_pending_; } + void set_bind_pending() { is_bind_pending_ = true; } + void clear_bind_pending() { is_bind_pending_ = false; } + private: friend class base::RefCounted<IOSurfaceBackingEGLState>; @@ -86,6 +92,8 @@ // Set to true if the context is known to be lost. bool context_lost_ = false; + bool is_bind_pending_ = false; + ~IOSurfaceBackingEGLState(); };
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm index 6a34bba..fe9654e 100644 --- a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm +++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
@@ -883,13 +883,15 @@ &gl_texture, nullptr); // Set the IOSurface to be initially unbound from the GL texture. gl_texture->SetEstimatedSize(GetEstimatedSize()); - gl_texture->set_bind_pending(); gl_textures.push_back(std::move(gl_texture)); } - return new IOSurfaceBackingEGLState(this, egl_display, context, - gl::GLSurface::GetCurrent(), gl_target_, - std::move(gl_textures)); + scoped_refptr<IOSurfaceBackingEGLState> egl_state = + new IOSurfaceBackingEGLState(this, egl_display, context, + gl::GLSurface::GetCurrent(), gl_target_, + std::move(gl_textures)); + egl_state->set_bind_pending(); + return egl_state; } void IOSurfaceImageBacking::ReleaseGLTexture( @@ -1183,9 +1185,7 @@ egl_fence->ServerWait(); } for (auto iter : egl_state_map_) { - for (const auto& texture : iter.second->gl_textures_) { - texture->set_bind_pending(); - } + iter.second->set_bind_pending(); } } @@ -1261,10 +1261,7 @@ // If the GL texture is already bound (the bind is not marked as pending), // then early-out. - bool is_bind_pending = base::ranges::any_of( - egl_state->gl_textures_, - [](const auto& texture) { return texture->is_bind_pending(); }); - if (!is_bind_pending) { + if (!egl_state->is_bind_pending()) { return true; } @@ -1349,9 +1346,8 @@ LOG(ERROR) << "Failed to bind ScopedEGLSurfaceIOSurface to target"; return false; } - - egl_state->gl_textures_[plane_index]->clear_bind_pending(); } + egl_state->clear_bind_pending(); return true; } @@ -1423,10 +1419,10 @@ DCHECK(egl_state->egl_surfaces_.empty() || static_cast<int>(egl_state->egl_surfaces_.size()) == format().NumberOfPlanes()); - for (int plane_index = 0; plane_index < format().NumberOfPlanes(); - plane_index++) { - if (!egl_state->gl_textures_[plane_index]->is_bind_pending()) { - if (!egl_state->egl_surfaces_.empty()) { + if (!egl_state->is_bind_pending()) { + if (!egl_state->egl_surfaces_.empty()) { + for (int plane_index = 0; plane_index < format().NumberOfPlanes(); + plane_index++) { // NOTE: We pass `restore_prev_even_if_invalid=true` to maintain // behavior from when this class was using a // duplicate-but-not-identical utility. @@ -1438,8 +1434,8 @@ egl_state->GetGLServiceId(plane_index)); egl_state->egl_surfaces_[plane_index]->ReleaseTexImage(); } - egl_state->gl_textures_[plane_index]->set_bind_pending(); } + egl_state->set_bind_pending(); } } }
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h index 0d2baec7..3c9dc25d 100644 --- a/gpu/command_buffer/service/texture_manager.h +++ b/gpu/command_buffer/service/texture_manager.h
@@ -82,14 +82,6 @@ void BindToServiceId(GLuint service_id); #endif -#if BUILDFLAG(IS_APPLE) - // Return true if and only if the decoder should BindTexImage / CopyTexImage - // us before sampling. - bool is_bind_pending() const { return is_bind_pending_; } - void set_bind_pending() { is_bind_pending_ = true; } - void clear_bind_pending() { is_bind_pending_ = false; } -#endif - void SetEstimatedSize(size_t size); size_t estimated_size() const { return estimated_size_; } @@ -104,9 +96,6 @@ const GLuint owned_service_id_ = 0; bool have_context_; -#if BUILDFLAG(IS_APPLE) - bool is_bind_pending_ = false; -#endif size_t estimated_size_ = 0;
diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc index 7678f88..f639bd41 100644 --- a/gpu/ipc/service/gpu_init.cc +++ b/gpu/ipc/service/gpu_init.cc
@@ -617,10 +617,13 @@ ResumeGpuWatchdog(watchdog_thread_.get()); } #endif // BUILDFLAG(IS_WIN) - + uint64_t vulkan_system_device_id = 0; + if (gl_display) { + vulkan_system_device_id = gl_display->system_device_id(); + } if (gpu_feature_info_.status_values[GPU_FEATURE_TYPE_VULKAN] != kGpuFeatureStatusEnabled || - !InitializeVulkan(gl_display->system_device_id())) { + !InitializeVulkan(vulkan_system_device_id)) { gpu_preferences_.use_vulkan = VulkanImplementationName::kNone; gpu_feature_info_.status_values[GPU_FEATURE_TYPE_VULKAN] = kGpuFeatureStatusDisabled; @@ -820,7 +823,11 @@ if (command_line->HasSwitch(switches::kWebViewDrawFunctorUsesVulkan) && base::FeatureList::IsEnabled(features::kWebViewVulkan)) { - bool result = InitializeVulkan(gl_display->system_device_id()); + uint64_t vulkan_system_device_id = 0; + if (gl_display) { + vulkan_system_device_id = gl_display->system_device_id(); + } + bool result = InitializeVulkan(vulkan_system_device_id); // There is no fallback for webview. CHECK(result); } else {
diff --git a/infra/config/console-header.star b/infra/config/console-header.star index 9c744a6..5666d07 100644 --- a/infra/config/console-header.star +++ b/infra/config/console-header.star
@@ -391,7 +391,7 @@ console_ids = [ "chromium/chromium.android", "chrome/chrome.perf", - "chromium/chromium.fuchsia.fyi", + "chromium/sheriff.fuchsia", "chromium/chromium.gpu.fyi", "chromium/chromium.angle", "chromium/chromium.swangle",
diff --git a/infra/config/generated/builders/try/linux-official/gn-args.json b/infra/config/generated/builders/try/linux-official/gn-args.json index 96a3536..01fd8ee6 100644 --- a/infra/config/generated/builders/try/linux-official/gn-args.json +++ b/infra/config/generated/builders/try/linux-official/gn-args.json
@@ -3,6 +3,7 @@ "dcheck_always_on": true, "is_official_build": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } } \ No newline at end of file
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index e6359a7..41e07bb6 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -601,7 +601,7 @@ * Experiment percentage: 3.0 * [chromeos-amd64-generic-siso-rel](https://ci.chromium.org/p/chromium/builders/try/chromeos-amd64-generic-siso-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""chromeos-amd64-generic-siso-rel"")) - * Experiment percentage: 0.01 + * Experiment percentage: 10.0 * [chromeos-js-coverage-rel](https://ci.chromium.org/p/chromium/builders/try/chromeos-js-coverage-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""chromeos-js-coverage-rel"")) * Experiment percentage: 20.0
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg index 1b8ec1c0..9ed301b 100644 --- a/infra/config/generated/luci/commit-queue.cfg +++ b/infra/config/generated/luci/commit-queue.cfg
@@ -1556,7 +1556,7 @@ } builders { name: "chromium/try/chromeos-amd64-generic-siso-rel" - experiment_percentage: 0.01 + experiment_percentage: 10 location_filters { gerrit_host_regexp: ".*" gerrit_project_regexp: ".*"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index bef6382..335458b 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -28424,6 +28424,11 @@ '{' ' "$build/avd_packager": {' ' "avd_configs": [' + ' "tools/android/avd/proto/creation/android_30_google_atd_x86.textpb",' + ' "tools/android/avd/proto/creation/android_30_google_atd_x64.textpb",' + ' "tools/android/avd/proto/creation/android_31_google_atd_x64.textpb",' + ' "tools/android/avd/proto/creation/android_32_google_atd_x64.textpb",' + ' "tools/android/avd/proto/creation/android_33_google_atd_x64.textpb",' ' "tools/android/avd/proto/creation/generic_android19.textpb",' ' "tools/android/avd/proto/creation/generic_android22.textpb",' ' "tools/android/avd/proto/creation/generic_android23.textpb",'
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg index 6c54c95..15e2c780 100644 --- a/infra/config/generated/luci/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -418,7 +418,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -1365,7 +1365,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -2110,7 +2110,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -2212,9 +2212,14 @@ short_name: "dbg" } builders { + name: "buildbucket/luci.chrome.ci/fuchsia-arm64-nest-sd" + category: "gardener|p/chrome|arm64" + short_name: "nest-arm" + } + builders { name: "buildbucket/luci.chrome.ci/fuchsia-builder-perf-arm64" category: "gardener|p/chrome|arm64" - short_name: "perf-bld" + short_name: "perf-arm" } builders { name: "buildbucket/luci.chrome.ci/fuchsia-fyi-arm64-size" @@ -2222,6 +2227,16 @@ short_name: "size" } builders { + name: "buildbucket/luci.chrome.ci/fuchsia-x64-nest-sd" + category: "gardener|p/chrome|x64" + short_name: "nest-x64" + } + builders { + name: "buildbucket/luci.chrome.ci/fuchsia-builder-perf-x64" + category: "gardener|p/chrome|x64" + short_name: "perf-x64" + } + builders { name: "buildbucket/luci.chrome.ci/fuchsia-x64" category: "gardener|p/chrome|x64" short_name: "rel" @@ -2242,6 +2257,21 @@ short_name: "sher" } builders { + name: "buildbucket/luci.chrome.ci/fuchsia-cast-astro" + category: "gardener|hardware|cast" + short_name: "ast" + } + builders { + name: "buildbucket/luci.chrome.ci/fuchsia-cast-nelson" + category: "gardener|hardware|cast" + short_name: "nsn" + } + builders { + name: "buildbucket/luci.chrome.ci/fuchsia-cast-sherlock" + category: "gardener|hardware|cast" + short_name: "sher" + } + builders { name: "buildbucket/luci.chrome.ci/fuchsia-perf-nsn" category: "gardener|hardware|perf" short_name: "nsn" @@ -2262,6 +2292,11 @@ short_name: "sher" } builders { + name: "buildbucket/luci.chromium.ci/fuchsia-fyi-x64-dbg-persistent-emulator" + category: "fyi" + short_name: "x64-llemu" + } + builders { name: "buildbucket/luci.chromium.ci/ToTFuchsiaOfficial arm64" category: "fyi|clang" short_name: "arm64-off" @@ -2600,7 +2635,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -2969,7 +3004,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -3667,7 +3702,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -4031,7 +4066,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -4465,7 +4500,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -4820,7 +4855,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -5428,7 +5463,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -5846,7 +5881,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -6265,7 +6300,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -6702,7 +6737,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -7160,7 +7195,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -7739,7 +7774,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -8273,7 +8308,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -8659,386 +8694,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" - console_ids: "chromium/chromium.gpu.fyi" - console_ids: "chromium/chromium.angle" - console_ids: "chromium/chromium.swangle" - console_ids: "chromium/chromium.fuzz" - } - tree_status_host: "chromium-status.appspot.com" - } -} -consoles { - id: "chromium.fuchsia.fyi" - name: "chromium.fuchsia.fyi" - repo_url: "https://chromium.googlesource.com/chromium/src" - refs: "regexp:refs/heads/main" - manifest_name: "REVISION" - builders { - name: "buildbucket/luci.chromium.ci/fuchsia-fyi-x64-asan" - category: "asan" - short_name: "x64" - } - builders { - name: "buildbucket/luci.chromium.ci/fuchsia-fyi-arm64-dbg" - category: "debug" - short_name: "arm64" - } - builders { - name: "buildbucket/luci.chromium.ci/fuchsia-fyi-x64-dbg" - category: "debug" - short_name: "x64" - } - builders { - name: "buildbucket/luci.chromium.ci/fuchsia-fyi-x64-dbg-persistent-emulator" - category: "debug" - short_name: "x64-llemu" - } - builders { - name: "buildbucket/luci.chrome.ci/fuchsia-fyi-arm64-size" - category: "p/chrome|arm64" - short_name: "size" - } - builders { - name: "buildbucket/luci.chrome.ci/fuchsia-builder-perf-x64" - category: "p/chrome|x64" - short_name: "perf-bld" - } - builders { - name: "buildbucket/luci.chrome.ci/fuchsia-x64" - category: "p/chrome|x64" - short_name: "rel" - } - header { - oncalls { - name: "Chromium" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-build-sheriff" - } - oncalls { - name: "Android" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-android-sheriff" - } - oncalls { - name: "iOS" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-ios" - } - oncalls { - name: "ChromeOS" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chromeos-gardeners" - } - oncalls { - name: "Fuchsia" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/grotation:chrome-fuchsia-engprod" - } - oncalls { - name: "GPU" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-gpu-pixel-wrangler-weekly" - } - oncalls { - name: "ANGLE" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/grotation:angle-wrangler" - } - oncalls { - name: "Perf" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/grotation:chromium-perf-regression-sheriff" - } - oncalls { - name: "Perfbot" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/grotation:chromium-perf-bot-sheriff" - } - oncalls { - name: "Trooper" - url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-ops-client-infra" - show_primary_secondary_labels: true - } - links { - name: "Builds" - links { - text: "continuous" - url: "https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html" - alt: "Continuous browser snapshots" - } - links { - text: "symbols" - url: "https://www.chromium.org/developers/how-tos/debugging-on-windows" - alt: "Windows Symbols" - } - links { - text: "status" - url: "https://chromium-status.appspot.com/" - alt: "Current tree status" - } - } - links { - name: "Dashboards" - links { - text: "perf" - url: "https://chromeperf.appspot.com/" - alt: "Chrome perf dashboard" - } - links { - text: "LUCI Analysis" - url: "https://luci-analysis.appspot.com" - alt: "New flake portal" - } - } - links { - name: "Chromium" - links { - text: "source" - url: "https://chromium.googlesource.com/chromium/src" - alt: "Chromium source code repository" - } - links { - text: "reviews" - url: "https://chromium-review.googlesource.com" - alt: "Chromium code review tool" - } - links { - text: "bugs" - url: "https://crbug.com" - alt: "Chromium bug tracker" - } - links { - text: "coverage" - url: "https://analysis.chromium.org/coverage/p/chromium" - alt: "Chromium code coverage dashboard" - } - links { - text: "dev" - url: "https://dev.chromium.org/Home" - alt: "Chromium developer home page" - } - links { - text: "support" - url: "https://support.google.com/chrome/#topic=7438008" - alt: "Google Chrome help center" - } - } - links { - name: "Consoles" - links { - text: "android" - url: "/p/chromium/g/chromium.android" - alt: "Chromium Android console" - } - links { - text: "checks" - url: "/p/chromium/g/checks" - alt: "Checks console" - } - links { - text: "clang" - url: "/p/chromium/g/chromium.clang" - alt: "Chromium Clang console" - } - links { - text: "dawn" - url: "/p/chromium/g/chromium.dawn" - alt: "Chromium Dawn console" - } - links { - text: "fuzz" - url: "/p/chromium/g/chromium.fuzz" - alt: "Chromium Fuzz console" - } - links { - text: "fuchsia" - url: "/p/chromium/g/chromium.fuchsia" - alt: "Chromium Fuchsia console" - } - links { - text: "fyi" - url: "/p/chromium/g/chromium.fyi" - alt: "Chromium FYI console" - } - links { - text: "gpu" - url: "/p/chromium/g/chromium.gpu" - alt: "Chromium GPU console" - } - links { - text: "infra" - url: "/p/chromium/g/chromium.infra" - alt: "Chromium Infra console" - } - links { - text: "memory.fyi" - url: "/p/chromium/g/chromium.memory.fyi" - alt: "Chromium Memory FYI console" - } - links { - text: "perf" - url: "/p/chrome/g/chrome.perf/console" - alt: "Chromium Perf console" - } - links { - text: "perf.fyi" - url: "/p/chrome/g/chrome.perf.fyi/console" - alt: "Chromium Perf FYI console" - } - links { - text: "angle" - url: "/p/chromium/g/chromium.angle" - alt: "Chromium ANGLE console" - } - links { - text: "swangle" - url: "/p/chromium/g/chromium.swangle" - alt: "Chromium SWANGLE console" - } - links { - text: "updater" - url: "/p/chromium/g/chromium.updater" - alt: "Chromium Updater console" - } - links { - text: "webrtc" - url: "/p/chromium/g/chromium.webrtc" - alt: "Chromium WebRTC console" - } - links { - text: "chromiumos" - url: "/p/chromium/g/chromium.chromiumos" - alt: "ChromiumOS console" - } - links { - text: "flakiness" - url: "/p/chromium/g/chromium.flakiness" - alt: "Chromium Flakiness console" - } - } - links { - name: "Branch Consoles" - links { - text: "m108" - url: "/p/chromium-m108/g/main/console" - } - links { - text: "m109" - url: "/p/chromium-m109/g/main/console" - } - links { - text: "m112" - url: "/p/chromium-m112/g/main/console" - } - links { - text: "m114" - url: "/p/chromium-m114/g/main/console" - } - links { - text: "m116" - url: "/p/chromium-m116/g/main/console" - } - links { - text: "m117" - url: "/p/chromium-m117/g/main/console" - } - links { - text: "m118" - url: "/p/chromium-m118/g/main/console" - } - links { - text: "trunk" - url: "/p/chromium/g/main/console" - alt: "Trunk (ToT) console" - } - } - links { - name: "Tryservers" - links { - text: "android" - url: "/p/chromium/g/tryserver.chromium.android/builders" - alt: "Android" - } - links { - text: "angle" - url: "/p/chromium/g/tryserver.chromium.angle/builders" - alt: "Angle" - } - links { - text: "blink" - url: "/p/chromium/g/tryserver.blink/builders" - alt: "Blink" - } - links { - text: "chrome" - url: "/p/chrome/g/tryserver.chrome/builders" - alt: "Chrome" - } - links { - text: "chromiumos" - url: "/p/chromium/g/tryserver.chromium.chromiumos/builders" - alt: "ChromiumOS" - } - links { - text: "fuchsia" - url: "/p/chromium/g/tryserver.chromium.fuchsia/builders" - alt: "Fuchsia" - } - links { - text: "fuzz" - url: "/p/chromium/g/tryserver.chromium.fuzz/builders" - alt: "Fuzz" - } - links { - text: "linux" - url: "/p/chromium/g/tryserver.chromium.linux/builders" - alt: "Linux" - } - links { - text: "mac" - url: "/p/chromium/g/tryserver.chromium.mac/builders" - alt: "Mac" - } - links { - text: "swangle" - url: "/p/chromium/g/tryserver.chromium.swangle/builders" - alt: "SWANGLE" - } - links { - text: "tricium" - url: "/p/chromium/g/tryserver.chromium.tricium/builders" - alt: "Tricium" - } - links { - text: "win" - url: "/p/chromium/g/tryserver.chromium.win/builders" - alt: "Win" - } - } - links { - name: "Navigate" - links { - text: "about" - url: "http://dev.chromium.org/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot" - alt: "Tour of the console" - } - links { - text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" - alt: "Customize this console" - } - } - console_groups { - title { - text: "Tree Closers" - url: "https://chromium-status.appspot.com/" - } - console_ids: "chromium/chromium" - console_ids: "chromium/chromium.win" - console_ids: "chromium/chromium.mac" - console_ids: "chromium/chromium.linux" - console_ids: "chromium/chromium.chromiumos" - console_ids: "chromium/chromium.fuchsia" - console_ids: "chrome/chrome" - console_ids: "chromium/chromium.memory" - console_ids: "chromium/chromium.gpu" - } - console_groups { - console_ids: "chromium/chromium.android" - console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -9536,7 +9192,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -10305,7 +9961,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -10682,7 +10338,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -11092,7 +10748,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -11497,7 +11153,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -12142,7 +11798,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -12525,7 +12181,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -12953,7 +12609,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -13392,7 +13048,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -13841,7 +13497,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -14210,7 +13866,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -14714,7 +14370,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -15099,7 +14755,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -15488,7 +15144,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -16012,7 +15668,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -16396,7 +16052,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -16821,7 +16477,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -17210,7 +16866,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle" @@ -17593,7 +17249,7 @@ console_groups { console_ids: "chromium/chromium.android" console_ids: "chrome/chrome.perf" - console_ids: "chromium/chromium.fuchsia.fyi" + console_ids: "chromium/sheriff.fuchsia" console_ids: "chromium/chromium.gpu.fyi" console_ids: "chromium/chromium.angle" console_ids: "chromium/chromium.swangle"
diff --git a/infra/config/generated/testing/test_suites.pyl b/infra/config/generated/testing/test_suites.pyl index eb3e2e9..f3421add 100644 --- a/infra/config/generated/testing/test_suites.pyl +++ b/infra/config/generated/testing/test_suites.pyl
@@ -5608,7 +5608,7 @@ '--no-wpt-internal', ], 'swarming': { - 'shards': 15, + 'shards': 4, 'expiration': 18000, 'hard_timeout': 14400, },
diff --git a/infra/config/gn_args/gn_args.star b/infra/config/gn_args/gn_args.star index 4c6220f..e67af062 100644 --- a/infra/config/gn_args/gn_args.star +++ b/infra/config/gn_args/gn_args.star
@@ -56,10 +56,18 @@ ) gn_args.config( + "use_dummy_lastchange", + args = { + "use_dummy_lastchange": True, + }, +) + +gn_args.config( "try_builder", configs = [ "minimal_symbols", "dcheck_always_on", + "use_dummy_lastchange", ], )
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index 4654923..e17777eb 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -166,7 +166,12 @@ category = category, short_name = short_name, ) for name, category, short_name in ( - ("fuchsia-builder-perf-arm64", "gardener|p/chrome|arm64", "perf-bld"), + ("fuchsia-arm64-nest-sd", "gardener|p/chrome|arm64", "nest-arm"), + ("fuchsia-builder-perf-arm64", "gardener|p/chrome|arm64", "perf-arm"), + ("fuchsia-builder-perf-x64", "gardener|p/chrome|x64", "perf-x64"), + ("fuchsia-cast-astro", "gardener|hardware|cast", "ast"), + ("fuchsia-cast-nelson", "gardener|hardware|cast", "nsn"), + ("fuchsia-cast-sherlock", "gardener|hardware|cast", "sher"), ("fuchsia-fyi-arm64-size", "gardener|p/chrome|arm64", "size"), ("fuchsia-fyi-astro", "gardener|hardware", "ast"), ("fuchsia-fyi-nelson", "gardener|hardware", "nsn"), @@ -176,6 +181,7 @@ ("fuchsia-perf-nsn", "gardener|hardware|perf", "nsn"), ("fuchsia-perf-shk", "gardener|hardware|perf", "sher"), ("fuchsia-x64", "gardener|p/chrome|x64", "rel"), + ("fuchsia-x64-nest-sd", "gardener|p/chrome|x64", "nest-x64"), )] exec("./ci/blink.infra.star")
diff --git a/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star index 5063f98..3b41ced9 100644 --- a/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star +++ b/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star
@@ -24,22 +24,6 @@ shadow_service_account = ci.DEFAULT_SHADOW_SERVICE_ACCOUNT, ) -consoles.console_view( - name = "chromium.fuchsia.fyi", -) - -# The chromium.fuchsia.fyi console includes some entries for builders from the chrome project. -[branches.console_view_entry( - console_view = "chromium.fuchsia.fyi", - builder = "chrome:ci/{}".format(name), - category = category, - short_name = short_name, -) for name, category, short_name in ( - ("fuchsia-builder-perf-x64", "p/chrome|x64", "perf-bld"), - ("fuchsia-fyi-arm64-size", "p/chrome|arm64", "size"), - ("fuchsia-x64", "p/chrome|x64", "rel"), -)] - ci.builder( name = "fuchsia-fyi-arm64-dbg", builder_spec = builder_config.builder_spec( @@ -65,10 +49,6 @@ ), console_view_entry = [ consoles.console_view_entry( - category = "debug", - short_name = "arm64", - ), - consoles.console_view_entry( branch_selector = branches.selector.MAIN, console_view = "sheriff.fuchsia", category = "gardener|fuchsia ci|arm64", @@ -101,10 +81,6 @@ ), console_view_entry = [ consoles.console_view_entry( - category = "asan", - short_name = "x64", - ), - consoles.console_view_entry( branch_selector = branches.selector.MAIN, console_view = "sheriff.fuchsia", category = "gardener|fuchsia ci|x64", @@ -137,10 +113,6 @@ ), console_view_entry = [ consoles.console_view_entry( - category = "debug", - short_name = "x64", - ), - consoles.console_view_entry( branch_selector = branches.selector.MAIN, console_view = "sheriff.fuchsia", category = "gardener|fuchsia ci|x64", @@ -175,7 +147,9 @@ ), console_view_entry = [ consoles.console_view_entry( - category = "debug", + branch_selector = branches.selector.MAIN, + console_view = "sheriff.fuchsia", + category = "fyi", short_name = "x64-llemu", ), ],
diff --git a/infra/config/subprojects/chromium/ci/chromium.infra.star b/infra/config/subprojects/chromium/ci/chromium.infra.star index 6b2d51ce..d0f7bf1 100644 --- a/infra/config/subprojects/chromium/ci/chromium.infra.star +++ b/infra/config/subprojects/chromium/ci/chromium.infra.star
@@ -122,6 +122,12 @@ properties = { "$build/avd_packager": { "avd_configs": [ + "tools/android/avd/proto/creation/android_30_google_atd_x86.textpb", + "tools/android/avd/proto/creation/android_30_google_atd_x64.textpb", + "tools/android/avd/proto/creation/android_31_google_atd_x64.textpb", + "tools/android/avd/proto/creation/android_32_google_atd_x64.textpb", + "tools/android/avd/proto/creation/android_33_google_atd_x64.textpb", + # TODO(hypan): Using more specific names for the configs below. "tools/android/avd/proto/creation/generic_android19.textpb", "tools/android/avd/proto/creation/generic_android22.textpb", "tools/android/avd/proto/creation/generic_android23.textpb",
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star index 50cc8467..f9d7274 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
@@ -102,9 +102,7 @@ }, main_list_view = "try", tryjob = try_.job( - # TODO(b/277863839): increase percentage. - # TODO(b/294160948): Siso doesn't support cxx actions for lacros. - experiment_percentage = 0.01, + experiment_percentage = 10, ), )
diff --git a/infra/config/targets/basic_suites.star b/infra/config/targets/basic_suites.star index 2422073e..a88aeaee 100644 --- a/infra/config/targets/basic_suites.star +++ b/infra/config/targets/basic_suites.star
@@ -6642,7 +6642,7 @@ "--no-wpt-internal", ], swarming = targets.swarming( - shards = 15, + shards = 4, expiration_sec = 18000, hard_timeout_sec = 14400, ),
diff --git a/internal b/internal index b4e35d03..51b17dd 160000 --- a/internal +++ b/internal
@@ -1 +1 @@ -Subproject commit b4e35d03eabbf984521b008315144df3c1b6e22c +Subproject commit 51b17dd381f1ca4883e97b476749b20fdeebff1c
diff --git a/ios/build/bots/scripts/xcodebuild_runner.py b/ios/build/bots/scripts/xcodebuild_runner.py index 5391591..dd23a95 100644 --- a/ios/build/bots/scripts/xcodebuild_runner.py +++ b/ios/build/bots/scripts/xcodebuild_runner.py
@@ -182,7 +182,7 @@ erase_all_simulators() erase_all_simulators(XTDEVICE_FOLDER) if self.cert_path: - iossim_util.copy_trusted_certificate(self.cert_path, self.uuid) + iossim_util.copy_trusted_certificate(self.cert_path, self.udid) # ideally this should be the last step before running tests, because # it boots the simulator.
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd index 0bb67eb..9088af1e 100644 --- a/ios/chrome/app/strings/ios_chromium_strings.grd +++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -452,9 +452,6 @@ <message name="IDS_IOS_PARCEL_TRACKING_OPT_IN_TITLE" desc="Text for the title string of the parcel tracking opt-in half-sheet screen."> Auto-Track Your Packages on Chromium </message> - <message name="IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE" desc="Text for the subtitle string of the parcel tracking opt-in half-sheet screen."> - Chromium can detect the tracking numbers you input and track your packages on the New Tab Page while helping other shopping experiences from Chromium. - </message> <message name="IDS_IOS_POST_RESTORE_DEFAULT_BROWSER_PROMO_TITLE" desc="The text of the title for the post restore default browser promo."> Make Chromium Your Default Browser? </message>
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 deleted file mode 100644 index eeabe52..0000000 --- a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -139aae749449e420e44f9a2fcedd6816926fb5ea \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd index 7da9183..407042e 100644 --- a/ios/chrome/app/strings/ios_google_chrome_strings.grd +++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -452,9 +452,6 @@ <message name="IDS_IOS_PARCEL_TRACKING_OPT_IN_TITLE" desc="Text for the title string of the parcel tracking opt-in half-sheet screen."> Auto-Track Your Packages on Chrome </message> - <message name="IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE" desc="Text for the subtitle string of the parcel tracking opt-in half-sheet screen."> - Chrome can detect the tracking numbers you input and track your packages on the New Tab Page while helping other shopping experiences from Google. - </message> <message name="IDS_IOS_POST_RESTORE_DEFAULT_BROWSER_PROMO_TITLE" desc="The text of the title for the post restore default browser promo."> Make Chrome Your Default Browser? </message>
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 deleted file mode 100644 index 7cf9f4a..0000000 --- a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e09e671d74ea2c88d669d35629b242fa613dcbdd \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 9de885e..ba88b97 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1366,6 +1366,15 @@ <message name="IDS_IOS_GOOGLE_SERVICES_SETTINGS_TITLE" desc="Title for the view in the Settings for enabling/disabling Google services. [Length: 26em] [iOS only]"> Google Services </message> + <message name="IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_ALL" desc="Parcel tracking feature option to turn on auto-track for all detected packages. [iOS only]"> + Auto-track all Detected Packages + </message> + <message name="IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_NEVER" desc="Parcel tracking feature option to never auto-track for all detected packages. [iOS only]"> + Never Auto-detect Packages + </message> + <message name="IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_FOOTER" desc="Parcel tracking feature setting page footer detailing how the data is shared. [iOS only]"> + Chrome will detect package tracking numbers on sites you visit and show you package updates on the New Tab page. Your data will be shared with Google to provide this feature and to improve Shopping for everyone. + </message> <message name="IDS_IOS_GOOGLE_SYNC_SETTINGS_TITLE" desc="Title for the view in the Settings for enabling/disabling Sync. [Length: 26em] [iOS only]"> Sync </message> @@ -2231,6 +2240,9 @@ <message name="IDS_IOS_PARCEL_TRACKING_OPT_IN_SECONDARY_ACTION" desc="Text for the secondary action string of the parcel tracking opt-in half-sheet screen."> No, Thanks </message> + <message name="IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE" desc="Text for the subtitle string of the parcel tracking opt-in half-sheet screen."> + Chrome will detect tracking numbers on sites you visit and show you package updates on the New Tab page. Your data will be shared with Google to provide this feature and to improve Shopping for everyone. You can change this in <ph name="BEGIN_LINK">BEGIN_LINK</ph>Package Tracking Settings<ph name="END_LINK">END_LINK</ph>. + </message> <message name="IDS_IOS_PARCEL_TRACKING_OPT_IN_TERTIARY_ACTION" desc="Text for the tertiary action string of the parcel tracking opt-in half-sheet screen."> Ask me Every Time </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_ALL.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_ALL.png.sha1 new file mode 100644 index 0000000..f3ff016 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_ALL.png.sha1
@@ -0,0 +1 @@ +600bbf6af9eb92ac99ab27fd9f906296f1e9a995 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_FOOTER.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_FOOTER.png.sha1 new file mode 100644 index 0000000..f3ff016 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_FOOTER.png.sha1
@@ -0,0 +1 @@ +600bbf6af9eb92ac99ab27fd9f906296f1e9a995 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_NEVER.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_NEVER.png.sha1 new file mode 100644 index 0000000..f3ff016 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_GOOGLE_SERVICES_SETTINGS_AUTO_TRACK_PACKAGES_NEVER.png.sha1
@@ -0,0 +1 @@ +600bbf6af9eb92ac99ab27fd9f906296f1e9a995 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1 new file mode 100644 index 0000000..188cf4e5 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PARCEL_TRACKING_OPT_IN_SUBTITLE.png.sha1
@@ -0,0 +1 @@ +07e14b36db360bacac24f323dc17dc882de5a639 \ No newline at end of file
diff --git a/ios/chrome/browser/parcel_tracking/BUILD.gn b/ios/chrome/browser/parcel_tracking/BUILD.gn index 94ec871..89e298d 100644 --- a/ios/chrome/browser/parcel_tracking/BUILD.gn +++ b/ios/chrome/browser/parcel_tracking/BUILD.gn
@@ -19,7 +19,11 @@ ":parcel_tracking_step", ":util", "//base", + "//components/commerce/core:proto", + "//components/commerce/core:shopping_service", "//components/infobars/core", + "//ios/chrome/browser/commerce/model:shopping_service", + "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/web/annotations", "//ios/web/public", @@ -50,12 +54,16 @@ deps = [ ":prefs", "//base", + "//components/commerce/core:proto", + "//components/commerce/core:shopping_service", "//components/prefs", "//components/signin/public/base", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/signin", + "//ios/web/public/annotations:custom_text_check_result", ] }
diff --git a/ios/chrome/browser/parcel_tracking/DEPS b/ios/chrome/browser/parcel_tracking/DEPS index 323b0cb..8bdf178b 100644 --- a/ios/chrome/browser/parcel_tracking/DEPS +++ b/ios/chrome/browser/parcel_tracking/DEPS
@@ -1,3 +1,4 @@ include_rules = [ "+ios/chrome/browser/signin", + "+ios/chrome/browser/commerce/model", ] \ No newline at end of file
diff --git a/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.h b/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.h index b8bf54b4..10e7a86 100644 --- a/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.h +++ b/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.h
@@ -7,12 +7,15 @@ #import "components/infobars/core/confirm_infobar_delegate.h" #import "ios/chrome/browser/parcel_tracking/parcel_tracking_step.h" -#import "ios/chrome/browser/parcel_tracking/parcel_tracking_util.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h" #import "ios/chrome/browser/shared/public/commands/parcel_tracking_opt_in_commands.h" #import "ios/web/public/annotations/custom_text_checking_result.h" #import "ios/web/public/web_state.h" +namespace commerce { +class ShoppingService; +} // namespace commerce + // Delegate for infobar that prompts users to track package(s) and updates them // when the package(s) are tracked or untracked. class ParcelTrackingInfobarDelegate : public ConfirmInfoBarDelegate { @@ -52,6 +55,7 @@ NSArray<CustomTextCheckingResult*>* parcel_list_; id<ApplicationCommands> application_commands_handler_; id<ParcelTrackingOptInCommands> parcel_tracking_commands_handler_; + commerce::ShoppingService* shopping_service_ = nullptr; }; #endif // IOS_CHROME_BROWSER_PARCEL_TRACKING_PARCEL_TRACKING_INFOBAR_DELEGATE_H_
diff --git a/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm b/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm index 3abf9e0..44ce73e 100644 --- a/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm +++ b/ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.mm
@@ -4,7 +4,11 @@ #import "ios/chrome/browser/parcel_tracking/parcel_tracking_infobar_delegate.h" +#import "components/commerce/core/proto/parcel.pb.h" +#import "components/commerce/core/shopping_service.h" +#import "ios/chrome/browser/commerce/model/shopping_service_factory.h" #import "ios/chrome/browser/parcel_tracking/parcel_tracking_util.h" +#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/shared/public/commands/open_new_tab_command.h" @@ -18,30 +22,32 @@ step_(step), parcel_list_(parcel_list), application_commands_handler_(application_commands_handler), - parcel_tracking_commands_handler_(parcel_tracking_commands_handler) {} + parcel_tracking_commands_handler_(parcel_tracking_commands_handler) { + shopping_service_ = commerce::ShoppingServiceFactory::GetForBrowserState( + web_state->GetBrowserState()); +} ParcelTrackingInfobarDelegate::~ParcelTrackingInfobarDelegate() = default; #pragma mark - Public void ParcelTrackingInfobarDelegate::TrackPackages(bool display_infobar) { - if (display_infobar) { - [parcel_tracking_commands_handler_ - showParcelTrackingInfobarWithParcels:parcel_list_ - forStep:ParcelTrackingStep:: - kNewPackageTracked]; - } - // TODO(crbug.com/1473449): track once Shopping Service API is ready. + // Track parcels and display infobar. + TrackParcels(shopping_service_, parcel_list_, std::string(), + parcel_tracking_commands_handler_, display_infobar); } void ParcelTrackingInfobarDelegate::UntrackPackages(bool display_infobar) { + for (std::pair<commerce::ParcelIdentifier::Carrier, std::string> parcel : + ConvertCustomTextCheckingResult(parcel_list_)) { + shopping_service_->StopTrackingParcel(parcel.second, base::DoNothing()); + } if (display_infobar) { [parcel_tracking_commands_handler_ showParcelTrackingInfobarWithParcels:parcel_list_ forStep:ParcelTrackingStep:: kPackageUntracked]; } - // TODO(crbug.com/1473449): untrack once Shopping Service API is ready. } void ParcelTrackingInfobarDelegate::OpenNTP() {
diff --git a/ios/chrome/browser/parcel_tracking/parcel_tracking_util.h b/ios/chrome/browser/parcel_tracking/parcel_tracking_util.h index 97d2c242..d254810 100644 --- a/ios/chrome/browser/parcel_tracking/parcel_tracking_util.h +++ b/ios/chrome/browser/parcel_tracking/parcel_tracking_util.h
@@ -6,9 +6,17 @@ #define IOS_CHROME_BROWSER_PARCEL_TRACKING_PARCEL_TRACKING_UTIL_H_ #import "base/feature_list.h" +#import "components/commerce/core/proto/parcel.pb.h" +#import "ios/web/public/annotations/custom_text_checking_result.h" class ChromeBrowserState; +namespace commerce { +class ShoppingService; +} // namespace commerce + +@protocol ParcelTrackingOptInCommands; + // Feature flag to enable the parcel tracking feature. BASE_DECLARE_FEATURE(kIOSParcelTracking); @@ -26,4 +34,18 @@ // The user must have never before seen the prompt and must be signed in. bool IsUserEligibleParcelTrackingOptInPrompt(ChromeBrowserState* browser_state); +// Takes NSArray<CustomTextCheckingResult*>* `result` and returns a +// corresponding vector of parcel carrier and tracking number pairs. +std::vector<std::pair<commerce::ParcelIdentifier::Carrier, std::string>> +ConvertCustomTextCheckingResult(NSArray<CustomTextCheckingResult*>* result); + +// Tracks the list of parcels. If successful and `display_infobar` is true, +// triggers an infobar display. +void TrackParcels( + commerce::ShoppingService* shopping_service, + NSArray<CustomTextCheckingResult*>* parcels, + std::string domain, + id<ParcelTrackingOptInCommands> parcel_tracking_commands_handler, + bool display_infobar); + #endif // IOS_CHROME_BROWSER_PARCEL_TRACKING_PARCEL_TRACKING_UTIL_H_
diff --git a/ios/chrome/browser/parcel_tracking/parcel_tracking_util.mm b/ios/chrome/browser/parcel_tracking/parcel_tracking_util.mm index d9939f2..6ac73d6 100644 --- a/ios/chrome/browser/parcel_tracking/parcel_tracking_util.mm +++ b/ios/chrome/browser/parcel_tracking/parcel_tracking_util.mm
@@ -4,12 +4,21 @@ #import "ios/chrome/browser/parcel_tracking/parcel_tracking_util.h" +#import <string> +#import <vector> + +#import "base/functional/bind.h" +#import "base/functional/callback_helpers.h" +#import "base/strings/sys_string_conversions.h" +#import "components/commerce/core/commerce_types.h" +#import "components/commerce/core/shopping_service.h" #import "components/prefs/pref_service.h" #import "components/signin/public/base/consent_level.h" #import "ios/chrome/browser/parcel_tracking/parcel_tracking_prefs.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" +#import "ios/chrome/browser/shared/public/commands/parcel_tracking_opt_in_commands.h" #import "ios/chrome/browser/signin/authentication_service.h" #import "ios/chrome/browser/signin/authentication_service_factory.h" @@ -37,3 +46,40 @@ prefs::kIosParcelTrackingOptInPromptDisplayed) && signed_in; } + +std::vector<std::pair<commerce::ParcelIdentifier::Carrier, std::string>> +ConvertCustomTextCheckingResult(NSArray<CustomTextCheckingResult*>* result) { + std::vector<std::pair<commerce::ParcelIdentifier::Carrier, std::string>> + new_parcel_list; + for (CustomTextCheckingResult* parcel : result) { + commerce::ParcelIdentifier::Carrier carrier = + static_cast<commerce::ParcelIdentifier::Carrier>(parcel.carrier); + std::string tracking_number = base::SysNSStringToUTF8(parcel.carrierNumber); + new_parcel_list.push_back(std::make_pair(carrier, tracking_number)); + } + return new_parcel_list; +} + +void TrackParcels( + commerce::ShoppingService* shopping_service, + NSArray<CustomTextCheckingResult*>* parcels, + std::string domain, + id<ParcelTrackingOptInCommands> parcel_tracking_commands_handler, + bool display_infobar) { + shopping_service->StartTrackingParcels( + ConvertCustomTextCheckingResult(parcels), domain, + base::BindOnce( + [](bool display_infobar, + id<ParcelTrackingOptInCommands> parcel_tracking_commands_handler, + NSArray<CustomTextCheckingResult*>* parcels, bool success, + std::unique_ptr<std::vector<commerce::ParcelTrackingStatus>> + parcel_status) { + if (success && display_infobar) { + [parcel_tracking_commands_handler + showParcelTrackingInfobarWithParcels:parcels + forStep:ParcelTrackingStep:: + kNewPackageTracked]; + } + }, + display_infobar, parcel_tracking_commands_handler, parcels)); +}
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn index b49872a7..95df30f3 100644 --- a/ios/chrome/browser/ui/browser_view/BUILD.gn +++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -24,6 +24,7 @@ "//base", "//base:i18n", "//components/bookmarks/browser", + "//components/commerce/core:shopping_service", "//components/feature_engagement/public", "//components/image_fetcher/ios", "//components/language/ios/browser", @@ -50,6 +51,7 @@ "//ios/chrome/browser/autofill/bottom_sheet", "//ios/chrome/browser/bookmarks/model", "//ios/chrome/browser/browser_state_metrics/model", + "//ios/chrome/browser/commerce/model:shopping_service", "//ios/chrome/browser/commerce/model/price_notifications", "//ios/chrome/browser/commerce/model/push_notification", "//ios/chrome/browser/content_settings/model",
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index 0f5d5a4..4ba56ec 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -10,6 +10,7 @@ #import "base/metrics/histogram_functions.h" #import "base/scoped_observation.h" #import "base/strings/sys_string_conversions.h" +#import "components/commerce/core/shopping_service.h" #import "components/content_settings/core/browser/host_content_settings_map.h" #import "components/feature_engagement/public/event_constants.h" #import "components/feature_engagement/public/tracker.h" @@ -26,6 +27,7 @@ #import "ios/chrome/browser/app_launcher/model/app_launcher_abuse_detector.h" #import "ios/chrome/browser/app_launcher/model/app_launcher_tab_helper.h" #import "ios/chrome/browser/commerce/model/push_notification/push_notification_feature.h" +#import "ios/chrome/browser/commerce/model/shopping_service_factory.h" #import "ios/chrome/browser/content_settings/model/host_content_settings_map_factory.h" #import "ios/chrome/browser/credential_provider_promo/model/features.h" #import "ios/chrome/browser/default_browser/utils.h" @@ -2397,19 +2399,27 @@ static_cast<IOSParcelTrackingOptInStatus>( self.browser->GetBrowserState()->GetPrefs()->GetInteger( prefs::kIosParcelTrackingOptInStatus)); - ParcelTrackingStep step; switch (optInStatus) { - case IOSParcelTrackingOptInStatus::kAlwaysTrack: - step = ParcelTrackingStep::kNewPackageTracked; + case IOSParcelTrackingOptInStatus::kAlwaysTrack: { + commerce::ShoppingService* shoppingService = + commerce::ShoppingServiceFactory::GetForBrowserState( + self.activeWebState->GetBrowserState()); + // Track parcels and display infobar if successful. + TrackParcels( + shoppingService, parcels, std::string(), + HandlerForProtocol(self.dispatcher, ParcelTrackingOptInCommands), + /*display_infobar=*/true); break; + } case IOSParcelTrackingOptInStatus::kAskToTrack: - step = ParcelTrackingStep::kAskedToTrackPackage; + [self showParcelTrackingInfobarWithParcels:parcels + forStep:ParcelTrackingStep:: + kAskedToTrackPackage]; break; case IOSParcelTrackingOptInStatus::kNeverTrack: // Do not display infobar. - return; + break; } - [self showParcelTrackingInfobarWithParcels:parcels forStep:step]; } - (void)showParcelTrackingOptInPromptWithParcels:
diff --git a/ios/chrome/browser/ui/parcel_tracking/BUILD.gn b/ios/chrome/browser/ui/parcel_tracking/BUILD.gn index 6cc9a5f..5868a52 100644 --- a/ios/chrome/browser/ui/parcel_tracking/BUILD.gn +++ b/ios/chrome/browser/ui/parcel_tracking/BUILD.gn
@@ -12,13 +12,17 @@ deps = [ ":parcel_tracking_ui", "//base", + "//components/commerce/core:shopping_service", "//components/prefs", + "//ios/chrome/browser/commerce/model:shopping_service", "//ios/chrome/browser/parcel_tracking:metrics", + "//ios/chrome/browser/parcel_tracking:parcel_tracking_step", "//ios/chrome/browser/parcel_tracking:util", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/public/commands", "//ios/chrome/common/ui/confirmation_alert", "//ios/web/public", "//ios/web/public/annotations:custom_text_check_result",
diff --git a/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_coordinator.mm b/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_coordinator.mm index 61efe192..6eb1772e 100644 --- a/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_coordinator.mm +++ b/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_coordinator.mm
@@ -11,6 +11,7 @@ #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" +#import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.h" #import "ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_view_controller.h" @@ -37,6 +38,8 @@ - (void)start { [super start]; _mediator = [[ParcelTrackingOptInMediator alloc] initWithWebState:_webState]; + _mediator.parcelTrackingCommandsHandler = HandlerForProtocol( + self.browser->GetCommandDispatcher(), ParcelTrackingOptInCommands); _viewController = [[ParcelTrackingOptInViewController alloc] init]; _viewController.actionHandler = self; [self.baseViewController presentViewController:_viewController
diff --git a/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.h b/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.h index c91efd1..b883b07 100644 --- a/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.h +++ b/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.h
@@ -7,12 +7,17 @@ #import <Foundation/Foundation.h> +#import "ios/chrome/browser/shared/public/commands/parcel_tracking_opt_in_commands.h" #import "ios/web/public/annotations/custom_text_checking_result.h" #import "ios/web/public/web_state.h" // Mediator for parcel tracking opt-in prompt that manages model interactions. @interface ParcelTrackingOptInMediator : NSObject +// Handler for ParcelTrackingOptInCommands. +@property(nonatomic, weak) id<ParcelTrackingOptInCommands> + parcelTrackingCommandsHandler; + // Designated initializer. `webState` should not be null. - (instancetype)initWithWebState:(web::WebState*)webState NS_DESIGNATED_INITIALIZER;
diff --git a/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.mm b/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.mm index df5d7c5..1c84dac 100644 --- a/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.mm +++ b/ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.mm
@@ -4,6 +4,12 @@ #import "ios/chrome/browser/ui/parcel_tracking/parcel_tracking_opt_in_mediator.h" +#import "components/commerce/core/shopping_service.h" +#import "ios/chrome/browser/commerce/model/shopping_service_factory.h" +#import "ios/chrome/browser/parcel_tracking/parcel_tracking_step.h" +#import "ios/chrome/browser/parcel_tracking/parcel_tracking_util.h" +#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" + @implementation ParcelTrackingOptInMediator { web::WebState* _webState; } @@ -18,14 +24,19 @@ - (void)didTapPrimaryActionButton: (NSArray<CustomTextCheckingResult*>*)parcelList { - // TODO(crbug.com/1473449): Call on AnnotationsTabHelper to track parcels once - // Shopping Service API is ready. - // TODO(crbug.com/1473449): trigger infobar. + commerce::ShoppingService* shoppingService = + commerce::ShoppingServiceFactory::GetForBrowserState( + _webState->GetBrowserState()); + TrackParcels(shoppingService, parcelList, std::string(), + _parcelTrackingCommandsHandler, true); } - (void)didTapTertiaryActionButton: (NSArray<CustomTextCheckingResult*>*)parcelList { - // TODO(crbug.com/1473449): trigger infobar. + [_parcelTrackingCommandsHandler + showParcelTrackingInfobarWithParcels:parcelList + forStep:ParcelTrackingStep:: + kAskedToTrackPackage]; } @end
diff --git a/ios/chrome/browser/ui/tabs/BUILD.gn b/ios/chrome/browser/ui/tabs/BUILD.gn index c04a98e..a4e0dc6 100644 --- a/ios/chrome/browser/ui/tabs/BUILD.gn +++ b/ios/chrome/browser/ui/tabs/BUILD.gn
@@ -45,6 +45,7 @@ "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/browser_state", + "//ios/chrome/browser/shared/model/url", "//ios/chrome/browser/shared/model/web_state_list", "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/shared/public/features", @@ -56,6 +57,7 @@ "//ios/chrome/browser/snapshots", "//ios/chrome/browser/ui/bookmarks", "//ios/chrome/browser/ui/bubble", + "//ios/chrome/browser/ui/content_suggestions:feature_flags", "//ios/chrome/browser/ui/fullscreen", "//ios/chrome/browser/ui/menu", "//ios/chrome/browser/ui/popup_menu/public",
diff --git a/ios/chrome/browser/ui/tabs/DEPS b/ios/chrome/browser/ui/tabs/DEPS index dfe1a1a..d2329668 100644 --- a/ios/chrome/browser/ui/tabs/DEPS +++ b/ios/chrome/browser/ui/tabs/DEPS
@@ -2,4 +2,5 @@ "+ios/chrome/browser/ui/bubble", "+ios/chrome/browser/ui/fullscreen", "+ios/chrome/browser/ui/tab_switcher", + "+ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h", ]
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm index 5b4b981..5fa0615 100644 --- a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm +++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
@@ -30,6 +30,7 @@ #import "ios/chrome/browser/shared/coordinator/scene/scene_state_browser_agent.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" +#import "ios/chrome/browser/shared/model/url/url_util.h" #import "ios/chrome/browser/shared/model/web_state_list/all_web_state_observation_forwarder.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list_observer_bridge.h" @@ -51,6 +52,7 @@ #import "ios/chrome/browser/tabs/tab_title_util.h" #import "ios/chrome/browser/ui/bubble/bubble_util.h" #import "ios/chrome/browser/ui/bubble/bubble_view.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h" #import "ios/chrome/browser/ui/fullscreen/scoped_fullscreen_disabler.h" #import "ios/chrome/browser/ui/tab_switcher/tab_utils.h" #import "ios/chrome/browser/ui/tabs/requirements/tab_strip_constants.h" @@ -68,6 +70,7 @@ #import "ios/chrome/common/ui/util/ui_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/public/provider/chrome/browser/fullscreen/fullscreen_api.h" +#import "ios/web/public/navigation/navigation_context.h" #import "ios/web/public/navigation/navigation_manager.h" #import "ios/web/public/web_state.h" #import "ios/web/public/web_state_observer_bridge.h" @@ -682,6 +685,11 @@ [view setIncognitoStyle:(_style == INCOGNITO)]; [view setContentMode:UIViewContentModeRedraw]; [self updateTabView:view withWebState:webState]; + if (IsMagicStackEnabled()) { + // webstate:didStartNavigation: for `view` is slow to be called on startup, + // so update the coloring sooner. + [view setShowingNTP:IsVisibleURLNewTabPage(webState)]; + } // Install a long press gesture recognizer to handle drag and drop. UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] @@ -1189,6 +1197,21 @@ [view setNeedsDisplay]; } +- (void)webState:(web::WebState*)webState didLoadPageWithSuccess:(BOOL)success { + if (IsMagicStackEnabled() && IsUrlNtp(webState->GetVisibleURL())) { + TabView* view = [self tabViewForWebState:webState]; + [view setShowingNTP:YES]; + } +} + +- (void)webState:(web::WebState*)webState + didStartNavigation:(web::NavigationContext*)navigationContext { + if (IsMagicStackEnabled()) { + TabView* view = [self tabViewForWebState:webState]; + [view setShowingNTP:IsUrlNtp(navigationContext->GetUrl())]; + } +} + #pragma mark - WebStateListObserving methods - (void)didChangeWebStateList:(WebStateList*)webStateList @@ -1279,6 +1302,7 @@ NSUInteger index = [self indexForWebStateListIndex:webStateList->active_index()]; + TabView* activeView = [_tabArray objectAtIndex:index]; [activeView setSelected:YES];
diff --git a/ios/chrome/browser/ui/tabs/tab_view.h b/ios/chrome/browser/ui/tabs/tab_view.h index 3f9e95a..2a9c34d 100644 --- a/ios/chrome/browser/ui/tabs/tab_view.h +++ b/ios/chrome/browser/ui/tabs/tab_view.h
@@ -34,6 +34,8 @@ - (void)startProgressSpinner; // Stops the progress spinner animation. - (void)stopProgressSpinner; +// Updates the view for a `showingNTP` state. +- (void)setShowingNTP:(BOOL)showingNTP; @end
diff --git a/ios/chrome/browser/ui/tabs/tab_view.mm b/ios/chrome/browser/ui/tabs/tab_view.mm index 1b446e5..8d6e5d0 100644 --- a/ios/chrome/browser/ui/tabs/tab_view.mm +++ b/ios/chrome/browser/ui/tabs/tab_view.mm
@@ -16,6 +16,7 @@ #import "ios/chrome/browser/shared/ui/util/image/image_util.h" #import "ios/chrome/browser/shared/ui/util/rtl_geometry.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h" #import "ios/chrome/common/button_configuration_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/elements/highlight_button.h" @@ -85,6 +86,8 @@ // Adds hover interaction to background tabs. UIPointerInteraction* _pointerInteraction; + + BOOL _showingNTP; } @end @@ -193,6 +196,14 @@ [_faviconView setHidden:NO]; } +- (void)setShowingNTP:(BOOL)showingNTP { + if (_showingNTP == showingNTP) { + return; + } + _showingNTP = showingNTP; + [self updateStyleForSelected:self.selected]; +} + #pragma mark - UIView overrides - (void)setFrame:(CGRect)frame { @@ -360,7 +371,14 @@ // Style the background image first. NSString* state = (selected ? @"foreground" : @"background"); NSString* imageName = [NSString stringWithFormat:@"tabstrip_%@_tab", state]; - _backgroundImageView.image = [UIImage imageNamed:imageName]; + if (selected && IsMagicStackEnabled() && _showingNTP) { + _backgroundImageView.image = [[UIImage imageNamed:imageName] + imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + _backgroundImageView.tintColor = + [UIColor colorNamed:@"ntp_background_color"]; + } else { + _backgroundImageView.image = [UIImage imageNamed:imageName]; + } if (selected) { if (_pointerInteraction)
diff --git a/ios/chrome/browser/ui/toolbar/BUILD.gn b/ios/chrome/browser/ui/toolbar/BUILD.gn index 519966a..2e6bacf3 100644 --- a/ios/chrome/browser/ui/toolbar/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/BUILD.gn
@@ -125,6 +125,7 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/symbols", "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/browser/ui/content_suggestions:feature_flags", "//ios/chrome/browser/ui/fullscreen", "//ios/chrome/browser/ui/fullscreen:ui", "//ios/chrome/browser/ui/keyboard",
diff --git a/ios/chrome/browser/ui/toolbar/DEPS b/ios/chrome/browser/ui/toolbar/DEPS index ecd61fb..94bf5b3 100644 --- a/ios/chrome/browser/ui/toolbar/DEPS +++ b/ios/chrome/browser/ui/toolbar/DEPS
@@ -13,4 +13,5 @@ "+ios/chrome/browser/ui/ntp/new_tab_page_controller_delegate.h", "+ios/chrome/browser/ui/sharing", "+ios/chrome/browser/ui/ntp/new_tab_page_util.h", + "+ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h", ]
diff --git a/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm index af8440a..6ffcf9f 100644 --- a/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm +++ b/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm
@@ -17,6 +17,7 @@ #import "ios/chrome/browser/shared/ui/util/layout_guide_names.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/shared/ui/util/util_swift.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_animator.h" #import "ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h" #import "ios/chrome/browser/ui/omnibox/omnibox_ui_features.h" @@ -156,6 +157,23 @@ self.view.topCornersRounded = NO; [self.delegate viewControllerTraitCollectionDidChange:previousTraitCollection]; + + if (previousTraitCollection.horizontalSizeClass != + self.traitCollection.horizontalSizeClass || + previousTraitCollection.verticalSizeClass != + self.traitCollection.verticalSizeClass) { + if (IsMagicStackEnabled()) { + // When on the Home surface, if the toolbar is now visible (i.e. rotated + // to landscape on iphone), then have its background color match the + // surface. If rotated back to portrait mode, make sure to reset the + // background color so navigations away from the Home surface result in + // the default toolbar background color. + self.view.backgroundColor = + (_isNTP && !IsSplitToolbarMode(self)) + ? [UIColor colorNamed:@"ntp_background_color"] + : self.buttonFactory.toolbarConfiguration.NTPBackgroundColor; + } + } } #pragma mark - UIResponder @@ -185,6 +203,11 @@ if (IsSplitToolbarMode(self) || !self.shouldHideOmniboxOnNTP) return; + if (IsMagicStackEnabled()) { + self.view.backgroundColor = + _isNTP ? [UIColor colorNamed:@"ntp_background_color"] + : self.buttonFactory.toolbarConfiguration.NTPBackgroundColor; + } // This is hiding/showing and positionning the omnibox. This is only needed // if the omnibox should be hidden when there is only one toolbar. if (!isNTP) {
diff --git a/ios/third_party/earl_grey2/src b/ios/third_party/earl_grey2/src index bbf8b94..7bad4a3e 160000 --- a/ios/third_party/earl_grey2/src +++ b/ios/third_party/earl_grey2/src
@@ -1 +1 @@ -Subproject commit bbf8b94d59079db24bc49ca3aa03ed860f53a3d0 +Subproject commit 7bad4a3eeb8536e0bf0aa7b8768ef8fed527b943
diff --git a/ios_internal b/ios_internal index d1898d6f..f0d8215 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit d1898d6f4bafeaedb7e6d9e61ace74701449b609 +Subproject commit f0d821553c841aa2c7d0ddbfd879a7d8943a5dec
diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc index b4a6d6b5..2c2a5a0bcb 100644 --- a/media/base/decoder_buffer.cc +++ b/media/base/decoder_buffer.cc
@@ -118,24 +118,22 @@ } // static -bool DecoderBuffer::DoSubsamplesMatch(const DecoderBuffer& encrypted) { +bool DecoderBuffer::DoSubsamplesMatch(const DecoderBuffer& buffer) { // If buffer is at end of stream, no subsamples to verify - if (encrypted.end_of_stream()) { + if (buffer.end_of_stream()) { return true; } // If stream is unencrypted, we do not have to verify subsamples size. - const DecryptConfig* decrypt_config = encrypted.decrypt_config(); - if (decrypt_config == nullptr || - decrypt_config->encryption_scheme() == EncryptionScheme::kUnencrypted) { + if (!buffer.is_encrypted()) { return true; } - const auto& subsamples = decrypt_config->subsamples(); + const auto& subsamples = buffer.decrypt_config()->subsamples(); if (subsamples.empty()) { return true; } - return VerifySubsamplesMatchSize(subsamples, encrypted.data_size()); + return VerifySubsamplesMatchSize(subsamples, buffer.data_size()); } DecoderBufferSideData& DecoderBuffer::WritableSideData() {
diff --git a/media/base/decoder_buffer.h b/media/base/decoder_buffer.h index 05be990..673e6850 100644 --- a/media/base/decoder_buffer.h +++ b/media/base/decoder_buffer.h
@@ -129,7 +129,7 @@ static scoped_refptr<DecoderBuffer> CreateEOSBuffer(); // Method to verify if subsamples of a DecoderBuffer match. - static bool DoSubsamplesMatch(const DecoderBuffer& encrypted); + static bool DoSubsamplesMatch(const DecoderBuffer& buffer); const TimeInfo& time_info() const { DCHECK(!end_of_stream()); @@ -216,6 +216,12 @@ return is_key_frame_; } + bool is_encrypted() const { + DCHECK(!end_of_stream()); + return decrypt_config() && decrypt_config()->encryption_scheme() != + EncryptionScheme::kUnencrypted; + } + void set_is_key_frame(bool is_key_frame) { DCHECK(!end_of_stream()); is_key_frame_ = is_key_frame;
diff --git a/media/base/decoder_buffer_unittest.cc b/media/base/decoder_buffer_unittest.cc index 3ce6da4..bda0906 100644 --- a/media/base/decoder_buffer_unittest.cc +++ b/media/base/decoder_buffer_unittest.cc
@@ -247,4 +247,23 @@ EXPECT_FALSE(buffer->has_side_data()); } +TEST(DecoderBufferTest, IsEncrypted) { + scoped_refptr<DecoderBuffer> buffer(new DecoderBuffer(0)); + EXPECT_FALSE(buffer->is_encrypted()); + + const char kKeyId[] = "key id"; + const char kIv[] = "0123456789abcdef"; + std::vector<SubsampleEntry> subsamples; + subsamples.emplace_back(10, 5); + subsamples.emplace_back(15, 7); + + std::unique_ptr<DecryptConfig> decrypt_config = + DecryptConfig::CreateCencConfig(kKeyId, kIv, subsamples); + + buffer->set_decrypt_config( + DecryptConfig::CreateCencConfig(kKeyId, kIv, subsamples)); + + EXPECT_TRUE(buffer->is_encrypted()); +} + } // namespace media
diff --git a/media/filters/demuxer_manager.cc b/media/filters/demuxer_manager.cc index c1d191cc..98bacf7 100644 --- a/media/filters/demuxer_manager.cc +++ b/media/filters/demuxer_manager.cc
@@ -383,7 +383,8 @@ #if BUILDFLAG(ENABLE_HLS_DEMUXER) if (hls_fallback_ == HlsFallbackImplementation::kBuiltinHlsPlayer || - loaded_url_.path_piece().ends_with(".m3u8")) { + (base::FeatureList::IsEnabled(kBuiltInHlsPlayer) && + loaded_url_.path_piece().ends_with(".m3u8"))) { SetDemuxer(CreateHlsDemuxer()); return std::move(on_demuxer_created) .Run(demuxer_.get(), suspended_mode, /*is_streaming=*/false,
diff --git a/media/renderers/win/media_foundation_stream_wrapper.cc b/media/renderers/win/media_foundation_stream_wrapper.cc index 3c43260..2e8252a 100644 --- a/media/renderers/win/media_foundation_stream_wrapper.cc +++ b/media/renderers/win/media_foundation_stream_wrapper.cc
@@ -453,9 +453,7 @@ } if (has_clear_lead_ && !switched_clear_to_encrypted_ && - !buffer->end_of_stream() && buffer->decrypt_config() && - buffer->decrypt_config()->encryption_scheme() != - EncryptionScheme::kUnencrypted) { + !buffer->end_of_stream() && buffer->is_encrypted()) { MEDIA_LOG(INFO, media_log_) << "Stream switched from clear to encrypted buffers."; switched_clear_to_encrypted_ = true;
diff --git a/mojo/public/tools/bindings/generators/ts_templates/enum_definition.tmpl b/mojo/public/tools/bindings/generators/ts_templates/enum_definition.tmpl index 63ca1c76..a4710e5 100644 --- a/mojo/public/tools/bindings/generators/ts_templates/enum_definition.tmpl +++ b/mojo/public/tools/bindings/generators/ts_templates/enum_definition.tmpl
@@ -2,15 +2,16 @@ export const {{enum|ts_type}}Spec: { $: mojo.internal.MojomType } = { $: mojo.internal.Enum() }; export enum {{enum|ts_type}} { -{%- for field in enum.fields %} - {{field.name}} = {{field.numeric_value}}, -{%- endfor %} +{# MIN_VALUE and MAX_VALUE need to be first to ensure that the reverse mapping will be correct. #} {%- if enum.min_value is not none %} MIN_VALUE = {{enum.min_value}}, {%- endif %} {%- if enum.max_value is not none %} MAX_VALUE = {{enum.max_value}}, {%- endif %} +{%- for field in enum.fields %} + {{field.name}} = {{field.numeric_value}}, +{%- endfor %} } {%- endmacro %}
diff --git a/net/base/registry_controlled_domains/registry_controlled_domain.cc b/net/base/registry_controlled_domains/registry_controlled_domain.cc index f61149f7..f83f9ac 100644 --- a/net/base/registry_controlled_domains/registry_controlled_domain.cc +++ b/net/base/registry_controlled_domains/registry_controlled_domain.cc
@@ -216,11 +216,10 @@ // These two functions append the given string as-is to the given output, // converting to UTF-8 if necessary. void AppendInvalidString(base::StringPiece str, url::CanonOutput* output) { - output->Append(str.data(), str.length()); + output->Append(str); } void AppendInvalidString(base::StringPiece16 str, url::CanonOutput* output) { - std::string utf8 = base::UTF16ToUTF8(str); - output->Append(utf8.data(), utf8.length()); + output->Append(base::UTF16ToUTF8(str)); } // Backend for PermissiveGetHostRegistryLength that handles both UTF-8 and
diff --git a/net/base/url_util.cc b/net/base/url_util.cc index 10a2d86e..1355259 100644 --- a/net/base/url_util.cc +++ b/net/base/url_util.cc
@@ -537,10 +537,9 @@ } // Run UTF-8 decoding without BOM on the percent-decoding. url::RawCanonOutputT<char16_t> canon_output; - url::DecodeURLEscapeSequences(result.data(), result.size(), - url::DecodeURLMode::kUTF8, &canon_output); - return base::UTF16ToUTF8( - base::StringPiece16(canon_output.data(), canon_output.length())); + url::DecodeURLEscapeSequences(result, url::DecodeURLMode::kUTF8, + &canon_output); + return base::UTF16ToUTF8(canon_output.view()); } } // namespace net
diff --git a/net/dns/dns_config_service_win.cc b/net/dns/dns_config_service_win.cc index b0736a6..1bc138b 100644 --- a/net/dns/dns_config_service_win.cc +++ b/net/dns/dns_config_service_win.cc
@@ -364,8 +364,9 @@ // Otherwise try to convert it from IDN to punycode. const int kInitialBufferSize = 256; url::RawCanonOutputT<char16_t, kInitialBufferSize> punycode; - if (!url::IDNToASCII(base::as_u16cstr(widestr), widestr.length(), &punycode)) + if (!url::IDNToASCII(base::AsStringPiece16(widestr), &punycode)) { return ""; + } // |punycode_output| should now be ASCII; convert it to a std::string. // (We could use UTF16ToASCII() instead, but that requires an extra string
diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc index 8c12086c..2607f6c 100644 --- a/net/dns/dns_transaction.cc +++ b/net/dns/dns_transaction.cc
@@ -1155,7 +1155,7 @@ DnsTransactionImpl(DnsSession* session, std::string hostname, uint16_t qtype, - const NetLogWithSource& net_log, + const NetLogWithSource& parent_net_log, const OptRecordRdata* opt_rdata, bool secure, SecureDnsMode secure_dns_mode, @@ -1168,11 +1168,14 @@ secure_(secure), secure_dns_mode_(secure_dns_mode), fast_timeout_(fast_timeout), - net_log_(net_log), + net_log_(NetLogWithSource::Make(NetLog::Get(), + NetLogSourceType::DNS_TRANSACTION)), resolve_context_(resolve_context->AsSafeRef()) { DCHECK(session_.get()); DCHECK(!hostname_.empty()); DCHECK(!IsIPLiteral(hostname_)); + parent_net_log.AddEventReferencingSource(NetLogEventType::DNS_TRANSACTION, + net_log_.source()); } DnsTransactionImpl(const DnsTransactionImpl&) = delete;
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc index 0d112c8..4b12901 100644 --- a/net/dns/dns_transaction_unittest.cc +++ b/net/dns/dns_transaction_unittest.cc
@@ -1026,8 +1026,8 @@ helper0.StartTransaction(transaction_factory_.get(), kT0HostName, kT0Qtype, false /* secure */, resolve_context_.get()); helper0.RunUntilComplete(); - EXPECT_EQ(observer.count(), 6); - EXPECT_EQ(observer.dict_count(), 4); + EXPECT_EQ(observer.count(), 7); + EXPECT_EQ(observer.dict_count(), 5); } TEST_F(DnsTransactionTest, LookupWithEDNSOption) { @@ -2656,8 +2656,8 @@ true /* secure */, resolve_context_.get()); helper0.RunUntilComplete(); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(observer.count(), 18); - EXPECT_EQ(observer.dict_count(), 9); + EXPECT_EQ(observer.count(), 19); + EXPECT_EQ(observer.dict_count(), 10); } // Test for when a slow DoH response is delayed until after the initial fallback @@ -3121,8 +3121,8 @@ helper0.StartTransaction(transaction_factory_.get(), kT0HostName, kT0Qtype, false /* secure */, resolve_context_.get()); helper0.RunUntilComplete(); - EXPECT_EQ(observer.count(), 8); - EXPECT_EQ(observer.dict_count(), 6); + EXPECT_EQ(observer.count(), 9); + EXPECT_EQ(observer.dict_count(), 7); } TEST_F(DnsTransactionTest, TcpLookup_LowEntropy) {
diff --git a/net/log/net_log_source_type_list.h b/net/log/net_log_source_type_list.h index 780ac01..a92dbfd 100644 --- a/net/log/net_log_source_type_list.h +++ b/net/log/net_log_source_type_list.h
@@ -45,6 +45,7 @@ SOURCE_TYPE(WEB_TRANSPORT_CLIENT) SOURCE_TYPE(NETWORK_SERVICE_HOST_RESOLVER) SOURCE_TYPE(DNS_OVER_HTTPS) +SOURCE_TYPE(DNS_TRANSACTION) SOURCE_TYPE(NETWORK_CHANGE_NOTIFIER) SOURCE_TYPE(QUIC_STREAM_FACTORY) SOURCE_TYPE(UDP_CLIENT_SOCKET)
diff --git a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_url_utils_impl.cc b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_url_utils_impl.cc index ca4a97c..c18b1af 100644 --- a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_url_utils_impl.cc +++ b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_url_utils_impl.cc
@@ -42,14 +42,12 @@ } absl::optional<std::string> AsciiUrlDecodeImpl(std::string_view input) { - std::string input_encoded = std::string(input); url::RawCanonOutputW<1024> canon_output; - url::DecodeURLEscapeSequences(input_encoded.c_str(), input_encoded.length(), - url::DecodeURLMode::kUTF8, &canon_output); + url::DecodeURLEscapeSequences(input, url::DecodeURLMode::kUTF8, + &canon_output); std::string output; output.reserve(canon_output.length()); - for (int i = 0; i < canon_output.length(); i++) { - const uint16_t c = reinterpret_cast<uint16_t*>(canon_output.data())[i]; + for (uint16_t c : canon_output.view()) { if (c > std::numeric_limits<signed char>::max()) { return absl::nullopt; }
diff --git a/remoting/host/linux/linux_me2me_host.py b/remoting/host/linux/linux_me2me_host.py index 048f1d2..fef9d5e 100755 --- a/remoting/host/linux/linux_me2me_host.py +++ b/remoting/host/linux/linux_me2me_host.py
@@ -551,9 +551,11 @@ class Desktop(abc.ABC): """Manage a single virtual desktop""" - def __init__(self, sizes, server_inhibitor=None, pipewire_inhibitor=None, - session_inhibitor=None, host_inhibitor=None): + def __init__(self, sizes, host_config, server_inhibitor=None, + pipewire_inhibitor=None, session_inhibitor=None, + host_inhibitor=None): self.sizes = sizes + self.host_config = host_config self.server_proc = None self.pipewire_proc = None self.pipewire_pulse_proc = None @@ -748,9 +750,10 @@ """ pass - def launch_host(self, host_config, extra_start_host_args, backoff_time): + def launch_host(self, extra_start_host_args, backoff_time): self._wait_for_setup_before_host_launch() logging.info("Launching host process") + # Start remoting host args = [HOST_BINARY_PATH, "--host-config=-"] if self.audio_pipe: @@ -777,7 +780,8 @@ raise Exception("Could not start Chrome Remote Desktop host") try: - self.host_proc.stdin.write(json.dumps(host_config.data).encode('UTF-8')) + self.host_proc.stdin.write( + json.dumps(self.host_config.data).encode('UTF-8')) self.host_proc.stdin.flush() except IOError as e: # This can occur in rare situations, for example, if the machine is @@ -837,7 +841,7 @@ self.host_proc = None self.crash_uploader_proc = None - def report_offline_reason(self, host_config, reason): + def report_offline_reason(self, reason): """Attempt to report the specified offline reason to the registry. This is best effort, and requires a valid host config. """ @@ -845,7 +849,7 @@ args = [HOST_BINARY_PATH, "--host-config=-", "--report-offline-reason=" + reason] proc = subprocess.Popen(args, env=self.child_env, stdin=subprocess.PIPE) - proc.communicate(json.dumps(host_config.data).encode('UTF-8')) + proc.communicate(json.dumps(self.host_config.data).encode('UTF-8')) def on_process_exit(self, pid, status): """Checks for which process has exited and whether or not the exit was @@ -934,31 +938,33 @@ if os.WIFEXITED(status): if os.WEXITSTATUS(status) == 100: logging.info("Host configuration is invalid - exiting.") - return 0 + sys.exit(0) elif os.WEXITSTATUS(status) == 101: logging.info("Host ID has been deleted - exiting.") - host_config.clear() - host_config.save_and_log_errors() - return 0 + self.host_config.clear() + self.host_config.save_and_log_errors() + sys.exit(0) elif os.WEXITSTATUS(status) == 102: logging.info("OAuth credentials are invalid - exiting.") - return 0 + sys.exit(0) elif os.WEXITSTATUS(status) == 103: logging.info("Host domain is blocked by policy - exiting.") - return 0 + sys.exit(0) # Nothing to do for Mac-only status 104 (login screen unsupported) elif os.WEXITSTATUS(status) == 105: logging.info("Username is blocked by policy - exiting.") - return 0 + sys.exit(0) elif os.WEXITSTATUS(status) == 106: logging.info("Host has been deleted - exiting.") - return 0 + self.host_config.clear() + self.host_config.save_and_log_errors() + sys.exit(0) elif os.WEXITSTATUS(status) == 107: logging.info("Remote access is disallowed by policy - exiting.") - return 0 + sys.exit(0) elif os.WEXITSTATUS(status) == 108: logging.info("This CPU is not supported - exiting.") - return 0 + sys.exit(0) else: logging.info("Host exited with status %s." % os.WEXITSTATUS(status)) elif os.WIFSIGNALED(status): @@ -1086,11 +1092,11 @@ # socket leak and we don't want to keep retrying forever. MAX_WAYLAND_SOCKET_NUM = 100 - def __init__(self, sizes): + def __init__(self, sizes, host_config): self.debug = False self._wayland_socket = None self._runtime_dir = None - super(WaylandDesktop, self).__init__(sizes) + super(WaylandDesktop, self).__init__(sizes, host_config) self.inhibitors[self.server_inhibitor] \ = HOST_OFFLINE_REASON_WAYLAND_SERVER_RETRIES_EXCEEDED global g_desktop @@ -1312,8 +1318,8 @@ class XDesktop(Desktop): """Manage a single virtual X desktop""" - def __init__(self, sizes): - super(XDesktop, self).__init__(sizes) + def __init__(self, sizes, host_config): + super(XDesktop, self).__init__(sizes, host_config) self.xorg_conf = None self.audio_pipe = None self.server_supports_randr = False @@ -2040,6 +2046,7 @@ self.host_config = host_config def __call__(self, signum, _stackframe): + logging.info("Caught signal: " + str(signum)) if signum == signal.SIGHUP: logging.info("SIGHUP caught, restarting host.") try: @@ -2508,9 +2515,9 @@ re.split('\s+', os.environ[HOST_EXTRA_PARAMS_ENV_VAR].strip()) is_wayland = any([opt == '--enable-wayland' for opt in extra_start_host_args]) if is_wayland: - desktop = WaylandDesktop(sizes) + desktop = WaylandDesktop(sizes, host_config) else: - desktop = XDesktop(sizes) + desktop = XDesktop(sizes, host_config) if is_googler_owned(host_config): desktop.enable_crash_reporting() @@ -2556,8 +2563,8 @@ else: logging.error("Too many launch failures of '%s', exiting." % inhibitor.label) - desktop.report_offline_reason(host_config, offline_reason) - return 1 + desktop.report_offline_reason(offline_reason) + sys.exit(1) elif inhibitor.failures >= SHORT_BACKOFF_THRESHOLD: backoff_time = LONG_BACKOFF_TIME @@ -2578,7 +2585,7 @@ desktop.session_proc is None): desktop.launch_session(options.args, backoff_time) if desktop.host_proc is None: - desktop.launch_host(host_config, extra_start_host_args, backoff_time) + desktop.launch_host(extra_start_host_args, backoff_time) if desktop.crash_uploader_proc is None: desktop.launch_crash_uploader(backoff_time)
diff --git a/sandbox/mac/BUILD.gn b/sandbox/mac/BUILD.gn index 5e9fc183..299a028 100644 --- a/sandbox/mac/BUILD.gn +++ b/sandbox/mac/BUILD.gn
@@ -23,6 +23,8 @@ sources = [ "sandbox_compiler.cc", "sandbox_compiler.h", + "sandbox_crash_message.cc", + "sandbox_crash_message.h", "sandbox_logging.cc", "sandbox_logging.h", "seatbelt.cc",
diff --git a/sandbox/mac/sandbox_crash_message.cc b/sandbox/mac/sandbox_crash_message.cc new file mode 100644 index 0000000..69bfab7c --- /dev/null +++ b/sandbox/mac/sandbox_crash_message.cc
@@ -0,0 +1,42 @@ +// 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 "sandbox/mac/sandbox_crash_message.h" + +#include <stdint.h> + +#include <string> + +// SPI from CrashReporterClient.h + +struct crashreporter_annotations_t { + uint64_t version; + const char* message; + uint64_t signature_string; + uint64_t backtrace; + uint64_t message2; + uint64_t thread; + uint64_t dialog_mode; + uint64_t abort_cause; +}; + +namespace { + +crashreporter_annotations_t annotation + __attribute__((section("__DATA,__crash_info"))) = {5, nullptr, 0, 0, + 0, 0, 0, 0}; + +} + +namespace sandbox::crash_message { + +void SetCrashMessage(const char* message) { + // Copy the message into a static string to ensure that the pointer stored in + // gCRAnnotations remains valid. + static std::string* eternal_crash_message = new std::string; + eternal_crash_message->assign(message); + annotation.message = eternal_crash_message->data(); +} + +} // namespace sandbox::crash_message
diff --git a/sandbox/mac/sandbox_crash_message.h b/sandbox/mac/sandbox_crash_message.h new file mode 100644 index 0000000..1d9e763 --- /dev/null +++ b/sandbox/mac/sandbox_crash_message.h
@@ -0,0 +1,23 @@ +// 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 SANDBOX_MAC_SANDBOX_CRASH_MESSAGE_H_ +#define SANDBOX_MAC_SANDBOX_CRASH_MESSAGE_H_ + +namespace sandbox::crash_message { + +// A simple wrapper around macOS's crash reporter annotations + +// We use macOS's crash reporter annotations rather than crash keys to avoid +// linking against //base. Sandbox should not link against libbase because +// libbase brings in numerous system libraries that increase the attack surface +// of the sandbox code. +// +// Both the system CrashReporter and Crashpad collect these annotations. + +void SetCrashMessage(const char* message); + +} // namespace sandbox::crash_message + +#endif // SANDBOX_MAC_SANDBOX_CRASH_MESSAGE_H_
diff --git a/sandbox/mac/sandbox_logging.cc b/sandbox/mac/sandbox_logging.cc index f52f1d1..095c639b 100644 --- a/sandbox/mac/sandbox_logging.cc +++ b/sandbox/mac/sandbox_logging.cc
@@ -16,6 +16,7 @@ #include <string> #include "build/build_config.h" +#include "sandbox/mac/sandbox_crash_message.h" #if defined(ARCH_CPU_X86_64) #define ABORT() \ @@ -71,6 +72,10 @@ os_log_with_type(log.get(), os_log_type, "%{public}s", message); + if (level == Level::ERR) { + sandbox::crash_message::SetCrashMessage(message); + } + if (level == Level::FATAL) { abort_report_np(message); }
diff --git a/services/data_decoder/public/cpp/data_decoder.cc b/services/data_decoder/public/cpp/data_decoder.cc index b711a26..25b05fa 100644 --- a/services/data_decoder/public/cpp/data_decoder.cc +++ b/services/data_decoder/public/cpp/data_decoder.cc
@@ -11,11 +11,13 @@ #include "base/functional/callback.h" #include "base/json/json_reader.h" #include "base/memory/ref_counted.h" +#include "base/metrics/histogram_functions.h" #include "base/no_destructor.h" #include "base/rust_buildflags.h" #include "base/task/sequenced_task_runner.h" #include "base/task/thread_pool.h" #include "base/time/time.h" +#include "base/timer/elapsed_timer.h" #include "build/blink_buildflags.h" #include "build/build_config.h" #include "net/http/structured_headers.h" @@ -192,6 +194,16 @@ void DataDecoder::ParseJson(const std::string& json, ValueParseCallback callback) { + // Measure decoding time by intercepting the callback. + callback = base::BindOnce( + [](base::ElapsedTimer timer, ValueParseCallback callback, + base::expected<base::Value, std::string> result) { + base::UmaHistogramTimes("Security.DataDecoder.Json.DecodingTime", + timer.Elapsed()); + std::move(callback).Run(std::move(result)); + }, + base::ElapsedTimer(), std::move(callback)); + if (base::JSONReader::UsingRust()) { #if BUILDFLAG(BUILD_RUST_JSON_READER) base::ThreadPool::PostTaskAndReplyWithResult(
diff --git a/services/data_decoder/public/cpp/data_decoder_unittest.cc b/services/data_decoder/public/cpp/data_decoder_unittest.cc index 581bb01..f0719eb 100644 --- a/services/data_decoder/public/cpp/data_decoder_unittest.cc +++ b/services/data_decoder/public/cpp/data_decoder_unittest.cc
@@ -12,6 +12,7 @@ #include "base/rust_buildflags.h" #include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/bind.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/types/expected.h" @@ -153,6 +154,7 @@ class DataDecoderMultiThreadTest : public testing::Test { protected: base::test::TaskEnvironment task_environment_; + base::HistogramTester histogram_tester_; }; TEST_F(DataDecoderMultiThreadTest, JSONDecode) { @@ -177,6 +179,8 @@ run_loop.Quit(); })); run_loop.Run(); + histogram_tester_.ExpectTotalCount("Security.DataDecoder.Json.DecodingTime", + 1); ASSERT_TRUE(result.has_value()); ASSERT_TRUE(result->is_list()); base::Value::List& list = result->GetList();
diff --git a/services/network/public/cpp/content_security_policy/content_security_policy.cc b/services/network/public/cpp/content_security_policy/content_security_policy.cc index 910e2ee..430e49c 100644 --- a/services/network/public/cpp/content_security_policy/content_security_policy.cc +++ b/services/network/public/cpp/content_security_policy/content_security_policy.cc
@@ -482,10 +482,9 @@ return false; url::RawCanonOutputT<char16_t> unescaped; - url::DecodeURLEscapeSequences(path.data(), path.size(), - url::DecodeURLMode::kUTF8OrIsomorphic, + url::DecodeURLEscapeSequences(path, url::DecodeURLMode::kUTF8OrIsomorphic, &unescaped); - base::UTF16ToUTF8(unescaped.data(), unescaped.length(), &csp_source->path); + csp_source->path = base::UTF16ToUTF8(unescaped.view()); return true; }
diff --git a/services/network/public/cpp/content_security_policy/csp_source.cc b/services/network/public/cpp/content_security_policy/csp_source.cc index 40ec6bf..6d50e6f 100644 --- a/services/network/public/cpp/content_security_policy/csp_source.cc +++ b/services/network/public/cpp/content_security_policy/csp_source.cc
@@ -24,8 +24,7 @@ bool DecodePath(const base::StringPiece& path, std::string* output) { url::RawCanonOutputT<char16_t> unescaped; - url::DecodeURLEscapeSequences(path.data(), path.size(), - url::DecodeURLMode::kUTF8OrIsomorphic, + url::DecodeURLEscapeSequences(path, url::DecodeURLMode::kUTF8OrIsomorphic, &unescaped); return base::UTF16ToUTF8(unescaped.data(), unescaped.length(), output); }
diff --git a/services/network/public/cpp/is_potentially_trustworthy.cc b/services/network/public/cpp/is_potentially_trustworthy.cc index 3ac7ec60..a1f34ef4 100644 --- a/services/network/public/cpp/is_potentially_trustworthy.cc +++ b/services/network/public/cpp/is_potentially_trustworthy.cc
@@ -65,8 +65,7 @@ if (component == "*") { wildcards_replaced += "0"; } else { - wildcards_replaced = - wildcards_replaced.append(component.begin(), component.end()); + wildcards_replaced += component; } }
diff --git a/services/network/shared_storage/shared_storage_test_utils.cc b/services/network/shared_storage/shared_storage_test_utils.cc index edc0034..4f5660c 100644 --- a/services/network/shared_storage/shared_storage_test_utils.cc +++ b/services/network/shared_storage/shared_storage_test_utils.cc
@@ -126,10 +126,9 @@ if (base::StartsWith(path, MakeSharedStorageRedirectPrefix()) && !query.empty()) { url::RawCanonOutputT<char16_t> decode_output; - url::DecodeURLEscapeSequences(query.c_str(), query.size(), - url::DecodeURLMode::kUTF8, &decode_output); - location = base::UTF16ToUTF8( - std::u16string(decode_output.data(), decode_output.length())); + url::DecodeURLEscapeSequences(query, url::DecodeURLMode::kUTF8, + &decode_output); + location = base::UTF16ToUTF8(decode_output.view()); } if (write_header.has_value()) { return location.has_value()
diff --git a/services/proxy_resolver/proxy_resolver_v8.cc b/services/proxy_resolver/proxy_resolver_v8.cc index 11ebd63..e5f8b50 100644 --- a/services/proxy_resolver/proxy_resolver_v8.cc +++ b/services/proxy_resolver/proxy_resolver_v8.cc
@@ -244,8 +244,7 @@ // Otherwise try to convert it from IDN to punycode. const int kInitialBufferSize = 256; url::RawCanonOutputT<char16_t, kInitialBufferSize> punycode_output; - if (!url::IDNToASCII(hostname_utf16.data(), hostname_utf16.length(), - &punycode_output)) { + if (!url::IDNToASCII(hostname_utf16, &punycode_output)) { return false; }
diff --git a/services/proxy_resolver_win/windows_system_proxy_resolver_impl.cc b/services/proxy_resolver_win/windows_system_proxy_resolver_impl.cc index ab173f64..db36808 100644 --- a/services/proxy_resolver_win/windows_system_proxy_resolver_impl.cc +++ b/services/proxy_resolver_win/windows_system_proxy_resolver_impl.cc
@@ -74,13 +74,11 @@ if (!base::IsStringASCII(host_wide)) { const int kInitialBufferSize = 256; url::RawCanonOutputT<char16_t, kInitialBufferSize> punycode_output; - if (!url::IDNToASCII(base::as_u16cstr(host_wide), host_wide.length(), - &punycode_output)) { + if (!url::IDNToASCII(base::AsStringPiece16(host_wide), &punycode_output)) { return false; } - host_wide.assign(base::as_wcstr(punycode_output.data()), - punycode_output.length()); + host_wide = base::AsWString(punycode_output.view()); } // At this point the string in `host_wide` is ASCII.
diff --git a/styleguide/c++/c++-features.md b/styleguide/c++/c++-features.md index 40974f6..0c46e51 100644 --- a/styleguide/c++/c++-features.md +++ b/styleguide/c++/c++-features.md
@@ -846,6 +846,25 @@ [Discussion thread](https://groups.google.com/u/1/a/chromium.org/g/cxx/c/jNMsxFTd30M) *** +### std::in_place[_t] <sup>[allowed]</sup> + +```c++ +std::optional<std::complex<double>> opt{std::in_place, 0, 1}; +``` + +**Description:** `std::in_place` is a disambiguation tag for `std::optional` to +indicate that the object should be constructed in-place. + +**Documentation:** +[`std::in_place`](https://en.cppreference.com/w/cpp/utility/in_place) + +**Notes:** +*** promo +Allowed now that `std::optional` is allowed. +[Migration bug](https://crbug.com/1373619) and +[discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/XG3G85_ZF1k) +*** + ### std::inclusive_scan <sup>[allowed]</sup> ```c++ @@ -1062,6 +1081,24 @@ [Migration bug](https://crbug.com/1412529) *** +### std::optional <sup>[allowed]</sup> + +```c++ +std::optional<std::string> s; +``` + +**Description:** The class template `std::optional` manages an optional +contained value, i.e. a value that may or may not be present. + +**Documentation:** +[`std::optional`](https://en.cppreference.com/w/cpp/utility/optional) + +**Notes:** +*** promo +[Migration bug](https://crbug.com/1373619) and +[discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/XG3G85_ZF1k) +*** + ### std::{size,empty,data} <sup>[allowed]</sup> ```c++ @@ -1239,48 +1276,28 @@ [Discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/cwktrFxxUY4) *** -### std::in_place[_type,_index][_t] <sup>[banned]</sup> +### std::in_place{_type,_index}[_t] <sup>[banned]</sup> ```c++ -std::optional<std::complex<double>> opt{std::in_place, 0, 1}; std::variant<int, float> v{std::in_place_type<int>, 1.4}; ``` -**Description:** The `std::in_place` are disambiguation tags for -`std::optional`, `std::variant`, and `std::any` to indicate that the object -should be constructed in-place. +**Description:** `std::in_place_type` and `std::in_place_index` are +disambiguation tags for `std::variant` and `std::any` to indicate that the +object should be constructed in-place. **Documentation:** -[`std::in_place`](https://en.cppreference.com/w/cpp/utility/in_place) +[`std::in_place_type`](https://en.cppreference.com/w/cpp/utility/in_place) **Notes:** *** promo -Banned for now because `std::optional`, `std::variant`, and `std::any` are all -banned for now. Because `absl::optional` and `absl::variant` are used instead, -and they require `absl::in_place`, use `absl::in_place` for non-Abseil Chromium +Banned for now because `std::variant` and `std::any` are banned. Because +`absl::variant` is used instead, and it requires `absl::in_place_type`, use +`absl::in_place_type` for non-Abseil Chromium code. See the [discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/ZspmuJPpv6s). *** -### std::optional <sup>[banned]</sup> - -```c++ -std::optional<std::string> s; -``` - -**Description:** The class template `std::optional` manages an optional -contained value, i.e. a value that may or may not be present. A common use case -for optional is the return value of a function that may fail. - -**Documentation:** -[`std::optional`](https://en.cppreference.com/w/cpp/utility/optional) - -**Notes:** -*** promo -[Will be allowed soon](https://crbug.com/1373619); for now, use -`absl::optional`. -*** - ### std::uncaught_exceptions <sup>[banned]</sup> ```c++
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index f229a52..b950c17a 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -24877,7 +24877,7 @@ } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 15 + "shards": 4 }, "test": "chrome_ios_wpt", "test_id_prefix": "ninja://ios/chrome/test/wpt:chrome_ios_wpt/"
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 82d5f2c1..fe564686 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -372,9 +372,9 @@ "can_use_on_swarming_builders": true, "dimensions": { "gpu": null, - "id": "build370-a7", "os": "Windows-10", - "pool": "chrome.tests.perf-fyi" + "pool": "chrome.tests.perf-fyi", + "synthetic_product_name": "HP Laptop 15-bs1xx [Type1ProductConfigId] (HP)" }, "expiration": 7200, "hard_timeout": 21600,
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 89b8908..a1042fd 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -2242,13 +2242,14 @@ "dimensions": { "gpu": "8086:1616-20.19.15.5070", "os": "Windows-10-18363.476", - "pool": "chrome.tests.perf" + "pool": "chrome.tests.perf", + "synthetic_product_name": "HP Laptop 15-bs1xx [Type1ProductConfigId] (HP)" }, "expiration": 7200, "hard_timeout": 21600, "io_timeout": 21600, "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 20 + "shards": 48 }, "test": "performance_test_suite", "trigger_script": {
diff --git a/testing/buildbot/chromium.perf.pinpoint.json b/testing/buildbot/chromium.perf.pinpoint.json index e928f659..a80e2e6f 100644 --- a/testing/buildbot/chromium.perf.pinpoint.json +++ b/testing/buildbot/chromium.perf.pinpoint.json
@@ -1865,13 +1865,14 @@ "dimensions": { "gpu": "8086:1616-20.19.15.5070", "os": "Windows-10-18363.476", - "pool": "chrome.tests.perf" + "pool": "chrome.tests.perf", + "synthetic_product_name": "HP Laptop 15-bs1xx [Type1ProductConfigId] (HP)" }, "expiration": 7200, "hard_timeout": 21600, "io_timeout": 21600, "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 20 + "shards": 48 }, "test": "performance_test_suite", "trigger_script": {
diff --git a/testing/buildbot/filters/release_ready/OWNERS b/testing/buildbot/filters/release_ready/OWNERS new file mode 100644 index 0000000..f63940a5 --- /dev/null +++ b/testing/buildbot/filters/release_ready/OWNERS
@@ -0,0 +1,7 @@ +# TODO(crbug.com/1487289): Remove infra folks once Engprod could take +# over the test contents for rel-ready builders. +# Also uncomment `set noparent`, because only the release test content +# folks can approve changes in release_ready. +# set noparent + +file://infra/OWNERS
diff --git a/testing/buildbot/filters/release_ready/README.md b/testing/buildbot/filters/release_ready/README.md new file mode 100644 index 0000000..47fc5f63 --- /dev/null +++ b/testing/buildbot/filters/release_ready/README.md
@@ -0,0 +1,27 @@ +# About release ready filters + +This directory is meant to house test filters for release ready builders, by +which the release builders could determine the best commit for release. + + +## Test Types + +We have two types of tests running in rel-ready builders: + + * Release blocker suites: the suite enforces all listed tests to run. These + suites only accept exact positive filter. All test case names are + explicitly listed. If any test case is not found, suite will fail. + * CI test suites: Suites like others run in our CI builders. Any filters are + accepted. Usually these suites have configured failure percentage, thus a + single test failure does not impact the entire release. + + +## Guilde line to update rel-ready filters + +Tests running on rel-ready are critical to release quality. If you have to +change them, please provide detailed justification in your CL. + +For release_blocker filter, test them locally with +`--enforce-exact-positive-filter`, to make sure the test is built on your +target platform. We will add rel-ready trybots to verify filter changes in +23Q4(https://crbug.com/1479548).
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index eb3e2e9..f3421add 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -5608,7 +5608,7 @@ '--no-wpt-internal', ], 'swarming': { - 'shards': 15, + 'shards': 4, 'expiration': 18000, 'hard_timeout': 14400, },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index f099092..c0eea26 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -422,21 +422,6 @@ ] } ], - "AndroidMessagesStackingAnimation": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_20230206", - "enable_features": [ - "MessagesForAndroidStackingAnimation" - ] - } - ] - } - ], "AndroidNoVisibleHintForTablets": [ { "platforms": [ @@ -901,6 +886,22 @@ ] } ], + "AshUrgentDiscardingFromPerformanceManager": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AshUrgentDiscardingFromPerformanceManager", + "ContainerAppKiller" + ] + } + ] + } + ], "AssistMultiWord": [ { "platforms": [ @@ -1252,6 +1253,40 @@ ] } ], + "AutofillEnableMovingGPayLogoToTheRightOnClank": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableMovingGPayLogoToTheRightOnClank" + ] + } + ] + } + ], + "AutofillEnableMovingGPayLogoToTheRightOnDesktop": [ + { + "platforms": [ + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableMovingGPayLogoToTheRightOnDesktop" + ] + } + ] + } + ], "AutofillEnableNewCardProfileRankingAlgorithm": [ { "platforms": [ @@ -18641,6 +18676,22 @@ ] } ], + "WebApkUniversalInstall": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "UniversalInstallIcon", + "UniversalInstallManifest" + ] + } + ] + } + ], "WebContentsCaptureHiDPI": [ { "platforms": [
diff --git a/third_party/abseil-cpp/absl/base/options.h b/third_party/abseil-cpp/absl/base/options.h index 5bfa27d..98d7532 100644 --- a/third_party/abseil-cpp/absl/base/options.h +++ b/third_party/abseil-cpp/absl/base/options.h
@@ -121,8 +121,7 @@ // absl::optional is a typedef of std::optional, use the feature macro // ABSL_USES_STD_OPTIONAL. -#define ABSL_OPTION_USE_STD_OPTIONAL 0 - +#define ABSL_OPTION_USE_STD_OPTIONAL 2 // ABSL_OPTION_USE_STD_STRING_VIEW //
diff --git a/third_party/abseil-cpp/patches/0001-Turn-on-hardened-mode.patch b/third_party/abseil-cpp/patches/0001-Turn-on-hardened-mode.patch index ea315bfa..d86e3e8 100644 --- a/third_party/abseil-cpp/patches/0001-Turn-on-hardened-mode.patch +++ b/third_party/abseil-cpp/patches/0001-Turn-on-hardened-mode.patch
@@ -6,9 +6,8 @@ The absl implementations contain various hardening checks where the standard is UB. At the time, libc++ lacked corresponding hardening checks, so we forced the use of absl types. As of -https://crbug.com/1335422, this is no longer true. Switching so the STL -versions of optional and variant is tracked by https://crbug.com/1373619 and -https://crbug.com/1373620, respectively. +https://crbug.com/1335422, this is no longer true. Switching to the STL +version of variant is tracked by https://crbug.com/1373620. --- third_party/abseil-cpp/absl/base/options.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) @@ -17,15 +16,6 @@ index 230bf1eecc4a4..1641271cd3ff9 100644 --- a/third_party/abseil-cpp/absl/base/options.h +++ b/third_party/abseil-cpp/absl/base/options.h -@@ -127,7 +127,7 @@ - // absl::optional is a typedef of std::optional, use the feature macro - // ABSL_USES_STD_OPTIONAL. - --#define ABSL_OPTION_USE_STD_OPTIONAL 2 -+#define ABSL_OPTION_USE_STD_OPTIONAL 0 - - - // ABSL_OPTION_USE_STD_STRING_VIEW @@ -180,7 +180,7 @@ // absl::variant is a typedef of std::variant, use the feature macro // ABSL_USES_STD_VARIANT. @@ -45,4 +35,3 @@ #endif // ABSL_BASE_OPTIONS_H_ -- 2.33.0.882.g93a45727a2-goog -
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg.def b/third_party/abseil-cpp/symbols_arm64_dbg.def index 23104ff6..d2ca870 100644 --- a/third_party/abseil-cpp/symbols_arm64_dbg.def +++ b/third_party/abseil-cpp/symbols_arm64_dbg.def
@@ -4,9 +4,9 @@ ??$?0$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@QEAA@P6A_NPEBU?$atomic@_N@__Cr@std@@@Z0@Z ??$?0$$CBUCordRep@cord_internal@absl@@@Hex@absl@@QEAA@PEBUCordRep@cord_internal@1@W4PadSpec@1@@Z ??$?0$$CBVFormatArgImpl@str_format_internal@absl@@$$CBV012@@?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@absl@@QEAA@V?$initializer_list@VFormatArgImpl@str_format_internal@absl@@@std@@@Z - ??$?0$$T@?$Storage@PEAPEAUCordRep@cord_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z - ??$?0$$T@?$Storage@PEAPEAVLogSink@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z - ??$?0$$T@?$Storage@PEAUPayload@status_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z + ??$?0$$T@?$Storage@PEAPEAUCordRep@cord_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEA$$T@Z + ??$?0$$T@?$Storage@PEAPEAVLogSink@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEA$$T@Z + ??$?0$$T@?$Storage@PEAUPayload@status_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEA$$T@Z ??$?0$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@?$__compressed_pair@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$?0$$TAEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@?$__compressed_pair@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@12@@Z ??$?0$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z @@ -94,30 +94,30 @@ ??$?0AEAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@12@$0A@@?$pair@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@__Cr@std@@QEAA@AEAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@12@$$QEAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@12@@Z ??$?0AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@Z + ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@$$QEA$$T@Z + ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@@Z ??$?0AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@12@@Z ??$?0AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@Z + ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAVLogSink@absl@@@56@$$QEA$$T@Z + ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAVLogSink@absl@@@56@@Z ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAVLogSink@absl@@@12@@Z ??$?0AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@$$QEA$$T@Z + ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@@Z - ??$?0AEAVCord@absl@@$0A@@?$optional@VCord@absl@@@absl@@QEAA@AEAVCord@1@@Z - ??$?0AEAVCord@absl@@@?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IEAA@Uin_place_t@2@AEAVCord@2@@Z - ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0AEAVCord@absl@@$0A@@?$optional@VCord@absl@@@__Cr@std@@QEAA@AEAVCord@absl@@@Z + ??$?0AEAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@Uin_place_t@12@AEAVCord@absl@@@Z + ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@Z + ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@UPayload@status_internal@absl@@@56@$$QEAI@Z + ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@56@@Z ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$$QEAI@Z + ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@56@$$QEAI@Z ??$?0AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$Z$$V$$Z$0A@$$Z$S@?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@AEAA@Upiecewise_construct_t@12@AEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@AEAV?$tuple@$$V@12@U?$__tuple_indices@$0A@@12@U?$__tuple_indices@$S@12@@Z ??$?0AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$Z$$V@?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAA@Upiecewise_construct_t@12@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@V?$tuple@$$V@12@@Z ??$?0D@FormatArgImpl@str_format_internal@absl@@QEAA@AEBD@Z @@ -128,9 +128,7 @@ ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@_KV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAH$$QEAU__default_init_tag@12@@Z ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@_KV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAH$$QEAU__default_init_tag@12@@Z ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@_KV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAH$$QEAU__default_init_tag@12@@Z - ??$?0I$0A@@?$optional@I@absl@@QEAA@$$QEAI@Z - ??$?0I@?$Storage@_K$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAI@Z - ??$?0I@?$optional_data_dtor_base@I$00@optional_internal@absl@@IEAA@Uin_place_t@2@$$QEAI@Z + ??$?0I@?$Storage@_K$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAI@Z ??$?0I@FormatArgImpl@str_format_internal@absl@@QEAA@AEBI@Z ??$?0MU__default_init_tag@__Cr@std@@@?$__compressed_pair@MU?$equal_to@PEBUCordRep@cord_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAM$$QEAU__default_init_tag@12@@Z ??$?0MU__default_init_tag@__Cr@std@@@?$__compressed_pair@MV?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@__Cr@std@@@__Cr@std@@QEAA@$$QEAM$$QEAU__default_init_tag@12@@Z @@ -224,18 +222,18 @@ ??$?0V?$__hash_node_destructor@V?$allocator@U?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@X@?$__compressed_pair_elem@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@$$QEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@12@@Z ??$?0V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@X@?$__compressed_pair_elem@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@$$QEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@12@@Z ??$?0V?$allocator@D@__Cr@std@@@AlphaNum@absl@@QEAA@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z - ??$?0V?$allocator@H@__Cr@std@@@?$Storage@V?$allocator@H@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@H@__Cr@std@@@Z + ??$?0V?$allocator@H@__Cr@std@@@?$Storage@V?$allocator@H@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@H@56@@Z ??$?0V?$allocator@H@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@H@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@H@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@H@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@H@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@H@56@$$QEAI@Z + ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@@Z ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@$$QEAI@Z + ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAVLogSink@absl@@@56@@Z ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAVLogSink@absl@@@56@$$QEAI@Z + ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z + ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@UPayload@status_internal@absl@@@56@$$QEAI@Z ??$?0V?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z @@ -257,8 +255,6 @@ ??$?0VTimeZoneLibC@cctz@time_internal@absl@@$0A@@?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@QEAA@AEBU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@12@@Z ??$?0VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@XX@?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAV?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@12@@Z ??$?0_J@FormatArgImpl@str_format_internal@absl@@QEAA@AEB_J@Z - ??$?0_K$0A@@?$optional@_K@absl@@QEAA@$$QEA_K@Z - ??$?0_K@?$optional_data_dtor_base@_K$00@optional_internal@absl@@IEAA@Uin_place_t@2@$$QEA_K@Z ??$?6$01@LogMessage@log_internal@absl@@QEAAAEAV012@AEAY01$$CBD@Z ??$?6$02@LogMessage@log_internal@absl@@QEAAAEAV012@AEAY02$$CBD@Z ??$?6$0P@@LogMessage@log_internal@absl@@QEAAAEAV012@AEAY0P@$$CBD@Z @@ -767,7 +763,7 @@ ??$__distance@V?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YA_JV?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@01@0Urandom_access_iterator_tag@01@@Z ??$__do_rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__do_rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z - ??$__emplace_back_slow_path@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV312@AEA_K@Z + ??$__emplace_back_slow_path@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV612@AEA_K@Z ??$__emplace_unique_key_args@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBQEBUCordRep@cord_internal@absl@@0@Z ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QEAV?$tuple@$$V@12@@Z ??$__find_impl@PEAPEAVLogSink@absl@@PEAPEAV12@PEAV12@U__identity@__Cr@std@@@__Cr@std@@YAPEAPEAVLogSink@absl@@PEAPEAV23@0AEBQEAV23@AEAU__identity@01@@Z @@ -802,11 +798,11 @@ ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@PEAPEAU4567@PEAPEAU4567@@__Cr@std@@YA?AU?$pair@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@PEAPEAU1234@@01@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@00@Z ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PEAUTransition@cctz@time_internal@absl@@PEAU4567@PEAU4567@@__Cr@std@@YA?AU?$pair@PEAUTransition@cctz@time_internal@absl@@PEAU1234@@01@PEAUTransition@cctz@time_internal@absl@@00@Z ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PEAUTransitionType@cctz@time_internal@absl@@PEAU4567@PEAU4567@@__Cr@std@@YA?AU?$pair@PEAUTransitionType@cctz@time_internal@absl@@PEAU1234@@01@PEAUTransitionType@cctz@time_internal@absl@@00@Z - ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVLogSink@absl@@@Z - ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z - ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z + ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV345@@Z + ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVLogSink@absl@@AEBQEAV34@@Z + ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV345@@Z + ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUTransition@cctz@time_internal@absl@@AEBU3456@@Z + ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$$QEAU3456@@Z ??$__rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z ??$__rewrap_iter@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV12345@U?$__unwrap_iter_impl@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@$00@__Cr@std@@@__Cr@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@0@Z @@ -924,7 +920,6 @@ ??$advance@PEBUTransition@cctz@time_internal@absl@@_J@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEBUTransition@cctz@time_internal@absl@@_J@Z ??$advance@PEBUTransition@cctz@time_internal@absl@@_J_JX@__Cr@std@@YAXAEAPEBUTransition@cctz@time_internal@absl@@_J@Z ??$assign@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@$0A@@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@12@0@Z - ??$assign@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z @@ -957,7 +952,6 @@ ??$construct@UTransitionType@cctz@time_internal@absl@@$$VXX@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@@Z ??$construct@UTransitionType@cctz@time_internal@absl@@U1234@XX@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@$$QEAU4567@@Z ??$construct@UViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV456@AEA_KXX@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV712@AEA_K@Z - ??$construct@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$construct@VFormatArgImpl@str_format_internal@absl@@AEBV123@XX@?$allocator_traits@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@12@PEAVFormatArgImpl@str_format_internal@absl@@AEBV456@@Z ??$construct_at@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEAPEBV12345@PEAPEAPEBV12345@@__Cr@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@AEBQEAPEBV23456@@Z ??$construct_at@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV12345@PEAPEAPEBV12345@@__Cr@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@$$QEAPEAPEBV23456@@Z @@ -1040,7 +1034,6 @@ ??$forward@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@absl@@YAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@AEAV123@@Z ??$forward@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@absl@@YAAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@AEAV123@@Z ??$forward@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YAAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@AEAV123@@Z - ??$forward@AEAVCord@absl@@@absl@@YAAEAVCord@0@AEAV10@@Z ??$forward@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YAAEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@AEBV123@@Z ??$forward@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@absl@@YAAEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@AEBV123@@Z ??$forward@H@absl@@YA$$QEAHAEAH@Z @@ -1049,7 +1042,6 @@ ??$forward@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@absl@@YA$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@AEAV123@@Z ??$forward@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@absl@@YA$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@AEAV123@@Z ??$forward@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YA$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@AEAV123@@Z - ??$forward@_K@absl@@YA$$QEA_KAEA_K@Z ??$get@$00@?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@QEGAAAEA_KXZ ??$get@$00@?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@QEGBAAEB_KXZ ??$get@$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@QEGAAAEAPEAPEAUCordRep@cord_internal@2@XZ @@ -1302,6 +1294,12 @@ ??0?$__non_trivial_if@$00V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??0?$__non_trivial_if@$00V?$allocator@V?$unique_ptr@VCRCImpl@crc_internal@absl@@U?$default_delete@VCRCImpl@crc_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??0?$__non_trivial_if@$00V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??0?$__optional_copy_assign_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_copy_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_move_assign_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_move_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_storage_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ ??0?$__policy_invoker@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__function@__Cr@std@@AEAA@P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@23@PEBT__policy_storage@123@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@Z ??0?$__policy_invoker@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__function@__Cr@std@@QEAA@XZ ??0?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@_K0AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z @@ -1383,22 +1381,7 @@ ??0?$move_iterator@PEAUPayload@status_internal@absl@@@__Cr@std@@QEAA@PEAUPayload@status_internal@absl@@@Z ??0?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@QEAA@PEAUTransition@cctz@time_internal@absl@@@Z ??0?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@QEAA@PEAUTransitionType@cctz@time_internal@absl@@@Z - ??0?$optional@I@absl@@QEAA@Unullopt_t@1@@Z - ??0?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAA@XZ - ??0?$optional@VCord@absl@@@absl@@QEAA@Unullopt_t@1@@Z - ??0?$optional@_K@absl@@QEAA@Unullopt_t@1@@Z - ??0?$optional_data@I$00@optional_internal@absl@@QEAA@XZ - ??0?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data@VCord@absl@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data@_K$00@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@I@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@VCord@absl@@@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@_K@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_dtor_base@I$00@optional_internal@absl@@IEAA@XZ - ??0?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data_dtor_base@_K$00@optional_internal@absl@@IEAA@XZ + ??0?$optional@VCord@absl@@@__Cr@std@@QEAA@Unullopt_t@12@@Z ??0?$probe_seq@$07@container_internal@absl@@QEAA@_K0@Z ??0?$reverse_iterator@PEAPEAVCordzHandle@cord_internal@absl@@@__Cr@std@@QEAA@PEAPEAVCordzHandle@cord_internal@absl@@@Z ??0?$reverse_iterator@PEAPEAVLogSink@absl@@@__Cr@std@@QEAA@PEAPEAVLogSink@absl@@@Z @@ -1646,10 +1629,6 @@ ??1?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__Cr@std@@QEAA@XZ - ??1?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAA@XZ - ??1?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@QEAA@XZ - ??1?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@QEAA@XZ - ??1?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAA@XZ ??1?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@$$CBVImpl@time_zone@cctz@time_internal@absl@@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ @@ -1736,11 +1715,8 @@ ??1_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1_ConstructTransaction@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ - ??1bad_optional_access@absl@@UEAA@XZ ??1bad_variant_access@absl@@UEAA@XZ ??4?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAV012@AEBV012@@Z - ??4?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAAAEAV01@$$QEAV01@@Z - ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAAAEAV012@$$QEAV012@@Z ??4?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAV012@$$QEAV012@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@$$QEAV01@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@AEBV01@@Z @@ -1837,7 +1813,6 @@ ??ACord@absl@@QEBAD_K@Z ??B?$NonIterableBitMask@_K$07$02@container_internal@absl@@QEBA_NXZ ??B?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__Cr@std@@QEBAPEAVCordzHandle@cord_internal@absl@@XZ - ??B?$optional@_K@absl@@QEBA_NXZ ??B?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@@__Cr@std@@@__Cr@std@@QEBA_NXZ ??B?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA_NXZ ??B?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA_NXZ @@ -1881,7 +1856,6 @@ ??D?$move_iterator@PEAUPayload@status_internal@absl@@@__Cr@std@@QEBA$$QEAUPayload@status_internal@absl@@XZ ??D?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@QEBA$$QEAUTransition@cctz@time_internal@absl@@XZ ??D?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@QEBA$$QEAUTransitionType@cctz@time_internal@absl@@XZ - ??D?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEGAAAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ??D?$reverse_iterator@PEAPEAVCordzHandle@cord_internal@absl@@@__Cr@std@@QEBAAEAPEAVCordzHandle@cord_internal@absl@@XZ ??D?$reverse_iterator@PEAPEAVLogSink@absl@@@__Cr@std@@QEBAAEAPEAVLogSink@absl@@XZ ??D?$reverse_iterator@PEAPEBVCordzHandle@cord_internal@absl@@@__Cr@std@@QEBAAEAPEBVCordzHandle@cord_internal@absl@@XZ @@ -1971,7 +1945,6 @@ ??R<lambda_1>@?0???A?$Span@D@absl@@QEBAAEAD_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???A?$Span@I@absl@@QEBAAEAI_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???CChunkIterator@Cord@absl@@QEBAPEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ@QEBA?A?<auto>@@XZ - ??R<lambda_1>@?0???D?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEGAAAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???DChunkIterator@Cord@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???EChunkIterator@Cord@absl@@QEAAAEAV123@XZ@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0??Append@FormatSinkImpl@str_format_internal@absl@@QEAAX_KD@Z@QEBA?A?<auto>@@0@Z @@ -2322,7 +2295,7 @@ ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ ?DisableRescheduling@SchedulingGuard@base_internal@absl@@CA_NXZ - ?DoLoad@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@AEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@ZXZ + ?DoLoad@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@AEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@ZXZ ?DoLoad@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@AEBAP6AXPEBDH000@ZXZ ?DoLoad@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@AEBAP6AXPEBDPEBX@ZXZ ?DoLoad@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@AEBAP6AXPEBDPEBX_J@ZXZ @@ -2331,7 +2304,7 @@ ?DoLoad@?$AtomicHook@P6AXXZ@base_internal@absl@@AEBAP6AXXZXZ ?DoLoad@?$AtomicHook@P6AX_J@Z@base_internal@absl@@AEBAP6AX_J@ZXZ ?DoLoad@?$AtomicHook@P6A_NW4LogSeverity@absl@@PEBDHPEAPEADPEAH@Z@base_internal@absl@@AEBAP6A_NW4LogSeverity@3@PEBDHPEAPEADPEAH@ZXZ - ?DoStore@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@AEAA_NP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z@Z + ?DoStore@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@AEAA_NP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z@Z ?DoStore@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@AEAA_NP6AXPEBDH000@Z@Z ?DoStore@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@AEAA_NP6AXPEBDPEBX@Z@Z ?DoStore@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@AEAA_NP6AXPEBDPEBX_J@Z@Z @@ -2341,7 +2314,7 @@ ?DoStore@?$AtomicHook@P6AX_J@Z@base_internal@absl@@AEAA_NP6AX_J@Z@Z ?DoStore@?$AtomicHook@P6A_NW4LogSeverity@absl@@PEBDHPEAPEADPEAH@Z@base_internal@absl@@AEAA_NP6A_NW4LogSeverity@3@PEBDHPEAPEADPEAH@Z@Z ?DropDeletesWithoutResize@container_internal@absl@@YAXAEAVCommonFields@12@AEBUPolicyFunctions@12@PEAX@Z - ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z + ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z ?DummyFunction@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@CAXPEBDH000@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@CAXPEBDPEBX@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@CAXPEBDPEBX_J@Z @@ -2397,7 +2370,7 @@ ?Eval@Condition@absl@@QEBA_NXZ ?Excess@str_format_internal@absl@@YA_K_K0@Z ?ExitOnDFatal@log_internal@absl@@YA_NXZ - ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@2@XZ + ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@__Cr@std@@XZ ?Extend@CRC32@crc_internal@absl@@UEBAXPEAIPEBX_K@Z ?ExtendByZeroes@CRC32@crc_internal@absl@@UEBAXPEAI_K@Z ?ExtendByZeroesImpl@CRC32@crc_internal@absl@@CAXPEAI_KQEBI2@Z @@ -2601,11 +2574,11 @@ ?GetOrCreateCurrentThreadIdentity@synchronization_internal@absl@@YAPEAUThreadIdentity@base_internal@2@XZ ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ - ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?GetProgramCounter@debugging_internal@absl@@YAPEAXQEAX@Z ?GetRepHi@time_internal@absl@@YA_JVDuration@2@@Z ?GetRepLo@time_internal@absl@@YAIVDuration@2@@Z - ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@2@XZ + ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@__Cr@std@@XZ ?GetSize@?$Storage@H$0CP@V?$allocator@H@__Cr@std@@@inlined_vector_internal@absl@@QEBA_KXZ ?GetSize@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEBA_KXZ ?GetSize@?$Storage@PEAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEBA_KXZ @@ -2631,7 +2604,7 @@ ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z ?GetStackTrace@absl@@YAHPEAPEAXHH@Z ?GetStackTraceWithContext@absl@@YAHPEAPEAXHHPEBXPEAH@Z - ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@ZXZ + ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@ZXZ ?GetStride@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetTID@base_internal@absl@@YAIXZ ?GetTagForChar@str_format_internal@absl@@YA?AVConvTag@12@D@Z @@ -2771,7 +2744,7 @@ ?Load32@big_endian@absl@@YAIPEBX@Z ?Load32@little_endian@absl@@YAIPEBX@Z ?Load64@little_endian@absl@@YA_KPEBX@Z - ?Load@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@QEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@ZXZ + ?Load@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@QEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@ZXZ ?Load@?$AtomicHook@P6AXXZ@base_internal@absl@@QEBAP6AXXZXZ ?Load@TimeZoneInfo@cctz@time_internal@absl@@AEAA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?Load@TimeZoneInfo@cctz@time_internal@absl@@AEAA_NPEAVZoneInfoSource@234@@Z @@ -3080,7 +3053,7 @@ ?SetPayload@StatusRep@status_internal@absl@@QEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@VCord@3@@Z ?SetPrecision@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXHPEAVFormatConversionSpecImpl@23@@Z ?SetStackUnwinder@absl@@YAXP6AHPEAPEAXPEAHHHPEBX1@Z@Z - ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@Z + ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@Z@Z ?SetStderrThreshold@absl@@YAXW4LogSeverityAtLeast@1@@Z ?SetSuppressSigabortTrace@log_internal@absl@@YA_N_N@Z ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPEAU?$atomic@H@__Cr@std@@@Z @@ -3139,7 +3112,7 @@ ?Store16@little_endian@absl@@YAXPEAXG@Z ?Store32@little_endian@absl@@YAXPEAXI@Z ?Store64@little_endian@absl@@YAXPEAX_K@Z - ?Store@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@QEAAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z@Z + ?Store@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@QEAAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z@Z ?Store@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@QEAAXP6AXPEBDH000@Z@Z ?Store@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@QEAAXP6AXPEBDPEBX@Z@Z ?Store@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@QEAAXP6AXPEBDPEBX_J@Z@Z @@ -4012,7 +3985,6 @@ ?deallocate@?$allocator_traits@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@PEAVFormatArgImpl@str_format_internal@absl@@_K@Z ?decrement_size@CommonFields@container_internal@absl@@QEAAXXZ ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ - ?destruct@?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAAXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUminute_tag@1234@Ufields@1234@1@Z @@ -4195,8 +4167,6 @@ ?has_show_pos_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_sign_col_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_timeout@KernelTimeout@synchronization_internal@absl@@QEBA_NXZ - ?has_value@?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEBA_NXZ - ?has_value@?$optional@_K@absl@@QEBA_NXZ ?has_zero_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?hash_function@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QEAAAEAU?$hash@PEBUCordRep@cord_internal@absl@@@23@XZ ?hash_function@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@XZ @@ -4340,8 +4310,6 @@ ?push_front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAX$$QEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ?raw_code@Status@absl@@QEBAHXZ ?reduce_size@InlineRep@Cord@absl@@QEAAX_K@Z - ?reference@?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@AEAAAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ - ?reference@?$optional@_K@absl@@AEAAAEA_KXZ ?release@?$unique_ptr@$$CBVImpl@time_zone@cctz@time_internal@absl@@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?release@?$unique_ptr@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?release@?$unique_ptr@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$__allocator_destructor@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ @@ -4533,7 +4501,6 @@ ?text_message_with_prefix_and_newline@LogEntry@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ ?text_message_with_prefix_and_newline_c_str@LogEntry@absl@@QEBAPEBDXZ ?thread_identity@PerThreadSynch@base_internal@absl@@QEAAPEAUThreadIdentity@23@XZ - ?throw_bad_optional_access@optional_internal@absl@@YAXXZ ?tid@LogEntry@absl@@QEBAIXZ ?timestamp@LogEntry@absl@@QEBA?AVTime@2@XZ ?to_address@?$pointer_traits@V?$__wrap_iter@PEAPEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@SAPEAPEAVLogSink@absl@@V?$__wrap_iter@PEAPEAVLogSink@absl@@@23@@Z @@ -4543,12 +4510,10 @@ ?type@ProtoField@log_internal@absl@@QEBA?AW4WireType@23@XZ ?unpoison@InlineData@cord_internal@absl@@QEAAXXZ ?utc_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ - ?value@?$optional@_K@absl@@QEGAAAEA_KXZ ?value@InputValue@UnboundConversion@str_format_internal@absl@@QEBAHXZ ?version@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?what@BadStatusOrAccess@absl@@UEBAPEBDXZ ?what@SeedGenException@absl@@UEBAPEBDXZ - ?what@bad_optional_access@absl@@UEBAPEBDXZ ?what@bad_variant_access@absl@@UEBAPEBDXZ ?width@FormatConversionSpecImpl@str_format_internal@absl@@QEBAHXZ ?words@?$BigUnsigned@$03@strings_internal@absl@@QEBAPEBIXZ
diff --git a/third_party/abseil-cpp/symbols_arm64_rel.def b/third_party/abseil-cpp/symbols_arm64_rel.def index 29edf4ce..8955b76e 100644 --- a/third_party/abseil-cpp/symbols_arm64_rel.def +++ b/third_party/abseil-cpp/symbols_arm64_rel.def
@@ -1,6 +1,6 @@ EXPORTS ?$TSS0@?1??CrcAndCopy@CrcMemcpy@crc_internal@absl@@SA?AVcrc32c_t@3@PEIAXPEIBX_KV43@_N@Z@4HA - ??$?0AEAVCord@absl@@@?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IEAA@Uin_place_t@2@AEAVCord@2@@Z + ??$?0AEAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@Uin_place_t@12@AEAVCord@absl@@@Z ??$?0V?$allocator@D@__Cr@std@@@AlphaNum@absl@@QEAA@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?6C$0A@@LogMessage@log_internal@absl@@QEAAAEAV012@AEBC@Z @@ -153,16 +153,15 @@ ??$__emplace_unique_key_args@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBQEBUCordRep@cord_internal@absl@@0@Z ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QEAV?$tuple@$$V@12@@Z ??$__for_each_segment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@23@@__Cr@std@@YAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@01@0U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@01@@Z - ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVLogSink@absl@@@Z - ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z + ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV345@@Z + ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVLogSink@absl@@AEBQEAV34@@Z + ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV345@@Z + ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUTransition@cctz@time_internal@absl@@AEBU3456@@Z ??$__rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z ??$__unwrap_and_dispatch@U?$__overload@U?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@U__copy_trivial@23@@__Cr@std@@PEBUPrefixCrc@CrcCordState@crc_internal@absl@@PEBU4567@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@$0A@@__Cr@std@@YA?AU?$pair@PEBUPrefixCrc@CrcCordState@crc_internal@absl@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@__Cr@std@@@01@PEBUPrefixCrc@CrcCordState@crc_internal@absl@@0V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@01@@Z ??$__upper_bound@U_ClassicAlgPolicy@__Cr@std@@UByCivilTime@Transition@cctz@time_internal@absl@@PEBU5678@PEBU5678@U5678@U__identity@23@@__Cr@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@$$QEAUByCivilTime@2345@$$QEAU__identity@01@@Z ??$assign@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@$0A@@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@12@0@Z - ??$assign@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z ??$construct_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@PEAU123@@__Cr@std@@YAPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@PEAU201@AEBUpiecewise_construct_t@01@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@01@$$QEAV?$tuple@$$V@01@@Z ??$construct_at@UPayload@status_internal@absl@@AEBU123@PEAU123@@__Cr@std@@YAPEAUPayload@status_internal@absl@@PEAU234@AEBU234@@Z @@ -278,10 +277,8 @@ ??1SeedGenException@absl@@UEAA@XZ ??1TimeZoneIf@cctz@time_internal@absl@@UEAA@XZ ??1ZoneInfoSource@cctz@time_internal@absl@@UEAA@XZ - ??1bad_optional_access@absl@@UEAA@XZ ??1bad_variant_access@absl@@UEAA@XZ ??4?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAV012@AEBV012@@Z - ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAAAEAV012@$$QEAV012@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@$$QEAV01@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@AEBV01@@Z ??4Cord@absl@@QEAAAEAV01@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -505,7 +502,7 @@ ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ ?DropDeletesWithoutResize@container_internal@absl@@YAXAEAVCommonFields@12@AEBUPolicyFunctions@12@PEAX@Z - ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z + ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z ?DummyFunction@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@CAXPEBDH000@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@CAXPEBDPEBX@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@CAXPEBDPEBX_J@Z @@ -550,7 +547,7 @@ ?ErrnoToStatusCode@absl@@YA?AW4StatusCode@1@H@Z ?Eval@Condition@absl@@QEBA_NXZ ?ExitOnDFatal@log_internal@absl@@YA_NXZ - ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@2@XZ + ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@__Cr@std@@XZ ?Extend@CRC32@crc_internal@absl@@UEBAXPEAIPEBX_K@Z ?ExtendByZeroes@CRC32@crc_internal@absl@@UEBAXPEAI_K@Z ?ExtendByZeroesImpl@CRC32@crc_internal@absl@@CAXPEAI_KQEBI2@Z @@ -675,9 +672,9 @@ ?GetMorePreciseMemoryUsage@cord_internal@absl@@YA_KPEBUCordRep@12@@Z ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ - ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?GetProgramCounter@debugging_internal@absl@@YAPEAXQEAX@Z - ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@2@XZ + ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@__Cr@std@@XZ ?GetSkipCount@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z @@ -685,7 +682,7 @@ ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z ?GetStackTrace@absl@@YAHPEAPEAXHH@Z ?GetStackTraceWithContext@absl@@YAHPEAPEAXHHPEBXPEAH@Z - ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@ZXZ + ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@ZXZ ?GetStride@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetTID@base_internal@absl@@YAIXZ ?GetTestEngine@CrcMemcpy@crc_internal@absl@@SA?AV?$unique_ptr@VCrcMemcpyEngine@crc_internal@absl@@U?$default_delete@VCrcMemcpyEngine@crc_internal@absl@@@__Cr@std@@@__Cr@std@@HH@Z @@ -945,7 +942,7 @@ ?SetMutexDeadlockDetectionMode@absl@@YAXW4OnDeadlockCycle@1@@Z ?SetPayload@StatusRep@status_internal@absl@@QEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@VCord@3@@Z ?SetStackUnwinder@absl@@YAXP6AHPEAPEAXPEAHHHPEBX1@Z@Z - ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@Z + ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@Z@Z ?SetStderrThreshold@absl@@YAXW4LogSeverityAtLeast@1@@Z ?SetSuppressSigabortTrace@log_internal@absl@@YA_N_N@Z ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPEAU?$atomic@H@__Cr@std@@@Z @@ -1239,12 +1236,10 @@ ?status@BadStatusOrAccess@absl@@QEBAAEBVStatus@2@XZ ?step@detail@cctz@time_internal@absl@@YA?AUfields@1234@Usecond_tag@1234@U51234@_J@Z ?stream@OstreamView@LogMessage@log_internal@absl@@QEAAAEAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ - ?throw_bad_optional_access@optional_internal@absl@@YAXXZ ?utc_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ ?version@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?what@BadStatusOrAccess@absl@@UEBAPEBDXZ ?what@SeedGenException@absl@@UEBAPEBDXZ - ?what@bad_optional_access@absl@@UEBAPEBDXZ ?what@bad_variant_access@absl@@UEBAPEBDXZ ?words@?$BigUnsigned@$03@strings_internal@absl@@QEBAPEBIXZ ?words@?$BigUnsigned@$0FE@@strings_internal@absl@@QEBAPEBIXZ
diff --git a/third_party/abseil-cpp/symbols_x64_dbg.def b/third_party/abseil-cpp/symbols_x64_dbg.def index 6bf8da4..ffcdab6 100644 --- a/third_party/abseil-cpp/symbols_x64_dbg.def +++ b/third_party/abseil-cpp/symbols_x64_dbg.def
@@ -4,9 +4,9 @@ ??$?0$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@QEAA@P6A_NPEBU?$atomic@_N@__Cr@std@@@Z0@Z ??$?0$$CBUCordRep@cord_internal@absl@@@Hex@absl@@QEAA@PEBUCordRep@cord_internal@1@W4PadSpec@1@@Z ??$?0$$CBVFormatArgImpl@str_format_internal@absl@@$$CBV012@@?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@absl@@QEAA@V?$initializer_list@VFormatArgImpl@str_format_internal@absl@@@std@@@Z - ??$?0$$T@?$Storage@PEAPEAUCordRep@cord_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z - ??$?0$$T@?$Storage@PEAPEAVLogSink@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z - ??$?0$$T@?$Storage@PEAUPayload@status_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z + ??$?0$$T@?$Storage@PEAPEAUCordRep@cord_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEA$$T@Z + ??$?0$$T@?$Storage@PEAPEAVLogSink@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEA$$T@Z + ??$?0$$T@?$Storage@PEAUPayload@status_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEA$$T@Z ??$?0$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@?$__compressed_pair@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$?0$$TAEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@?$__compressed_pair@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@12@@Z ??$?0$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z @@ -94,30 +94,30 @@ ??$?0AEAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@12@$0A@@?$pair@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@__Cr@std@@QEAA@AEAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@12@$$QEAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@12@@Z ??$?0AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@Z + ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@$$QEA$$T@Z + ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@@Z ??$?0AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@12@@Z ??$?0AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@Z + ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAVLogSink@absl@@@56@$$QEA$$T@Z + ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@PEAVLogSink@absl@@@56@@Z ??$?0AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEAVLogSink@absl@@@12@@Z ??$?0AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEA$$T@Z - ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@$$QEA$$T@Z + ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z ??$?0AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@@Z - ??$?0AEAVCord@absl@@$0A@@?$optional@VCord@absl@@@absl@@QEAA@AEAVCord@1@@Z - ??$?0AEAVCord@absl@@@?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IEAA@Uin_place_t@2@AEAVCord@2@@Z - ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0AEAVCord@absl@@$0A@@?$optional@VCord@absl@@@__Cr@std@@QEAA@AEAVCord@absl@@@Z + ??$?0AEAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@Uin_place_t@12@AEAVCord@absl@@@Z + ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@Z + ??$?0AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@UPayload@status_internal@absl@@@56@$$QEAI@Z + ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@56@@Z ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$$QEAI@Z + ??$?0AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@56@$$QEAI@Z ??$?0AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$Z$$V$$Z$0A@$$Z$S@?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@AEAA@Upiecewise_construct_t@12@AEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@AEAV?$tuple@$$V@12@U?$__tuple_indices@$0A@@12@U?$__tuple_indices@$S@12@@Z ??$?0AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$Z$$V@?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAA@Upiecewise_construct_t@12@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@V?$tuple@$$V@12@@Z ??$?0D@FormatArgImpl@str_format_internal@absl@@QEAA@AEBD@Z @@ -128,9 +128,7 @@ ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@_KV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAH$$QEAU__default_init_tag@12@@Z ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@_KV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAH$$QEAU__default_init_tag@12@@Z ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@_KV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAH$$QEAU__default_init_tag@12@@Z - ??$?0I$0A@@?$optional@I@absl@@QEAA@$$QEAI@Z - ??$?0I@?$Storage@_K$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAI@Z - ??$?0I@?$optional_data_dtor_base@I$00@optional_internal@absl@@IEAA@Uin_place_t@2@$$QEAI@Z + ??$?0I@?$Storage@_K$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAI@Z ??$?0I@FormatArgImpl@str_format_internal@absl@@QEAA@AEBI@Z ??$?0MU__default_init_tag@__Cr@std@@@?$__compressed_pair@MU?$equal_to@PEBUCordRep@cord_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAM$$QEAU__default_init_tag@12@@Z ??$?0MU__default_init_tag@__Cr@std@@@?$__compressed_pair@MV?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@__Cr@std@@@__Cr@std@@QEAA@$$QEAM$$QEAU__default_init_tag@12@@Z @@ -224,18 +222,18 @@ ??$?0V?$__hash_node_destructor@V?$allocator@U?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@X@?$__compressed_pair_elem@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@$$QEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@12@@Z ??$?0V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@X@?$__compressed_pair_elem@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@$00$0A@@__Cr@std@@QEAA@$$QEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@12@@Z ??$?0V?$allocator@D@__Cr@std@@@AlphaNum@absl@@QEAA@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z - ??$?0V?$allocator@H@__Cr@std@@@?$Storage@V?$allocator@H@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@H@__Cr@std@@@Z + ??$?0V?$allocator@H@__Cr@std@@@?$Storage@V?$allocator@H@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@H@56@@Z ??$?0V?$allocator@H@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@H@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@H@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@H@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@H@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@H@56@$$QEAI@Z + ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@@Z ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@56@$$QEAI@Z + ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAVLogSink@absl@@@56@@Z ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@PEAVLogSink@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@PEAVLogSink@absl@@@56@$$QEAI@Z + ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@QEAA@$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z - ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEAI@Z + ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@_K@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@$$QEAV?$allocator@UPayload@status_internal@absl@@@56@$$QEAI@Z ??$?0V?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z @@ -257,8 +255,6 @@ ??$?0VTimeZoneLibC@cctz@time_internal@absl@@$0A@@?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@QEAA@AEBU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@12@@Z ??$?0VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@XX@?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@$$QEAV?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@12@@Z ??$?0_J@FormatArgImpl@str_format_internal@absl@@QEAA@AEB_J@Z - ??$?0_K$0A@@?$optional@_K@absl@@QEAA@$$QEA_K@Z - ??$?0_K@?$optional_data_dtor_base@_K$00@optional_internal@absl@@IEAA@Uin_place_t@2@$$QEA_K@Z ??$?6$01@LogMessage@log_internal@absl@@QEAAAEAV012@AEAY01$$CBD@Z ??$?6$02@LogMessage@log_internal@absl@@QEAAAEAV012@AEAY02$$CBD@Z ??$?6$0P@@LogMessage@log_internal@absl@@QEAAAEAV012@AEAY0P@$$CBD@Z @@ -766,7 +762,7 @@ ??$__distance@V?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YA_JV?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@01@0Urandom_access_iterator_tag@01@@Z ??$__do_rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__do_rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z - ??$__emplace_back_slow_path@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV312@AEA_K@Z + ??$__emplace_back_slow_path@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV612@AEA_K@Z ??$__emplace_unique_key_args@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBQEBUCordRep@cord_internal@absl@@0@Z ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QEAV?$tuple@$$V@12@@Z ??$__find_impl@PEAPEAVLogSink@absl@@PEAPEAV12@PEAV12@U__identity@__Cr@std@@@__Cr@std@@YAPEAPEAVLogSink@absl@@PEAPEAV23@0AEBQEAV23@AEAU__identity@01@@Z @@ -801,11 +797,11 @@ ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@PEAPEAU4567@PEAPEAU4567@@__Cr@std@@YA?AU?$pair@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@PEAPEAU1234@@01@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@00@Z ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PEAUTransition@cctz@time_internal@absl@@PEAU4567@PEAU4567@@__Cr@std@@YA?AU?$pair@PEAUTransition@cctz@time_internal@absl@@PEAU1234@@01@PEAUTransition@cctz@time_internal@absl@@00@Z ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PEAUTransitionType@cctz@time_internal@absl@@PEAU4567@PEAU4567@@__Cr@std@@YA?AU?$pair@PEAUTransitionType@cctz@time_internal@absl@@PEAU1234@@01@PEAUTransitionType@cctz@time_internal@absl@@00@Z - ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVLogSink@absl@@@Z - ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z - ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z + ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV345@@Z + ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVLogSink@absl@@AEBQEAV34@@Z + ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV345@@Z + ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUTransition@cctz@time_internal@absl@@AEBU3456@@Z + ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$$QEAU3456@@Z ??$__rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z ??$__rewrap_iter@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV12345@U?$__unwrap_iter_impl@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@$00@__Cr@std@@@__Cr@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@0@Z @@ -923,7 +919,6 @@ ??$advance@PEBUTransition@cctz@time_internal@absl@@_J@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEBUTransition@cctz@time_internal@absl@@_J@Z ??$advance@PEBUTransition@cctz@time_internal@absl@@_J_JX@__Cr@std@@YAXAEAPEBUTransition@cctz@time_internal@absl@@_J@Z ??$assign@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@$0A@@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@12@0@Z - ??$assign@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z @@ -956,7 +951,6 @@ ??$construct@UTransitionType@cctz@time_internal@absl@@$$VXX@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@@Z ??$construct@UTransitionType@cctz@time_internal@absl@@U1234@XX@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@$$QEAU4567@@Z ??$construct@UViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV456@AEA_KXX@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV712@AEA_K@Z - ??$construct@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$construct@VFormatArgImpl@str_format_internal@absl@@AEBV123@XX@?$allocator_traits@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@12@PEAVFormatArgImpl@str_format_internal@absl@@AEBV456@@Z ??$construct_at@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEAPEBV12345@PEAPEAPEBV12345@@__Cr@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@AEBQEAPEBV23456@@Z ??$construct_at@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV12345@PEAPEAPEBV12345@@__Cr@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@$$QEAPEAPEBV23456@@Z @@ -1039,7 +1033,6 @@ ??$forward@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@absl@@YAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@AEAV123@@Z ??$forward@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@absl@@YAAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@AEAV123@@Z ??$forward@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YAAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@AEAV123@@Z - ??$forward@AEAVCord@absl@@@absl@@YAAEAVCord@0@AEAV10@@Z ??$forward@AEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YAAEBV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@AEBV123@@Z ??$forward@AEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@absl@@YAAEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@AEBV123@@Z ??$forward@H@absl@@YA$$QEAHAEAH@Z @@ -1048,7 +1041,6 @@ ??$forward@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@absl@@YA$$QEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@AEAV123@@Z ??$forward@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@absl@@YA$$QEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@AEAV123@@Z ??$forward@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YA$$QEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@AEAV123@@Z - ??$forward@_K@absl@@YA$$QEA_KAEA_K@Z ??$get@$00@?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@QEGAAAEA_KXZ ??$get@$00@?$CompressedTuple@V?$allocator@H@__Cr@std@@_K@container_internal@absl@@QEGBAAEB_KXZ ??$get@$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@QEGAAAEAPEAPEAUCordRep@cord_internal@2@XZ @@ -1301,6 +1293,12 @@ ??0?$__non_trivial_if@$00V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??0?$__non_trivial_if@$00V?$allocator@V?$unique_ptr@VCRCImpl@crc_internal@absl@@U?$default_delete@VCRCImpl@crc_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??0?$__non_trivial_if@$00V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ + ??0?$__optional_copy_assign_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_copy_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_move_assign_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_move_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ + ??0?$__optional_storage_base@VCord@absl@@$0A@@__Cr@std@@QEAA@XZ ??0?$__policy_invoker@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__function@__Cr@std@@AEAA@P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@23@PEBT__policy_storage@123@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@Z ??0?$__policy_invoker@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__function@__Cr@std@@QEAA@XZ ??0?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@_K0AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z @@ -1382,22 +1380,7 @@ ??0?$move_iterator@PEAUPayload@status_internal@absl@@@__Cr@std@@QEAA@PEAUPayload@status_internal@absl@@@Z ??0?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@QEAA@PEAUTransition@cctz@time_internal@absl@@@Z ??0?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@QEAA@PEAUTransitionType@cctz@time_internal@absl@@@Z - ??0?$optional@I@absl@@QEAA@Unullopt_t@1@@Z - ??0?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAA@XZ - ??0?$optional@VCord@absl@@@absl@@QEAA@Unullopt_t@1@@Z - ??0?$optional@_K@absl@@QEAA@Unullopt_t@1@@Z - ??0?$optional_data@I$00@optional_internal@absl@@QEAA@XZ - ??0?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data@VCord@absl@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data@_K$00@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@I@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@VCord@absl@@@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_base@_K@optional_internal@absl@@QEAA@XZ - ??0?$optional_data_dtor_base@I$00@optional_internal@absl@@IEAA@XZ - ??0?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IEAA@XZ - ??0?$optional_data_dtor_base@_K$00@optional_internal@absl@@IEAA@XZ + ??0?$optional@VCord@absl@@@__Cr@std@@QEAA@Unullopt_t@12@@Z ??0?$probe_seq@$0BA@@container_internal@absl@@QEAA@_K0@Z ??0?$reverse_iterator@PEAPEAVCordzHandle@cord_internal@absl@@@__Cr@std@@QEAA@PEAPEAVCordzHandle@cord_internal@absl@@@Z ??0?$reverse_iterator@PEAPEAVLogSink@absl@@@__Cr@std@@QEAA@PEAPEAVLogSink@absl@@@Z @@ -1644,10 +1627,6 @@ ??1?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__Cr@std@@QEAA@XZ - ??1?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAA@XZ - ??1?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@QEAA@XZ - ??1?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@QEAA@XZ - ??1?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAA@XZ ??1?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??1?$unique_ptr@$$CBVImpl@time_zone@cctz@time_internal@absl@@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ @@ -1734,11 +1713,8 @@ ??1_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ ??1_ConstructTransaction@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ - ??1bad_optional_access@absl@@UEAA@XZ ??1bad_variant_access@absl@@UEAA@XZ ??4?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAV012@AEBV012@@Z - ??4?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAAAEAV01@$$QEAV01@@Z - ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAAAEAV012@$$QEAV012@@Z ??4?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAV012@$$QEAV012@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@$$QEAV01@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@AEBV01@@Z @@ -1835,7 +1811,6 @@ ??ACord@absl@@QEBAD_K@Z ??B?$NonIterableBitMask@I$0BA@$0A@@container_internal@absl@@QEBA_NXZ ??B?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__Cr@std@@QEBAPEAVCordzHandle@cord_internal@absl@@XZ - ??B?$optional@_K@absl@@QEBA_NXZ ??B?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@@__Cr@std@@@__Cr@std@@QEBA_NXZ ??B?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA_NXZ ??B?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA_NXZ @@ -1879,7 +1854,6 @@ ??D?$move_iterator@PEAUPayload@status_internal@absl@@@__Cr@std@@QEBA$$QEAUPayload@status_internal@absl@@XZ ??D?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@QEBA$$QEAUTransition@cctz@time_internal@absl@@XZ ??D?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@QEBA$$QEAUTransitionType@cctz@time_internal@absl@@XZ - ??D?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEGAAAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ??D?$reverse_iterator@PEAPEAVCordzHandle@cord_internal@absl@@@__Cr@std@@QEBAAEAPEAVCordzHandle@cord_internal@absl@@XZ ??D?$reverse_iterator@PEAPEAVLogSink@absl@@@__Cr@std@@QEBAAEAPEAVLogSink@absl@@XZ ??D?$reverse_iterator@PEAPEBVCordzHandle@cord_internal@absl@@@__Cr@std@@QEBAAEAPEBVCordzHandle@cord_internal@absl@@XZ @@ -1969,7 +1943,6 @@ ??R<lambda_1>@?0???A?$Span@D@absl@@QEBAAEAD_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???A?$Span@I@absl@@QEBAAEAI_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???CChunkIterator@Cord@absl@@QEBAPEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ@QEBA?A?<auto>@@XZ - ??R<lambda_1>@?0???D?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEGAAAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???DChunkIterator@Cord@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???EChunkIterator@Cord@absl@@QEAAAEAV123@XZ@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0??Append@FormatSinkImpl@str_format_internal@absl@@QEAAX_KD@Z@QEBA?A?<auto>@@0@Z @@ -2320,7 +2293,7 @@ ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ ?DisableRescheduling@SchedulingGuard@base_internal@absl@@CA_NXZ - ?DoLoad@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@AEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@ZXZ + ?DoLoad@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@AEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@ZXZ ?DoLoad@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@AEBAP6AXPEBDH000@ZXZ ?DoLoad@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@AEBAP6AXPEBDPEBX@ZXZ ?DoLoad@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@AEBAP6AXPEBDPEBX_J@ZXZ @@ -2329,7 +2302,7 @@ ?DoLoad@?$AtomicHook@P6AXXZ@base_internal@absl@@AEBAP6AXXZXZ ?DoLoad@?$AtomicHook@P6AX_J@Z@base_internal@absl@@AEBAP6AX_J@ZXZ ?DoLoad@?$AtomicHook@P6A_NW4LogSeverity@absl@@PEBDHPEAPEADPEAH@Z@base_internal@absl@@AEBAP6A_NW4LogSeverity@3@PEBDHPEAPEADPEAH@ZXZ - ?DoStore@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@AEAA_NP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z@Z + ?DoStore@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@AEAA_NP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z@Z ?DoStore@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@AEAA_NP6AXPEBDH000@Z@Z ?DoStore@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@AEAA_NP6AXPEBDPEBX@Z@Z ?DoStore@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@AEAA_NP6AXPEBDPEBX_J@Z@Z @@ -2339,7 +2312,7 @@ ?DoStore@?$AtomicHook@P6AX_J@Z@base_internal@absl@@AEAA_NP6AX_J@Z@Z ?DoStore@?$AtomicHook@P6A_NW4LogSeverity@absl@@PEBDHPEAPEADPEAH@Z@base_internal@absl@@AEAA_NP6A_NW4LogSeverity@3@PEBDHPEAPEADPEAH@Z@Z ?DropDeletesWithoutResize@container_internal@absl@@YAXAEAVCommonFields@12@AEBUPolicyFunctions@12@PEAX@Z - ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z + ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z ?DummyFunction@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@CAXPEBDH000@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@CAXPEBDPEBX@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@CAXPEBDPEBX_J@Z @@ -2395,7 +2368,7 @@ ?Eval@Condition@absl@@QEBA_NXZ ?Excess@str_format_internal@absl@@YA_K_K0@Z ?ExitOnDFatal@log_internal@absl@@YA_NXZ - ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@2@XZ + ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@__Cr@std@@XZ ?Extend@CRC32@crc_internal@absl@@UEBAXPEAIPEBX_K@Z ?ExtendByZeroes@CRC32@crc_internal@absl@@UEBAXPEAI_K@Z ?ExtendByZeroesImpl@CRC32@crc_internal@absl@@CAXPEAI_KQEBI2@Z @@ -2599,11 +2572,11 @@ ?GetOrCreateCurrentThreadIdentity@synchronization_internal@absl@@YAPEAUThreadIdentity@base_internal@2@XZ ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ - ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?GetProgramCounter@debugging_internal@absl@@YAPEAXQEAX@Z ?GetRepHi@time_internal@absl@@YA_JVDuration@2@@Z ?GetRepLo@time_internal@absl@@YAIVDuration@2@@Z - ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@2@XZ + ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@__Cr@std@@XZ ?GetSize@?$Storage@H$0CP@V?$allocator@H@__Cr@std@@@inlined_vector_internal@absl@@QEBA_KXZ ?GetSize@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEBA_KXZ ?GetSize@?$Storage@PEAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEBA_KXZ @@ -2629,7 +2602,7 @@ ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z ?GetStackTrace@absl@@YAHPEAPEAXHH@Z ?GetStackTraceWithContext@absl@@YAHPEAPEAXHHPEBXPEAH@Z - ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@ZXZ + ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@ZXZ ?GetStride@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetTID@base_internal@absl@@YAIXZ ?GetTagForChar@str_format_internal@absl@@YA?AVConvTag@12@D@Z @@ -2769,7 +2742,7 @@ ?Load32@big_endian@absl@@YAIPEBX@Z ?Load32@little_endian@absl@@YAIPEBX@Z ?Load64@little_endian@absl@@YA_KPEBX@Z - ?Load@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@QEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@ZXZ + ?Load@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@QEBAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@ZXZ ?Load@?$AtomicHook@P6AXXZ@base_internal@absl@@QEBAP6AXXZXZ ?Load@TimeZoneInfo@cctz@time_internal@absl@@AEAA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?Load@TimeZoneInfo@cctz@time_internal@absl@@AEAA_NPEAVZoneInfoSource@234@@Z @@ -3078,7 +3051,7 @@ ?SetPayload@StatusRep@status_internal@absl@@QEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@VCord@3@@Z ?SetPrecision@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXHPEAVFormatConversionSpecImpl@23@@Z ?SetStackUnwinder@absl@@YAXP6AHPEAPEAXPEAHHHPEBX1@Z@Z - ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@Z + ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@Z@Z ?SetStderrThreshold@absl@@YAXW4LogSeverityAtLeast@1@@Z ?SetSuppressSigabortTrace@log_internal@absl@@YA_N_N@Z ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPEAU?$atomic@H@__Cr@std@@@Z @@ -3137,7 +3110,7 @@ ?Store16@little_endian@absl@@YAXPEAXG@Z ?Store32@little_endian@absl@@YAXPEAXI@Z ?Store64@little_endian@absl@@YAXPEAX_K@Z - ?Store@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@QEAAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z@Z + ?Store@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@QEAAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z@Z ?Store@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@QEAAXP6AXPEBDH000@Z@Z ?Store@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@QEAAXP6AXPEBDPEBX@Z@Z ?Store@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@QEAAXP6AXPEBDPEBX_J@Z@Z @@ -4011,7 +3984,6 @@ ?deallocate@?$allocator_traits@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@PEAVFormatArgImpl@str_format_internal@absl@@_K@Z ?decrement_size@CommonFields@container_internal@absl@@QEAAXXZ ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ - ?destruct@?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAAXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUminute_tag@1234@Ufields@1234@1@Z @@ -4194,8 +4166,6 @@ ?has_show_pos_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_sign_col_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_timeout@KernelTimeout@synchronization_internal@absl@@QEBA_NXZ - ?has_value@?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEBA_NXZ - ?has_value@?$optional@_K@absl@@QEBA_NXZ ?has_zero_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?hash_function@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QEAAAEAU?$hash@PEBUCordRep@cord_internal@absl@@@23@XZ ?hash_function@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@XZ @@ -4339,8 +4309,6 @@ ?push_front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAX$$QEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ?raw_code@Status@absl@@QEBAHXZ ?reduce_size@InlineRep@Cord@absl@@QEAAX_K@Z - ?reference@?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@AEAAAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ - ?reference@?$optional@_K@absl@@AEAAAEA_KXZ ?release@?$unique_ptr@$$CBVImpl@time_zone@cctz@time_internal@absl@@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?release@?$unique_ptr@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?release@?$unique_ptr@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$__allocator_destructor@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ @@ -4532,7 +4500,6 @@ ?text_message_with_prefix_and_newline@LogEntry@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ ?text_message_with_prefix_and_newline_c_str@LogEntry@absl@@QEBAPEBDXZ ?thread_identity@PerThreadSynch@base_internal@absl@@QEAAPEAUThreadIdentity@23@XZ - ?throw_bad_optional_access@optional_internal@absl@@YAXXZ ?tid@LogEntry@absl@@QEBAIXZ ?timestamp@LogEntry@absl@@QEBA?AVTime@2@XZ ?to_address@?$pointer_traits@V?$__wrap_iter@PEAPEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@SAPEAPEAVLogSink@absl@@V?$__wrap_iter@PEAPEAVLogSink@absl@@@23@@Z @@ -4542,12 +4509,10 @@ ?type@ProtoField@log_internal@absl@@QEBA?AW4WireType@23@XZ ?unpoison@InlineData@cord_internal@absl@@QEAAXXZ ?utc_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ - ?value@?$optional@_K@absl@@QEGAAAEA_KXZ ?value@InputValue@UnboundConversion@str_format_internal@absl@@QEBAHXZ ?version@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?what@BadStatusOrAccess@absl@@UEBAPEBDXZ ?what@SeedGenException@absl@@UEBAPEBDXZ - ?what@bad_optional_access@absl@@UEBAPEBDXZ ?what@bad_variant_access@absl@@UEBAPEBDXZ ?width@FormatConversionSpecImpl@str_format_internal@absl@@QEBAHXZ ?words@?$BigUnsigned@$03@strings_internal@absl@@QEBAPEBIXZ
diff --git a/third_party/abseil-cpp/symbols_x64_rel.def b/third_party/abseil-cpp/symbols_x64_rel.def index fbd2b5b7..96d2c16 100644 --- a/third_party/abseil-cpp/symbols_x64_rel.def +++ b/third_party/abseil-cpp/symbols_x64_rel.def
@@ -1,6 +1,6 @@ EXPORTS ?$TSS0@?1??CrcAndCopy@CrcMemcpy@crc_internal@absl@@SA?AVcrc32c_t@3@PEIAXPEIBX_KV43@_N@Z@4HA - ??$?0AEAVCord@absl@@@?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IEAA@Uin_place_t@2@AEAVCord@2@@Z + ??$?0AEAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@Uin_place_t@12@AEAVCord@absl@@@Z ??$?0V?$allocator@D@__Cr@std@@@AlphaNum@absl@@QEAA@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?6C$0A@@LogMessage@log_internal@absl@@QEAAAEAV012@AEBC@Z @@ -143,20 +143,19 @@ ??$__destroy_at@UPayload@status_internal@absl@@$0A@@__Cr@std@@YAXPEAUPayload@status_internal@absl@@@Z ??$__do_rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__do_rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z - ??$__emplace_back_slow_path@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV312@AEA_K@Z + ??$__emplace_back_slow_path@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV612@AEA_K@Z ??$__emplace_unique_key_args@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBQEBUCordRep@cord_internal@absl@@0@Z ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QEAV?$tuple@$$V@12@@Z ??$__for_each_segment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@23@@__Cr@std@@YAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@01@0U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@01@@Z - ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVLogSink@absl@@@Z - ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z - ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z + ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV345@@Z + ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVLogSink@absl@@AEBQEAV34@@Z + ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV345@@Z + ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUTransition@cctz@time_internal@absl@@AEBU3456@@Z + ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$$QEAU3456@@Z ??$__rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z ??$__upper_bound@U_ClassicAlgPolicy@__Cr@std@@UByCivilTime@Transition@cctz@time_internal@absl@@PEBU5678@PEBU5678@U5678@U__identity@23@@__Cr@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@$$QEAUByCivilTime@2345@$$QEAU__identity@01@@Z ??$assign@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@$0A@@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@12@0@Z - ??$assign@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$construct_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@PEAU123@@__Cr@std@@YAPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@PEAU201@AEBUpiecewise_construct_t@01@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@01@$$QEAV?$tuple@$$V@01@@Z ??$construct_at@UPayload@status_internal@absl@@AEBU123@PEAU123@@__Cr@std@@YAPEAUPayload@status_internal@absl@@PEAU234@AEBU234@@Z ??$construct_at@UTransition@cctz@time_internal@absl@@$$VPEAU1234@@__Cr@std@@YAPEAUTransition@cctz@time_internal@absl@@PEAU2345@@Z @@ -274,10 +273,8 @@ ??1SeedGenException@absl@@UEAA@XZ ??1TimeZoneIf@cctz@time_internal@absl@@UEAA@XZ ??1ZoneInfoSource@cctz@time_internal@absl@@UEAA@XZ - ??1bad_optional_access@absl@@UEAA@XZ ??1bad_variant_access@absl@@UEAA@XZ ??4?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAV012@AEBV012@@Z - ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAAAEAV012@$$QEAV012@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@$$QEAV01@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@AEBV01@@Z ??4Cord@absl@@QEAAAEAV01@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -502,7 +499,7 @@ ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ ?DropDeletesWithoutResize@container_internal@absl@@YAXAEAVCommonFields@12@AEBUPolicyFunctions@12@PEAX@Z - ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z + ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z ?DummyFunction@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@CAXPEBDH000@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@CAXPEBDPEBX@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@CAXPEBDPEBX_J@Z @@ -547,7 +544,7 @@ ?ErrnoToStatusCode@absl@@YA?AW4StatusCode@1@H@Z ?Eval@Condition@absl@@QEBA_NXZ ?ExitOnDFatal@log_internal@absl@@YA_NXZ - ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@2@XZ + ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@__Cr@std@@XZ ?Extend@CRC32@crc_internal@absl@@UEBAXPEAIPEBX_K@Z ?ExtendByZeroes@CRC32@crc_internal@absl@@UEBAXPEAI_K@Z ?ExtendByZeroesImpl@CRC32@crc_internal@absl@@CAXPEAI_KQEBI2@Z @@ -671,9 +668,9 @@ ?GetMorePreciseMemoryUsage@cord_internal@absl@@YA_KPEBUCordRep@12@@Z ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ - ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?GetProgramCounter@debugging_internal@absl@@YAPEAXQEAX@Z - ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@2@XZ + ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@__Cr@std@@XZ ?GetSkipCount@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z @@ -681,7 +678,7 @@ ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z ?GetStackTrace@absl@@YAHPEAPEAXHH@Z ?GetStackTraceWithContext@absl@@YAHPEAPEAXHHPEBXPEAH@Z - ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@ZXZ + ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@ZXZ ?GetStride@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetTID@base_internal@absl@@YAIXZ ?GetTestEngine@CrcMemcpy@crc_internal@absl@@SA?AV?$unique_ptr@VCrcMemcpyEngine@crc_internal@absl@@U?$default_delete@VCrcMemcpyEngine@crc_internal@absl@@@__Cr@std@@@__Cr@std@@HH@Z @@ -939,7 +936,7 @@ ?SetMutexDeadlockDetectionMode@absl@@YAXW4OnDeadlockCycle@1@@Z ?SetPayload@StatusRep@status_internal@absl@@QEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@VCord@3@@Z ?SetStackUnwinder@absl@@YAXP6AHPEAPEAXPEAHHHPEBX1@Z@Z - ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@Z + ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@Z@Z ?SetStderrThreshold@absl@@YAXW4LogSeverityAtLeast@1@@Z ?SetSuppressSigabortTrace@log_internal@absl@@YA_N_N@Z ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPEAU?$atomic@H@__Cr@std@@@Z @@ -1230,12 +1227,10 @@ ?size@Cord@absl@@QEBA_KXZ ?status@BadStatusOrAccess@absl@@QEBAAEBVStatus@2@XZ ?stream@OstreamView@LogMessage@log_internal@absl@@QEAAAEAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ - ?throw_bad_optional_access@optional_internal@absl@@YAXXZ ?utc_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ ?version@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?what@BadStatusOrAccess@absl@@UEBAPEBDXZ ?what@SeedGenException@absl@@UEBAPEBDXZ - ?what@bad_optional_access@absl@@UEBAPEBDXZ ?what@bad_variant_access@absl@@UEBAPEBDXZ ?words@?$BigUnsigned@$03@strings_internal@absl@@QEBAPEBIXZ ?words@?$BigUnsigned@$0FE@@strings_internal@absl@@QEBAPEBIXZ
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan.def b/third_party/abseil-cpp/symbols_x64_rel_asan.def index 59f3123..e7696069 100644 --- a/third_party/abseil-cpp/symbols_x64_rel_asan.def +++ b/third_party/abseil-cpp/symbols_x64_rel_asan.def
@@ -1,6 +1,6 @@ EXPORTS ?$TSS0@?1??CrcAndCopy@CrcMemcpy@crc_internal@absl@@SA?AVcrc32c_t@3@PEIAXPEIBX_KV43@_N@Z@4HA - ??$?0AEAVCord@absl@@@?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IEAA@Uin_place_t@2@AEAVCord@2@@Z + ??$?0AEAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@Uin_place_t@12@AEAVCord@absl@@@Z ??$?0V?$allocator@D@__Cr@std@@@AlphaNum@absl@@QEAA@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?6C$0A@@LogMessage@log_internal@absl@@QEAAAEAV012@AEBC@Z @@ -150,14 +150,13 @@ ??$__emplace_unique_key_args@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBQEBUCordRep@cord_internal@absl@@0@Z ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@_N@12@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QEAV?$tuple@$$V@12@@Z ??$__for_each_segment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@23@@__Cr@std@@YAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@01@0U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@AEAU1234@PEAPEAU1234@_J$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@01@@Z - ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEAVLogSink@absl@@@Z - ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z + ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV345@@Z + ??$__push_back_slow_path@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEAVLogSink@absl@@AEBQEAV34@@Z + ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AEAAPEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV345@@Z ??$__rehash@$00@?$__hash_table@PEBUCordRep@cord_internal@absl@@U?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PEBUCordRep@cord_internal@absl@@@56@V?$allocator@PEBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AEAAX_K@Z ??$__rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AEAAX_K@Z ??$__upper_bound@U_ClassicAlgPolicy@__Cr@std@@UByCivilTime@Transition@cctz@time_internal@absl@@PEBU5678@PEBU5678@U5678@U__identity@23@@__Cr@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@$$QEAUByCivilTime@2345@$$QEAU__identity@01@@Z ??$assign@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@__Cr@std@@$0A@@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PEBU1234@AEBU1234@PEBQEBU1234@_J$0A@@12@0@Z - ??$assign@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$construct_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@PEAU123@@__Cr@std@@YAPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@PEAU201@AEBUpiecewise_construct_t@01@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@01@$$QEAV?$tuple@$$V@01@@Z ??$construct_at@UPayload@status_internal@absl@@AEBU123@PEAU123@@__Cr@std@@YAPEAUPayload@status_internal@absl@@PEAU234@AEBU234@@Z ??$construct_at@UPayload@status_internal@absl@@U123@PEAU123@@__Cr@std@@YAPEAUPayload@status_internal@absl@@PEAU234@$$QEAU234@@Z @@ -279,10 +278,8 @@ ??1SeedGenException@absl@@UEAA@XZ ??1TimeZoneIf@cctz@time_internal@absl@@UEAA@XZ ??1ZoneInfoSource@cctz@time_internal@absl@@UEAA@XZ - ??1bad_optional_access@absl@@UEAA@XZ ??1bad_variant_access@absl@@UEAA@XZ ??4?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAV012@AEBV012@@Z - ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IEAAAEAV012@$$QEAV012@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@$$QEAV01@@Z ??4BadStatusOrAccess@absl@@QEAAAEAV01@AEBV01@@Z ??4Cord@absl@@QEAAAEAV01@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -508,7 +505,7 @@ ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ ?DropDeletesWithoutResize@container_internal@absl@@YAXAEAVCommonFields@12@AEBUPolicyFunctions@12@PEAX@Z - ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@3@@Z + ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBVCord@absl@@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEBVCord@3@@Z ?DummyFunction@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@CAXPEBDH000@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX@Z@base_internal@absl@@CAXPEBDPEBX@Z ?DummyFunction@?$AtomicHook@P6AXPEBDPEBX_J@Z@base_internal@absl@@CAXPEBDPEBX_J@Z @@ -553,7 +550,7 @@ ?ErrnoToStatusCode@absl@@YA?AW4StatusCode@1@H@Z ?Eval@Condition@absl@@QEBA_NXZ ?ExitOnDFatal@log_internal@absl@@YA_NXZ - ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@2@XZ + ?ExpectedChecksum@Cord@absl@@QEBA?AV?$optional@I@__Cr@std@@XZ ?Extend@CRC32@crc_internal@absl@@UEBAXPEAIPEBX_K@Z ?ExtendByZeroes@CRC32@crc_internal@absl@@UEBAXPEAI_K@Z ?ExtendByZeroesImpl@CRC32@crc_internal@absl@@CAXPEAI_KQEBI2@Z @@ -677,9 +674,9 @@ ?GetMorePreciseMemoryUsage@cord_internal@absl@@YA_KPEBUCordRep@12@@Z ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ - ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetPayload@StatusRep@status_internal@absl@@QEBA?AV?$optional@VCord@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?GetProgramCounter@debugging_internal@absl@@YAPEAXQEAX@Z - ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@2@XZ + ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@__Cr@std@@XZ ?GetSkipCount@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z @@ -687,7 +684,7 @@ ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z ?GetStackTrace@absl@@YAHPEAPEAXHH@Z ?GetStackTraceWithContext@absl@@YAHPEAPEAXHHPEBXPEAH@Z - ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@ZXZ + ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@ZXZ ?GetStride@ExponentialBiased@profiling_internal@absl@@QEAA_J_J@Z ?GetTID@base_internal@absl@@YAIXZ ?GetTestEngine@CrcMemcpy@crc_internal@absl@@SA?AV?$unique_ptr@VCrcMemcpyEngine@crc_internal@absl@@U?$default_delete@VCrcMemcpyEngine@crc_internal@absl@@@__Cr@std@@@__Cr@std@@HH@Z @@ -948,7 +945,7 @@ ?SetMutexDeadlockDetectionMode@absl@@YAXW4OnDeadlockCycle@1@@Z ?SetPayload@StatusRep@status_internal@absl@@QEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@VCord@3@@Z ?SetStackUnwinder@absl@@YAXP6AHPEAPEAXPEAHHHPEBX1@Z@Z - ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@2@@Z@Z + ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@AEBVCord@2@@Z@Z ?SetStderrThreshold@absl@@YAXW4LogSeverityAtLeast@1@@Z ?SetSuppressSigabortTrace@log_internal@absl@@YA_N_N@Z ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPEAU?$atomic@H@__Cr@std@@@Z @@ -1253,6 +1250,7 @@ ?push_back@?$deque@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXAEBQEBVImpl@time_zone@cctz@time_internal@absl@@@Z ?push_back@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAX$$QEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ?push_back@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z + ?push_back@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXAEBUTransition@cctz@time_internal@absl@@@Z ?push_front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z ?push_front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAX$$QEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z ?push_front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXAEBQEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1282,12 +1280,10 @@ ?status@BadStatusOrAccess@absl@@QEBAAEBVStatus@2@XZ ?stream@OstreamView@LogMessage@log_internal@absl@@QEAAAEAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ ?tag@Rep@InlineData@cord_internal@absl@@QEBACXZ - ?throw_bad_optional_access@optional_internal@absl@@YAXXZ ?utc_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ ?version@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?what@BadStatusOrAccess@absl@@UEBAPEBDXZ ?what@SeedGenException@absl@@UEBAPEBDXZ - ?what@bad_optional_access@absl@@UEBAPEBDXZ ?what@bad_variant_access@absl@@UEBAPEBDXZ ?words@?$BigUnsigned@$03@strings_internal@absl@@QEBAPEBIXZ ?words@?$BigUnsigned@$0FE@@strings_internal@absl@@QEBAPEBIXZ
diff --git a/third_party/abseil-cpp/symbols_x86_dbg.def b/third_party/abseil-cpp/symbols_x86_dbg.def index 19b1ce83..5e855c5 100644 --- a/third_party/abseil-cpp/symbols_x86_dbg.def +++ b/third_party/abseil-cpp/symbols_x86_dbg.def
@@ -4,9 +4,9 @@ ??$?0$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@QAE@P6A_NPBU?$atomic@_N@__Cr@std@@@Z0@Z ??$?0$$CBUCordRep@cord_internal@absl@@@Hex@absl@@QAE@PBUCordRep@cord_internal@1@W4PadSpec@1@@Z ??$?0$$CBVFormatArgImpl@str_format_internal@absl@@$$CBV012@@?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@absl@@QAE@V?$initializer_list@VFormatArgImpl@str_format_internal@absl@@@std@@@Z - ??$?0$$T@?$Storage@PAPAUCordRep@cord_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QA$$T@Z - ??$?0$$T@?$Storage@PAPAVLogSink@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QA$$T@Z - ??$?0$$T@?$Storage@PAUPayload@status_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QA$$T@Z + ??$?0$$T@?$Storage@PAPAUCordRep@cord_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QA$$T@Z + ??$?0$$T@?$Storage@PAPAVLogSink@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QA$$T@Z + ??$?0$$T@?$Storage@PAUPayload@status_internal@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QA$$T@Z ??$?0$$TAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@?$__compressed_pair@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@$$QA$$TAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$?0$$TAAV?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@?$__compressed_pair@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@AAV?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@$$QA$$TAAV?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@12@@Z ??$?0$$TAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@$$QA$$TAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@@Z @@ -94,30 +94,30 @@ ??$?0AAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@12@$0A@@?$pair@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@23@@__Cr@std@@QAE@AAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@12@$$QAV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@12@@Z ??$?0AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@PAPAUCordRep@cord_internal@absl@@@container_internal@absl@@QAE@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$$QA$$T@Z - ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@PAPAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$$QA$$T@Z - ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@Z + ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@PAPAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@56@$$QA$$T@Z + ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@56@@Z ??$?0AAV?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@12@@Z ??$?0AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@@Z ??$?0AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@absl@@@container_internal@absl@@QAE@AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$$QA$$T@Z - ??$?0AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$$QA$$T@Z - ??$?0AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@@Z + ??$?0AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@PAVLogSink@absl@@@56@$$QA$$T@Z + ??$?0AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@PAVLogSink@absl@@@56@@Z ??$?0AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@PAVLogSink@absl@@@12@@Z ??$?0AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@12@@Z ??$?0AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@absl@@@container_internal@absl@@QAE@AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QA$$T@Z - ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QA$$T@Z - ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@UPayload@status_internal@absl@@@56@$$QA$$T@Z + ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0AAV?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z ??$?0AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z ??$?0AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@X@?$__compressed_pair_elem@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@@Z - ??$?0AAVCord@absl@@$0A@@?$optional@VCord@absl@@@absl@@QAE@AAVCord@1@@Z - ??$?0AAVCord@absl@@@?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IAE@Uin_place_t@2@AAVCord@2@@Z - ??$?0ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0AAVCord@absl@@$0A@@?$optional@VCord@absl@@@__Cr@std@@QAE@AAVCord@absl@@@Z + ??$?0AAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QAE@Uin_place_t@12@AAVCord@absl@@@Z + ??$?0ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@ABV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@container_internal@absl@@QAE@ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QAI@Z - ??$?0ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QAI@Z - ??$?0ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@Z + ??$?0ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@ABV?$allocator@UPayload@status_internal@absl@@@56@$$QAI@Z + ??$?0ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@56@@Z ??$?0ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@container_internal@absl@@QAE@ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$$QAI@Z - ??$?0ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@$$QAI@Z + ??$?0ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@56@$$QAI@Z ??$?0ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$Z$$V$$Z$0A@$$Z$S@?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@AAE@Upiecewise_construct_t@12@AAV?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@AAV?$tuple@$$V@12@U?$__tuple_indices@$0A@@12@U?$__tuple_indices@$S@12@@Z ??$?0ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$Z$$V@?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QAE@Upiecewise_construct_t@12@V?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@V?$tuple@$$V@12@@Z ??$?0D@FormatArgImpl@str_format_internal@absl@@QAE@ABD@Z @@ -128,9 +128,7 @@ ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@IV?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QAE@$$QAH$$QAU__default_init_tag@12@@Z ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@IV?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@$$QAH$$QAU__default_init_tag@12@@Z ??$?0HU__default_init_tag@__Cr@std@@@?$__compressed_pair@IV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@$$QAH$$QAU__default_init_tag@12@@Z - ??$?0I$0A@@?$optional@I@absl@@QAE@$$QAI@Z - ??$?0I@?$Storage@I$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAI@Z - ??$?0I@?$optional_data_dtor_base@I$00@optional_internal@absl@@IAE@Uin_place_t@2@$$QAI@Z + ??$?0I@?$Storage@I$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAI@Z ??$?0I@FormatArgImpl@str_format_internal@absl@@QAE@ABI@Z ??$?0MU__default_init_tag@__Cr@std@@@?$__compressed_pair@MU?$equal_to@PBUCordRep@cord_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@$$QAM$$QAU__default_init_tag@12@@Z ??$?0MU__default_init_tag@__Cr@std@@@?$__compressed_pair@MV?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@__Cr@std@@@__Cr@std@@QAE@$$QAM$$QAU__default_init_tag@12@@Z @@ -224,18 +222,18 @@ ??$?0V?$__hash_node_destructor@V?$allocator@U?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@X@?$__compressed_pair_elem@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@$$QAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@12@@Z ??$?0V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@X@?$__compressed_pair_elem@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@$00$0A@@__Cr@std@@QAE@$$QAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@12@@Z ??$?0V?$allocator@D@__Cr@std@@@AlphaNum@absl@@QAE@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z - ??$?0V?$allocator@H@__Cr@std@@@?$Storage@V?$allocator@H@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@H@__Cr@std@@@Z + ??$?0V?$allocator@H@__Cr@std@@@?$Storage@V?$allocator@H@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@H@56@@Z ??$?0V?$allocator@H@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@H@__Cr@std@@I@container_internal@absl@@QAE@$$QAV?$allocator@H@__Cr@std@@$$QAI@Z - ??$?0V?$allocator@H@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@H@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@H@__Cr@std@@$$QAI@Z - ??$?0V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@H@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@H@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@H@56@$$QAI@Z + ??$?0V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@PAUCordRep@cord_internal@absl@@@56@@Z ??$?0V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@I@container_internal@absl@@QAE@$$QAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$$QAI@Z - ??$?0V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$$QAI@Z - ??$?0V?$allocator@PAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@PAVLogSink@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@PAUCordRep@cord_internal@absl@@@56@$$QAI@Z + ??$?0V?$allocator@PAVLogSink@absl@@@__Cr@std@@@?$Storage@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@PAVLogSink@absl@@@56@@Z ??$?0V?$allocator@PAVLogSink@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@PAVLogSink@absl@@@__Cr@std@@I@container_internal@absl@@QAE@$$QAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$$QAI@Z - ??$?0V?$allocator@PAVLogSink@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAVLogSink@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@PAVLogSink@absl@@@__Cr@std@@$$QAI@Z - ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z + ??$?0V?$allocator@PAVLogSink@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAVLogSink@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@PAVLogSink@absl@@@56@$$QAI@Z + ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@UPayload@status_internal@absl@@@56@@Z ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@container_internal@absl@@QAE@$$QAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QAI@Z - ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QAI@Z + ??$?0V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@I@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@$$QAV?$allocator@UPayload@status_internal@absl@@@56@$$QAI@Z ??$?0V?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QAE@PAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QAE@$$QAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QAE@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z @@ -764,7 +762,7 @@ ??$__distance@V?$move_iterator@PAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAHV?$move_iterator@PAUTransitionType@cctz@time_internal@absl@@@01@0Urandom_access_iterator_tag@01@@Z ??$__do_rehash@$00@?$__hash_table@PBUCordRep@cord_internal@absl@@U?$hash@PBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PBUCordRep@cord_internal@absl@@@56@V?$allocator@PBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AAEXI@Z ??$__do_rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AAEXI@Z - ??$__emplace_back_slow_path@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABV123@AAI@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AAEXAAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@ABV312@AAI@Z + ??$__emplace_back_slow_path@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABV123@AAI@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAUViableSubstitution@strings_internal@absl@@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@ABV612@AAI@Z ??$__emplace_unique_key_args@PBUCordRep@cord_internal@absl@@ABQBU123@@?$__hash_table@PBUCordRep@cord_internal@absl@@U?$hash@PBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PBUCordRep@cord_internal@absl@@@56@V?$allocator@PBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QAE?AU?$pair@V?$__hash_iterator@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@_N@12@ABQBUCordRep@cord_internal@absl@@0@Z ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABUpiecewise_construct_t@23@V?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QAE?AU?$pair@V?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@_N@12@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@ABUpiecewise_construct_t@12@$$QAV?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QAV?$tuple@$$V@12@@Z ??$__find_impl@PAPAVLogSink@absl@@PAPAV12@PAV12@U__identity@__Cr@std@@@__Cr@std@@YAPAPAVLogSink@absl@@PAPAV23@0ABQAV23@AAU__identity@01@@Z @@ -799,11 +797,11 @@ ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@PAPAU4567@PAPAU4567@@__Cr@std@@YA?AU?$pair@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@PAPAU1234@@01@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@00@Z ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PAUTransition@cctz@time_internal@absl@@PAU4567@PAU4567@@__Cr@std@@YA?AU?$pair@PAUTransition@cctz@time_internal@absl@@PAU1234@@01@PAUTransition@cctz@time_internal@absl@@00@Z ??$__move_backward@U_ClassicAlgPolicy@__Cr@std@@PAUTransitionType@cctz@time_internal@absl@@PAU4567@PAU4567@@__Cr@std@@YA?AU?$pair@PAUTransitionType@cctz@time_internal@absl@@PAU1234@@01@PAUTransitionType@cctz@time_internal@absl@@00@Z - ??$__push_back_slow_path@ABQAVCordzHandle@cord_internal@absl@@@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEXABQAVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@ABQAVLogSink@absl@@@?$vector@PAVLogSink@absl@@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AAEXABQAVLogSink@absl@@@Z - ??$__push_back_slow_path@ABQBVCordzHandle@cord_internal@absl@@@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEXABQBVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@ABUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AAEXABUTransition@cctz@time_internal@absl@@@Z - ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AAEX$$QAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z + ??$__push_back_slow_path@ABQAVCordzHandle@cord_internal@absl@@@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAPAVCordzHandle@cord_internal@absl@@ABQAV345@@Z + ??$__push_back_slow_path@ABQAVLogSink@absl@@@?$vector@PAVLogSink@absl@@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AAEPAPAVLogSink@absl@@ABQAV34@@Z + ??$__push_back_slow_path@ABQBVCordzHandle@cord_internal@absl@@@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAPBVCordzHandle@cord_internal@absl@@ABQBV345@@Z + ??$__push_back_slow_path@ABUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAUTransition@cctz@time_internal@absl@@ABU3456@@Z + ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$$QAU3456@@Z ??$__rehash@$00@?$__hash_table@PBUCordRep@cord_internal@absl@@U?$hash@PBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PBUCordRep@cord_internal@absl@@@56@V?$allocator@PBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AAEXI@Z ??$__rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AAEXI@Z ??$__rewrap_iter@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@PAPAPBV12345@U?$__unwrap_iter_impl@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@$00@__Cr@std@@@__Cr@std@@YAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@PAPAPBV23456@0@Z @@ -921,7 +919,6 @@ ??$advance@PBUTransition@cctz@time_internal@absl@@H@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAAPBUTransition@cctz@time_internal@absl@@H@Z ??$advance@PBUTransition@cctz@time_internal@absl@@HHX@__Cr@std@@YAXAAPBUTransition@cctz@time_internal@absl@@H@Z ??$assign@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@$0A@@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAEXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@12@0@Z - ??$assign@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IAEX$$QAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$call_once@A6AXXZ$$V@absl@@YAXAAVonce_flag@0@A6AXXZ@Z ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABH@Z ??$combine@I$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABI@Z @@ -954,7 +951,6 @@ ??$construct@UTransitionType@cctz@time_internal@absl@@$$VXX@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PAUTransitionType@cctz@time_internal@absl@@@Z ??$construct@UTransitionType@cctz@time_internal@absl@@U1234@XX@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PAUTransitionType@cctz@time_internal@absl@@$$QAU4567@@Z ??$construct@UViableSubstitution@strings_internal@absl@@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABV456@AAIXX@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PAUViableSubstitution@strings_internal@absl@@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@ABV712@AAI@Z - ??$construct@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IAEX$$QAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$construct@VFormatArgImpl@str_format_internal@absl@@ABV123@XX@?$allocator_traits@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@12@PAVFormatArgImpl@str_format_internal@absl@@ABV456@@Z ??$construct_at@PAPBVImpl@time_zone@cctz@time_internal@absl@@ABQAPBV12345@PAPAPBV12345@@__Cr@std@@YAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@PAPAPBV23456@ABQAPBV23456@@Z ??$construct_at@PAPBVImpl@time_zone@cctz@time_internal@absl@@PAPBV12345@PAPAPBV12345@@__Cr@std@@YAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@PAPAPBV23456@$$QAPAPBV23456@@Z @@ -1037,7 +1033,6 @@ ??$forward@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@absl@@YAAAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@AAV123@@Z ??$forward@AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@@absl@@YAAAV?$allocator@PAVLogSink@absl@@@__Cr@std@@AAV123@@Z ??$forward@AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YAAAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@AAV123@@Z - ??$forward@AAVCord@absl@@@absl@@YAAAVCord@0@AAV10@@Z ??$forward@ABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@YAABV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@ABV123@@Z ??$forward@ABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@absl@@YAABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@ABV123@@Z ??$forward@H@absl@@YA$$QAHAAH@Z @@ -1298,6 +1293,12 @@ ??0?$__non_trivial_if@$00V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ ??0?$__non_trivial_if@$00V?$allocator@V?$unique_ptr@VCRCImpl@crc_internal@absl@@U?$default_delete@VCRCImpl@crc_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QAE@XZ ??0?$__non_trivial_if@$00V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ + ??0?$__optional_copy_assign_base@VCord@absl@@$0A@@__Cr@std@@QAE@XZ + ??0?$__optional_copy_base@VCord@absl@@$0A@@__Cr@std@@QAE@XZ + ??0?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QAE@XZ + ??0?$__optional_move_assign_base@VCord@absl@@$0A@@__Cr@std@@QAE@XZ + ??0?$__optional_move_base@VCord@absl@@$0A@@__Cr@std@@QAE@XZ + ??0?$__optional_storage_base@VCord@absl@@$0A@@__Cr@std@@QAE@XZ ??0?$__policy_invoker@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__function@__Cr@std@@AAE@P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@23@PBT__policy_storage@123@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@Z ??0?$__policy_invoker@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__function@__Cr@std@@QAE@XZ ??0?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@IIAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z @@ -1379,18 +1380,7 @@ ??0?$move_iterator@PAUPayload@status_internal@absl@@@__Cr@std@@QAE@PAUPayload@status_internal@absl@@@Z ??0?$move_iterator@PAUTransition@cctz@time_internal@absl@@@__Cr@std@@QAE@PAUTransition@cctz@time_internal@absl@@@Z ??0?$move_iterator@PAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@QAE@PAUTransitionType@cctz@time_internal@absl@@@Z - ??0?$optional@I@absl@@QAE@Unullopt_t@1@@Z - ??0?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QAE@XZ - ??0?$optional@VCord@absl@@@absl@@QAE@Unullopt_t@1@@Z - ??0?$optional_data@I$00@optional_internal@absl@@QAE@XZ - ??0?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IAE@XZ - ??0?$optional_data@VCord@absl@@$0A@@optional_internal@absl@@IAE@XZ - ??0?$optional_data_base@I@optional_internal@absl@@QAE@XZ - ??0?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@QAE@XZ - ??0?$optional_data_base@VCord@absl@@@optional_internal@absl@@QAE@XZ - ??0?$optional_data_dtor_base@I$00@optional_internal@absl@@IAE@XZ - ??0?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IAE@XZ - ??0?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IAE@XZ + ??0?$optional@VCord@absl@@@__Cr@std@@QAE@Unullopt_t@12@@Z ??0?$probe_seq@$0BA@@container_internal@absl@@QAE@II@Z ??0?$reverse_iterator@PAPAVCordzHandle@cord_internal@absl@@@__Cr@std@@QAE@PAPAVCordzHandle@cord_internal@absl@@@Z ??0?$reverse_iterator@PAPAVLogSink@absl@@@__Cr@std@@QAE@PAPAVLogSink@absl@@@Z @@ -1637,10 +1627,6 @@ ??1?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ ??1?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@@Z@__Cr@std@@QAE@XZ - ??1?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QAE@XZ - ??1?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@QAE@XZ - ??1?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@QAE@XZ - ??1?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IAE@XZ ??1?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QAE@XZ ??1?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE@XZ ??1?$unique_ptr@$$CBVImpl@time_zone@cctz@time_internal@absl@@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ @@ -1727,11 +1713,8 @@ ??1_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ ??1_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ ??1_ConstructTransaction@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ - ??1bad_optional_access@absl@@UAE@XZ ??1bad_variant_access@absl@@UAE@XZ ??4?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAV012@ABV012@@Z - ??4?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QAEAAV01@$$QAV01@@Z - ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IAEAAV012@$$QAV012@@Z ??4?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@@__Cr@std@@@__Cr@std@@QAEAAV012@$$QAV012@@Z ??4BadStatusOrAccess@absl@@QAEAAV01@$$QAV01@@Z ??4BadStatusOrAccess@absl@@QAEAAV01@ABV01@@Z @@ -1828,7 +1811,6 @@ ??ACord@absl@@QBEDI@Z ??B?$NonIterableBitMask@I$0BA@$0A@@container_internal@absl@@QBE_NXZ ??B?$__atomic_base@PAVCordzHandle@cord_internal@absl@@$0A@@__Cr@std@@QBEPAVCordzHandle@cord_internal@absl@@XZ - ??B?$optional@I@absl@@QBE_NXZ ??B?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@absl@@@__Cr@std@@@__Cr@std@@QBE_NXZ ??B?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QBE_NXZ ??B?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QBE_NXZ @@ -1872,7 +1854,6 @@ ??D?$move_iterator@PAUPayload@status_internal@absl@@@__Cr@std@@QBE$$QAUPayload@status_internal@absl@@XZ ??D?$move_iterator@PAUTransition@cctz@time_internal@absl@@@__Cr@std@@QBE$$QAUTransition@cctz@time_internal@absl@@XZ ??D?$move_iterator@PAUTransitionType@cctz@time_internal@absl@@@__Cr@std@@QBE$$QAUTransitionType@cctz@time_internal@absl@@XZ - ??D?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QGAEAAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ??D?$reverse_iterator@PAPAVCordzHandle@cord_internal@absl@@@__Cr@std@@QBEAAPAVCordzHandle@cord_internal@absl@@XZ ??D?$reverse_iterator@PAPAVLogSink@absl@@@__Cr@std@@QBEAAPAVLogSink@absl@@XZ ??D?$reverse_iterator@PAPBVCordzHandle@cord_internal@absl@@@__Cr@std@@QBEAAPBVCordzHandle@cord_internal@absl@@XZ @@ -1962,7 +1943,6 @@ ??R<lambda_1>@?0???A?$Span@D@absl@@QBEAADI@Z@QBE?A?<auto>@@XZ ??R<lambda_1>@?0???A?$Span@I@absl@@QBEAAII@Z@QBE?A?<auto>@@XZ ??R<lambda_1>@?0???CChunkIterator@Cord@absl@@QBEPBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ@QBE?A?<auto>@@XZ - ??R<lambda_1>@?0???D?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QGAEAAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ@QBE?A?<auto>@@XZ ??R<lambda_1>@?0???DChunkIterator@Cord@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ@QBE?A?<auto>@@XZ ??R<lambda_1>@?0???EChunkIterator@Cord@absl@@QAEAAV123@XZ@QBE?A?<auto>@@XZ ??R<lambda_1>@?0??Append@FormatSinkImpl@str_format_internal@absl@@QAEXID@Z@QBE?A?<auto>@@I@Z @@ -2313,7 +2293,7 @@ ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ ?DisableRescheduling@SchedulingGuard@base_internal@absl@@CA_NXZ - ?DoLoad@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@base_internal@absl@@ABEP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@3@@ZXZ + ?DoLoad@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABVCord@absl@@@Z@base_internal@absl@@ABEP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@ABVCord@3@@ZXZ ?DoLoad@?$AtomicHook@P6AXPBDH000@Z@base_internal@absl@@ABEP6AXPBDH000@ZXZ ?DoLoad@?$AtomicHook@P6AXPBDPBX@Z@base_internal@absl@@ABEP6AXPBDPBX@ZXZ ?DoLoad@?$AtomicHook@P6AXPBDPBX_J@Z@base_internal@absl@@ABEP6AXPBDPBX_J@ZXZ @@ -2322,7 +2302,7 @@ ?DoLoad@?$AtomicHook@P6AXXZ@base_internal@absl@@ABEP6AXXZXZ ?DoLoad@?$AtomicHook@P6AX_J@Z@base_internal@absl@@ABEP6AX_J@ZXZ ?DoLoad@?$AtomicHook@P6A_NW4LogSeverity@absl@@PBDHPAPADPAH@Z@base_internal@absl@@ABEP6A_NW4LogSeverity@3@PBDHPAPADPAH@ZXZ - ?DoStore@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@base_internal@absl@@AAE_NP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@3@@Z@Z + ?DoStore@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABVCord@absl@@@Z@base_internal@absl@@AAE_NP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@ABVCord@3@@Z@Z ?DoStore@?$AtomicHook@P6AXPBDH000@Z@base_internal@absl@@AAE_NP6AXPBDH000@Z@Z ?DoStore@?$AtomicHook@P6AXPBDPBX@Z@base_internal@absl@@AAE_NP6AXPBDPBX@Z@Z ?DoStore@?$AtomicHook@P6AXPBDPBX_J@Z@base_internal@absl@@AAE_NP6AXPBDPBX_J@Z@Z @@ -2332,7 +2312,7 @@ ?DoStore@?$AtomicHook@P6AX_J@Z@base_internal@absl@@AAE_NP6AX_J@Z@Z ?DoStore@?$AtomicHook@P6A_NW4LogSeverity@absl@@PBDHPAPADPAH@Z@base_internal@absl@@AAE_NP6A_NW4LogSeverity@3@PBDHPAPADPAH@Z@Z ?DropDeletesWithoutResize@container_internal@absl@@YAXAAVCommonFields@12@ABUPolicyFunctions@12@PAX@Z - ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@3@@Z + ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABVCord@absl@@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@ABVCord@3@@Z ?DummyFunction@?$AtomicHook@P6AXPBDH000@Z@base_internal@absl@@CAXPBDH000@Z ?DummyFunction@?$AtomicHook@P6AXPBDPBX@Z@base_internal@absl@@CAXPBDPBX@Z ?DummyFunction@?$AtomicHook@P6AXPBDPBX_J@Z@base_internal@absl@@CAXPBDPBX_J@Z @@ -2388,7 +2368,7 @@ ?Eval@Condition@absl@@QBE_NXZ ?Excess@str_format_internal@absl@@YAIII@Z ?ExitOnDFatal@log_internal@absl@@YA_NXZ - ?ExpectedChecksum@Cord@absl@@QBE?AV?$optional@I@2@XZ + ?ExpectedChecksum@Cord@absl@@QBE?AV?$optional@I@__Cr@std@@XZ ?Extend@CRC32@crc_internal@absl@@UBEXPAIPBXI@Z ?ExtendByZeroes@CRC32@crc_internal@absl@@UBEXPAII@Z ?ExtendByZeroesImpl@CRC32@crc_internal@absl@@CAXPAIIQBI1@Z @@ -2592,11 +2572,11 @@ ?GetOrCreateCurrentThreadIdentity@synchronization_internal@absl@@YAPAUThreadIdentity@base_internal@2@XZ ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PBV123@@Z ?GetParentStack@CordzInfo@cord_internal@absl@@QBE?AV?$Span@QAX@3@XZ - ?GetPayload@StatusRep@status_internal@absl@@QBE?AV?$optional@VCord@absl@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetPayload@StatusRep@status_internal@absl@@QBE?AV?$optional@VCord@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?GetProgramCounter@debugging_internal@absl@@YAPAXQAX@Z ?GetRepHi@time_internal@absl@@YA_JVDuration@2@@Z ?GetRepLo@time_internal@absl@@YAIVDuration@2@@Z - ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@2@XZ + ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@__Cr@std@@XZ ?GetSize@?$Storage@H$0CP@V?$allocator@H@__Cr@std@@@inlined_vector_internal@absl@@QBEIXZ ?GetSize@?$Storage@PAUCordRep@cord_internal@absl@@$01V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QBEIXZ ?GetSize@?$Storage@PAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QBEIXZ @@ -2622,7 +2602,7 @@ ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QAEHUGraphId@23@PAPAPAX@Z ?GetStackTrace@absl@@YAHPAPAXHH@Z ?GetStackTraceWithContext@absl@@YAHPAPAXHHPBXPAH@Z - ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@ZXZ + ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@ABVCord@2@@ZXZ ?GetStride@ExponentialBiased@profiling_internal@absl@@QAE_J_J@Z ?GetTID@base_internal@absl@@YAIXZ ?GetTagForChar@str_format_internal@absl@@YA?AVConvTag@12@D@Z @@ -2762,7 +2742,7 @@ ?Load32@big_endian@absl@@YAIPBX@Z ?Load32@little_endian@absl@@YAIPBX@Z ?Load64@little_endian@absl@@YA_KPBX@Z - ?Load@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@base_internal@absl@@QBEP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@3@@ZXZ + ?Load@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABVCord@absl@@@Z@base_internal@absl@@QBEP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@ABVCord@3@@ZXZ ?Load@?$AtomicHook@P6AXXZ@base_internal@absl@@QBEP6AXXZXZ ?Load@TimeZoneInfo@cctz@time_internal@absl@@AAE_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?Load@TimeZoneInfo@cctz@time_internal@absl@@AAE_NPAVZoneInfoSource@234@@Z @@ -3071,7 +3051,7 @@ ?SetPayload@StatusRep@status_internal@absl@@QAEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@VCord@3@@Z ?SetPrecision@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXHPAVFormatConversionSpecImpl@23@@Z ?SetStackUnwinder@absl@@YAXP6AHPAPAXPAHHHPBX1@Z@Z - ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@Z + ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@ABVCord@2@@Z@Z ?SetStderrThreshold@absl@@YAXW4LogSeverityAtLeast@1@@Z ?SetSuppressSigabortTrace@log_internal@absl@@YA_N_N@Z ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPAU?$atomic@H@__Cr@std@@@Z @@ -3130,7 +3110,7 @@ ?Store16@little_endian@absl@@YAXPAXG@Z ?Store32@little_endian@absl@@YAXPAXI@Z ?Store64@little_endian@absl@@YAXPAX_K@Z - ?Store@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@base_internal@absl@@QAEXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@3@@Z@Z + ?Store@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABVCord@absl@@@Z@base_internal@absl@@QAEXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@ABVCord@3@@Z@Z ?Store@?$AtomicHook@P6AXPBDH000@Z@base_internal@absl@@QAEXP6AXPBDH000@Z@Z ?Store@?$AtomicHook@P6AXPBDPBX@Z@base_internal@absl@@QAEXP6AXPBDPBX@Z@Z ?Store@?$AtomicHook@P6AXPBDPBX_J@Z@base_internal@absl@@QAEXP6AXPBDPBX_J@Z@Z @@ -4004,7 +3984,6 @@ ?deallocate@?$allocator_traits@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@PAVFormatArgImpl@str_format_internal@absl@@I@Z ?decrement_size@CommonFields@container_internal@absl@@QAEXXZ ?description@time_zone@cctz@time_internal@absl@@QBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ - ?destruct@?$optional_data_dtor_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IAEXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUminute_tag@1234@Ufields@1234@1@Z @@ -4187,8 +4166,6 @@ ?has_show_pos_flag@FormatConversionSpecImpl@str_format_internal@absl@@QBE_NXZ ?has_sign_col_flag@FormatConversionSpecImpl@str_format_internal@absl@@QBE_NXZ ?has_timeout@KernelTimeout@synchronization_internal@absl@@QBE_NXZ - ?has_value@?$optional@I@absl@@QBE_NXZ - ?has_value@?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QBE_NXZ ?has_zero_flag@FormatConversionSpecImpl@str_format_internal@absl@@QBE_NXZ ?hash_function@?$__hash_table@PBUCordRep@cord_internal@absl@@U?$hash@PBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PBUCordRep@cord_internal@absl@@@56@V?$allocator@PBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QAEAAU?$hash@PBUCordRep@cord_internal@absl@@@23@XZ ?hash_function@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QAEAAV?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@XZ @@ -4332,8 +4309,6 @@ ?push_front@?$__split_buffer@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAEX$$QAPAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ?raw_code@Status@absl@@QBEHXZ ?reduce_size@InlineRep@Cord@absl@@QAEXI@Z - ?reference@?$optional@I@absl@@AAEAAIXZ - ?reference@?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@AAEAAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?release@?$unique_ptr@$$CBVImpl@time_zone@cctz@time_internal@absl@@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEPBVImpl@time_zone@cctz@time_internal@absl@@XZ ?release@?$unique_ptr@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QAEPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ ?release@?$unique_ptr@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$__allocator_destructor@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QAEPAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ @@ -4525,7 +4500,6 @@ ?text_message_with_prefix_and_newline@LogEntry@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ ?text_message_with_prefix_and_newline_c_str@LogEntry@absl@@QBEPBDXZ ?thread_identity@PerThreadSynch@base_internal@absl@@QAEPAUThreadIdentity@23@XZ - ?throw_bad_optional_access@optional_internal@absl@@YAXXZ ?tid@LogEntry@absl@@QBEIXZ ?timestamp@LogEntry@absl@@QBE?AVTime@2@XZ ?to_address@?$pointer_traits@V?$__wrap_iter@PAPAVLogSink@absl@@@__Cr@std@@@__Cr@std@@SAPAPAVLogSink@absl@@V?$__wrap_iter@PAPAVLogSink@absl@@@23@@Z @@ -4535,12 +4509,10 @@ ?type@ProtoField@log_internal@absl@@QBE?AW4WireType@23@XZ ?unpoison@InlineData@cord_internal@absl@@QAEXXZ ?utc_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ - ?value@?$optional@I@absl@@QGAEAAIXZ ?value@InputValue@UnboundConversion@str_format_internal@absl@@QBEHXZ ?version@time_zone@cctz@time_internal@absl@@QBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?what@BadStatusOrAccess@absl@@UBEPBDXZ ?what@SeedGenException@absl@@UBEPBDXZ - ?what@bad_optional_access@absl@@UBEPBDXZ ?what@bad_variant_access@absl@@UBEPBDXZ ?width@FormatConversionSpecImpl@str_format_internal@absl@@QBEHXZ ?words@?$BigUnsigned@$03@strings_internal@absl@@QBEPBIXZ
diff --git a/third_party/abseil-cpp/symbols_x86_rel.def b/third_party/abseil-cpp/symbols_x86_rel.def index c743ef3e..b865a4d 100644 --- a/third_party/abseil-cpp/symbols_x86_rel.def +++ b/third_party/abseil-cpp/symbols_x86_rel.def
@@ -1,6 +1,6 @@ EXPORTS ?$TSS0@?1??CrcAndCopy@CrcMemcpy@crc_internal@absl@@SA?AVcrc32c_t@3@PIAXPIBXIV43@_N@Z@4HA - ??$?0AAVCord@absl@@@?$optional_data_dtor_base@VCord@absl@@$0A@@optional_internal@absl@@IAE@Uin_place_t@2@AAVCord@2@@Z + ??$?0AAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QAE@Uin_place_t@12@AAVCord@absl@@@Z ??$?0V?$allocator@D@__Cr@std@@@AlphaNum@absl@@QAE@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?0V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QAE@$$QAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?6C$0A@@LogMessage@log_internal@absl@@QAEAAV012@ABC@Z @@ -152,17 +152,16 @@ ??$__emplace_unique_key_args@PBUCordRep@cord_internal@absl@@ABQBU123@@?$__hash_table@PBUCordRep@cord_internal@absl@@U?$hash@PBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PBUCordRep@cord_internal@absl@@@56@V?$allocator@PBUCordRep@cord_internal@absl@@@56@@__Cr@std@@QAE?AU?$pair@V?$__hash_iterator@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@_N@12@ABQBUCordRep@cord_internal@absl@@0@Z ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABUpiecewise_construct_t@23@V?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QAE?AU?$pair@V?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@_N@12@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@ABUpiecewise_construct_t@12@$$QAV?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QAV?$tuple@$$V@12@@Z ??$__for_each_segment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@23@@__Cr@std@@YAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@01@0U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@23@@?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@01@@Z - ??$__push_back_slow_path@ABQAVCordzHandle@cord_internal@absl@@@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEXABQAVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@ABQAVLogSink@absl@@@?$vector@PAVLogSink@absl@@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AAEXABQAVLogSink@absl@@@Z - ??$__push_back_slow_path@ABQBVCordzHandle@cord_internal@absl@@@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEXABQBVCordzHandle@cord_internal@absl@@@Z - ??$__push_back_slow_path@ABUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AAEXABUTransition@cctz@time_internal@absl@@@Z - ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AAEX$$QAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z + ??$__push_back_slow_path@ABQAVCordzHandle@cord_internal@absl@@@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAPAVCordzHandle@cord_internal@absl@@ABQAV345@@Z + ??$__push_back_slow_path@ABQAVLogSink@absl@@@?$vector@PAVLogSink@absl@@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@__Cr@std@@AAEPAPAVLogSink@absl@@ABQAV34@@Z + ??$__push_back_slow_path@ABQBVCordzHandle@cord_internal@absl@@@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAPBVCordzHandle@cord_internal@absl@@ABQBV345@@Z + ??$__push_back_slow_path@ABUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAUTransition@cctz@time_internal@absl@@ABU3456@@Z + ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@AAEPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$$QAU3456@@Z ??$__rehash@$00@?$__hash_table@PBUCordRep@cord_internal@absl@@U?$hash@PBUCordRep@cord_internal@absl@@@__Cr@std@@U?$equal_to@PBUCordRep@cord_internal@absl@@@56@V?$allocator@PBUCordRep@cord_internal@absl@@@56@@__Cr@std@@AAEXI@Z ??$__rehash@$00@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@AAEXI@Z ??$__unwrap_and_dispatch@U?$__overload@U?$__copy_loop@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@U__copy_trivial@23@@__Cr@std@@PBUPrefixCrc@CrcCordState@crc_internal@absl@@PBU4567@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@23@$0A@@__Cr@std@@YA?AU?$pair@PBUPrefixCrc@CrcCordState@crc_internal@absl@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@__Cr@std@@@01@PBUPrefixCrc@CrcCordState@crc_internal@absl@@0V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@01@@Z ??$__upper_bound@U_ClassicAlgPolicy@__Cr@std@@UByCivilTime@Transition@cctz@time_internal@absl@@PBU5678@PBU5678@U5678@U__identity@23@@__Cr@std@@YAPBUTransition@cctz@time_internal@absl@@PBU2345@0ABU2345@$$QAUByCivilTime@2345@$$QAU__identity@01@@Z ??$assign@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@$0A@@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAEXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@12@0@Z - ??$assign@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@optional_internal@absl@@IAEX$$QAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$construct_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@ABUpiecewise_construct_t@23@V?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@PAU123@@__Cr@std@@YAPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@01@PAU201@ABUpiecewise_construct_t@01@$$QAV?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@01@$$QAV?$tuple@$$V@01@@Z ??$construct_at@UPayload@status_internal@absl@@ABU123@PAU123@@__Cr@std@@YAPAUPayload@status_internal@absl@@PAU234@ABU234@@Z ??$construct_at@UTransition@cctz@time_internal@absl@@$$VPAU1234@@__Cr@std@@YAPAUTransition@cctz@time_internal@absl@@PAU2345@@Z @@ -278,10 +277,8 @@ ??1SeedGenException@absl@@UAE@XZ ??1TimeZoneIf@cctz@time_internal@absl@@UAE@XZ ??1ZoneInfoSource@cctz@time_internal@absl@@UAE@XZ - ??1bad_optional_access@absl@@UAE@XZ ??1bad_variant_access@absl@@UAE@XZ ??4?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAV012@ABV012@@Z - ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@optional_internal@absl@@IAEAAV012@$$QAV012@@Z ??4BadStatusOrAccess@absl@@QAEAAV01@$$QAV01@@Z ??4BadStatusOrAccess@absl@@QAEAAV01@ABV01@@Z ??4Cord@absl@@QAEAAV01@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z @@ -506,7 +503,7 @@ ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ ?DropDeletesWithoutResize@container_internal@absl@@YAXAAVCommonFields@12@ABUPolicyFunctions@12@PAX@Z - ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@3@@Z + ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABVCord@absl@@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@ABVCord@3@@Z ?DummyFunction@?$AtomicHook@P6AXPBDH000@Z@base_internal@absl@@CAXPBDH000@Z ?DummyFunction@?$AtomicHook@P6AXPBDPBX@Z@base_internal@absl@@CAXPBDPBX@Z ?DummyFunction@?$AtomicHook@P6AXPBDPBX_J@Z@base_internal@absl@@CAXPBDPBX_J@Z @@ -551,7 +548,7 @@ ?ErrnoToStatusCode@absl@@YA?AW4StatusCode@1@H@Z ?Eval@Condition@absl@@QBE_NXZ ?ExitOnDFatal@log_internal@absl@@YA_NXZ - ?ExpectedChecksum@Cord@absl@@QBE?AV?$optional@I@2@XZ + ?ExpectedChecksum@Cord@absl@@QBE?AV?$optional@I@__Cr@std@@XZ ?Extend@CRC32@crc_internal@absl@@UBEXPAIPBXI@Z ?ExtendByZeroes@CRC32@crc_internal@absl@@UBEXPAII@Z ?ExtendByZeroesImpl@CRC32@crc_internal@absl@@CAXPAIIQBI1@Z @@ -675,9 +672,9 @@ ?GetMorePreciseMemoryUsage@cord_internal@absl@@YAIPBUCordRep@12@@Z ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PBV123@@Z ?GetParentStack@CordzInfo@cord_internal@absl@@QBE?AV?$Span@QAX@3@XZ - ?GetPayload@StatusRep@status_internal@absl@@QBE?AV?$optional@VCord@absl@@@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetPayload@StatusRep@status_internal@absl@@QBE?AV?$optional@VCord@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?GetProgramCounter@debugging_internal@absl@@YAPAXQAX@Z - ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@2@XZ + ?GetSaltMaterial@random_internal@absl@@YA?AV?$optional@I@__Cr@std@@XZ ?GetSkipCount@ExponentialBiased@profiling_internal@absl@@QAE_J_J@Z ?GetStack@CordzInfo@cord_internal@absl@@QBE?AV?$Span@QAX@3@XZ ?GetStackFrames@absl@@YAHPAPAXPAHHH@Z @@ -685,7 +682,7 @@ ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QAEHUGraphId@23@PAPAPAX@Z ?GetStackTrace@absl@@YAHPAPAXHH@Z ?GetStackTraceWithContext@absl@@YAHPAPAXHHPBXPAH@Z - ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@ZXZ + ?GetStatusPayloadPrinter@status_internal@absl@@YAP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@ABVCord@2@@ZXZ ?GetStride@ExponentialBiased@profiling_internal@absl@@QAE_J_J@Z ?GetTID@base_internal@absl@@YAIXZ ?GetTestEngine@CrcMemcpy@crc_internal@absl@@SA?AV?$unique_ptr@VCrcMemcpyEngine@crc_internal@absl@@U?$default_delete@VCrcMemcpyEngine@crc_internal@absl@@@__Cr@std@@@__Cr@std@@HH@Z @@ -944,7 +941,7 @@ ?SetMutexDeadlockDetectionMode@absl@@YAXW4OnDeadlockCycle@1@@Z ?SetPayload@StatusRep@status_internal@absl@@QAEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@VCord@3@@Z ?SetStackUnwinder@absl@@YAXP6AHPAPAXPAHHHPBX1@Z@Z - ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@2@@Z@Z + ?SetStatusPayloadPrinter@status_internal@absl@@YAXP6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@ABVCord@2@@Z@Z ?SetStderrThreshold@absl@@YAXW4LogSeverityAtLeast@1@@Z ?SetSuppressSigabortTrace@log_internal@absl@@YA_N_N@Z ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPAU?$atomic@H@__Cr@std@@@Z @@ -1235,12 +1232,10 @@ ?size@Cord@absl@@QBEIXZ ?status@BadStatusOrAccess@absl@@QBEABVStatus@2@XZ ?stream@OstreamView@LogMessage@log_internal@absl@@QAEAAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ - ?throw_bad_optional_access@optional_internal@absl@@YAXXZ ?utc_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ ?version@time_zone@cctz@time_internal@absl@@QBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?what@BadStatusOrAccess@absl@@UBEPBDXZ ?what@SeedGenException@absl@@UBEPBDXZ - ?what@bad_optional_access@absl@@UBEPBDXZ ?what@bad_variant_access@absl@@UBEPBDXZ ?words@?$BigUnsigned@$03@strings_internal@absl@@QBEPBIXZ ?words@?$BigUnsigned@$0FE@@strings_internal@absl@@QBEPBIXZ
diff --git a/third_party/angle b/third_party/angle index 32ef34d..4ace4da 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 32ef34df48920cff6f6b629c515e052fa4baa968 +Subproject commit 4ace4da1c446a0f89eb26c7af5455845565d1a4a
diff --git a/third_party/blink/PRESUBMIT.py b/third_party/blink/PRESUBMIT.py index 8339b34d..f90b9ac 100644 --- a/third_party/blink/PRESUBMIT.py +++ b/third_party/blink/PRESUBMIT.py
@@ -57,7 +57,7 @@ # public C++ API. Adding to these allowed interfaces should meet the # following conditions: # - Its pros/cons is discussed and have consensus on - # platform-architecture-dev@ and/or + # platform-architecture-dev@ or # - It uses POD types that will not import STL (or base string) types into # blink (such as no strings or vectors). #
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index 00002cf5..102a878c 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -1689,7 +1689,7 @@ BASE_FEATURE(kSharedStorageAPIM118, "SharedStorageAPIM118", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kSimulateClickOnAXFocus, "SimulateClickOnAXFocus", @@ -1836,6 +1836,10 @@ &kStorageAccessAPI, "storage_access_api_top_level_user_interaction_bound", base::Days(30)}; const base::FeatureParam<base::TimeDelta> + kStorageAccessAPIRelatedWebsiteSetsLifetime{ + &kStorageAccessAPI, "related_website_sets_permission_lifetime", + base::Days(30)}; +const base::FeatureParam<base::TimeDelta> kStorageAccessAPIImplicitPermissionLifetime{ &kStorageAccessAPI, "storage_access_api_implicit_permission_lifetime", base::Hours(24)};
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index b8ac1f5..a44bc02 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -1198,6 +1198,10 @@ // empty duration (e.g. "0s"), then no top-level user interaction is required. BLINK_COMMON_EXPORT extern const base::FeatureParam<base::TimeDelta> kStorageAccessAPITopLevelUserInteractionBound; +// How long a Related Website Sets Storage Access API permission +// grant/denial should last (not taking renewals into account). +BLINK_COMMON_EXPORT extern const base::FeatureParam<base::TimeDelta> + kStorageAccessAPIRelatedWebsiteSetsLifetime; // How long an implicit Storage Access API permission grant/denial should last // (not taking renewals into account). BLINK_COMMON_EXPORT extern const base::FeatureParam<base::TimeDelta>
diff --git a/third_party/blink/renderer/core/editing/editor.cc b/third_party/blink/renderer/core/editing/editor.cc index 210167f..0ee3cf9 100644 --- a/third_party/blink/renderer/core/editing/editor.cc +++ b/third_party/blink/renderer/core/editing/editor.cc
@@ -979,9 +979,6 @@ } void Editor::ElementRemoved(Element* element) { - if (!RuntimeEnabledFeatures::DontLeakDetachedInputEnabled()) { - return; - } if (last_edit_command_ && last_edit_command_->EndingSelection().RootEditableElement() == element) { last_edit_command_ = nullptr;
diff --git a/third_party/blink/renderer/core/editing/spellcheck/cold_mode_spell_check_requester.cc b/third_party/blink/renderer/core/editing/spellcheck/cold_mode_spell_check_requester.cc index 9e10c93..d1686b81 100644 --- a/third_party/blink/renderer/core/editing/spellcheck/cold_mode_spell_check_requester.cc +++ b/third_party/blink/renderer/core/editing/spellcheck/cold_mode_spell_check_requester.cc
@@ -264,9 +264,6 @@ } void ColdModeSpellCheckRequester::ElementRemoved(Element* element) { - if (!RuntimeEnabledFeatures::DontLeakDetachedInputEnabled()) { - return; - } if (root_editable_ == element) { ClearProgress(); }
diff --git a/third_party/blink/renderer/core/html/forms/html_field_set_element.cc b/third_party/blink/renderer/core/html/forms/html_field_set_element.cc index 9a03423..d4775e35 100644 --- a/third_party/blink/renderer/core/html/forms/html_field_set_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_field_set_element.cc
@@ -116,15 +116,11 @@ } void HTMLFieldSetElement::AncestorDisabledStateWasChanged() { - if (RuntimeEnabledFeatures::NonReentrantFieldSetDisableEnabled()) { - ancestor_disabled_state_ = AncestorDisabledState::kUnknown; - // Do not re-enter HTMLFieldSetElement::DisabledAttributeChanged(), so that - // we only invalidate this element's own disabled state and do not traverse - // the descendants. - HTMLFormControlElement::DisabledAttributeChanged(); - } else { - HTMLFormControlElement::AncestorDisabledStateWasChanged(); - } + ancestor_disabled_state_ = AncestorDisabledState::kUnknown; + // Do not re-enter HTMLFieldSetElement::DisabledAttributeChanged(), so that + // we only invalidate this element's own disabled state and do not traverse + // the descendants. + HTMLFormControlElement::DisabledAttributeChanged(); } void HTMLFieldSetElement::ChildrenChanged(const ChildrenChange& change) {
diff --git a/third_party/blink/renderer/core/layout/layout_replaced.cc b/third_party/blink/renderer/core/layout/layout_replaced.cc index 6bc1a2b..e8bf41b0 100644 --- a/third_party/blink/renderer/core/layout/layout_replaced.cc +++ b/third_party/blink/renderer/core/layout/layout_replaced.cc
@@ -124,22 +124,10 @@ NOT_DESTROYED(); DCHECK(NeedsLayout()); - PhysicalRect old_content_rect = ReplacedContentRect(); - ClearLayoutOverflow(); ClearSelfNeedsLayoutOverflowRecalc(); ClearChildNeedsLayoutOverflowRecalc(); - ClearNeedsLayout(); - - if (RuntimeEnabledFeatures::PaintNewReplacedInvalidationEnabled()) { - return; - } - - if (ReplacedContentRectFrom(PhysicalContentBoxRectFromNG()) != - old_content_rect) { - SetShouldDoFullPaintInvalidation(); - } } void LayoutReplaced::IntrinsicSizeChanged() {
diff --git a/third_party/blink/renderer/core/layout/ng/table/layout_ng_table_row.cc b/third_party/blink/renderer/core/layout/ng/table/layout_ng_table_row.cc index ab3478d..f8665120 100644 --- a/third_party/blink/renderer/core/layout/ng/table/layout_ng_table_row.cc +++ b/third_party/blink/renderer/core/layout/ng/table/layout_ng_table_row.cc
@@ -118,6 +118,12 @@ NOT_DESTROYED(); if (LayoutNGTable* table = Table()) table->TableGridStructureChanged(); + // Invalidate background in case this doesn't need layout which would + // trigger the invalidation, e.g. when the last child is removed. + if (StyleRef().HasBackground()) { + SetBackgroundNeedsFullPaintInvalidation(); + } + LayoutBlock::RemoveChild(child); }
diff --git a/third_party/blink/renderer/core/page/print_context_test.cc b/third_party/blink/renderer/core/page/print_context_test.cc index 1c9dbc5..8fb7444 100644 --- a/third_party/blink/renderer/core/page/print_context_test.cc +++ b/third_party/blink/renderer/core/page/print_context_test.cc
@@ -1013,6 +1013,16 @@ PrintSinglePage(canvas); } +namespace { + +class AcceleratedCompositingTestPlatform + : public blink::TestingPlatformSupport { + public: + bool IsGpuCompositingDisabled() const override { return false; } +}; + +} // namespace + // For testing printing behavior when 2d canvas contexts use oop rasterization. class PrintContextOOPRCanvasTest : public PrintContextTest { public: @@ -1035,6 +1045,8 @@ InitializeSharedGpuContextGLES2(test_context_provider_.get()); PrintContextTest::SetUp(); + accelerated_compositing_scope_ = std::make_unique< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>>(); GetDocument().GetSettings()->SetAcceleratedCompositingEnabled(true); } @@ -1042,16 +1054,19 @@ void TearDown() override { // Call base class TeardDown first to ensure Canvas2DLayerBridge is // destroyed before the TestContextProvider. - PrintContextTest::TearDown(); - - SharedGpuContext::ResetForTesting(); + accelerated_compositing_scope_ = nullptr; test_context_provider_ = nullptr; + SharedGpuContext::ResetForTesting(); + PrintContextTest::TearDown(); accelerated_canvas_scope_ = nullptr; } private: scoped_refptr<viz::TestContextProvider> test_context_provider_; std::unique_ptr<ScopedAccelerated2dCanvasForTest> accelerated_canvas_scope_; + std::unique_ptr< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>> + accelerated_compositing_scope_; }; INSTANTIATE_PAINT_TEST_SUITE_P(PrintContextOOPRCanvasTest);
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_test.cc b/third_party/blink/renderer/core/page/scrolling/scrolling_test.cc index e9656f6..af13eae 100644 --- a/third_party/blink/renderer/core/page/scrolling/scrolling_test.cc +++ b/third_party/blink/renderer/core/page/scrolling/scrolling_test.cc
@@ -2994,9 +2994,8 @@ class ScrollingTestWithAcceleratedContext : public ScrollingTest { protected: void SetUp() override { - auto factory = [](FakeGLES2Interface* gl, bool* gpu_compositing_disabled) + auto factory = [](FakeGLES2Interface* gl) -> std::unique_ptr<WebGraphicsContext3DProvider> { - *gpu_compositing_disabled = false; gl->SetIsContextLost(false); return std::make_unique<FakeWebGraphicsContext3DProvider>(gl); };
diff --git a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc index 26574f56..712bd05 100644 --- a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc +++ b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc
@@ -140,10 +140,9 @@ return PaintInvalidationReason::kLayout; if (const auto* layout_replaced = DynamicTo<LayoutReplaced>(box_)) { - if (RuntimeEnabledFeatures::PaintNewReplacedInvalidationEnabled() && - layout_replaced->ReplacedContentRect() != - layout_replaced->ReplacedContentRectFrom( - box_.PreviousPhysicalContentBoxRect())) { + if (layout_replaced->ReplacedContentRect() != + layout_replaced->ReplacedContentRectFrom( + box_.PreviousPhysicalContentBoxRect())) { return PaintInvalidationReason::kLayout; } }
diff --git a/third_party/blink/renderer/core/paint/html_canvas_painter_test.cc b/third_party/blink/renderer/core/paint/html_canvas_painter_test.cc index 5fc9216..b1832345 100644 --- a/third_party/blink/renderer/core/paint/html_canvas_painter_test.cc +++ b/third_party/blink/renderer/core/paint/html_canvas_painter_test.cc
@@ -27,17 +27,30 @@ namespace blink { +namespace { + +class AcceleratedCompositingTestPlatform + : public blink::TestingPlatformSupport { + public: + bool IsGpuCompositingDisabled() const override { return false; } +}; + +} // namespace + class HTMLCanvasPainterTest : public PaintControllerPaintTestBase { protected: void SetUp() override { + accelerated_compositing_scope_ = std::make_unique< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>>(); test_context_provider_ = viz::TestContextProvider::Create(); InitializeSharedGpuContextGLES2(test_context_provider_.get()); PaintControllerPaintTestBase::SetUp(); } void TearDown() override { - SharedGpuContext::ResetForTesting(); PaintControllerPaintTestBase::TearDown(); + SharedGpuContext::ResetForTesting(); + accelerated_compositing_scope_ = nullptr; } FrameSettingOverrideFunction SettingOverrider() const override { @@ -53,6 +66,9 @@ private: scoped_refptr<viz::TestContextProvider> test_context_provider_; + std::unique_ptr< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>> + accelerated_compositing_scope_; }; TEST_F(HTMLCanvasPainterTest, Canvas2DLayerAppearsInLayerTree) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index e780a0b..fdb8596 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -4078,38 +4078,34 @@ return cached_can_set_focus_attribute_; } -// This does not use Element::IsFocusable(), as that can sometimes recalculate -// styles because of IsFocusableStyle() check, resetting the document lifecycle. +// TODO(accessibility) Look at reusing Element::IsFocusable() or +// AXObject::IsKeyboardFocusable(). As long as we guard against style recalc by +// returning early if IsHiddenViaStyle() is true, we can call +// Element::IsKeyboardFocusable(), which would otherwise recalculate style at an +// awkward time. bool AXObject::ComputeCanSetFocusAttribute() const { DCHECK(!IsDetached()); DCHECK(GetDocument()); + // Focusable: web area -- this is the only focusable non-element. Web areas + // inside portals are not focusable though (portal contents cannot get focus). + if (IsWebArea()) { + return true; + } + // Objects within a portal are not focusable. // Note that they are ignored but can be included in the tree. bool inside_portal = GetDocument()->GetPage() && GetDocument()->GetPage()->InsidePortal(); - if (inside_portal) - return false; - - // The portal itself is focusable. Portals are treated as buttons in platform - // APIs, hiding their subtree. - if (RoleValue() == ax::mojom::blink::Role::kPortal) - return true; - - // Display-locked nodes that have content-visibility: hidden are not exposed - // to accessibility in any way, so they are not focusable. Note that for - // content-visibility: auto cases, `ShouldIgnoreNodeDueToDisplayLock()` would - // return false, since we're not ignoring the element in that case. - if (GetNode() && - DisplayLockUtilities::ShouldIgnoreNodeDueToDisplayLock( - *GetNode(), DisplayLockActivationReason::kAccessibility)) { + if (inside_portal) { return false; } - // Focusable: web area -- this is the only focusable non-element. Web areas - // inside portals are not focusable though (portal contents cannot get focus). - if (IsWebArea()) + // The portal itself is focusable. Portals are treated as buttons in platform + // APIs, hiding their subtree. + if (RoleValue() == ax::mojom::blink::Role::kPortal) { return true; + } // NOT focusable: objects with no DOM node, e.g. extra layout blocks inserted // as filler, or objects where the node is not an element, such as a text @@ -4124,8 +4120,9 @@ // NOT focusable: child tree owners (it's the content area that will be marked // focusable in the a11y tree). - if (IsChildTreeOwner()) + if (IsChildTreeOwner()) { return false; + } // NOT focusable: disabled form controls. if (IsDisabledFormControl(elem)) @@ -4135,8 +4132,26 @@ // unless they are part of a <datalist>, in which case they can be displayed // by the browser process, but not the renderer. // TODO(crbug.com/1399852) Address gaps in datalist a11y. - if (auto* option = DynamicTo<HTMLOptionElement>(elem)) + if (auto* option = DynamicTo<HTMLOptionElement>(elem)) { return !option->OwnerDataListElement(); + } + + // Invisible nodes are never focusable. + // We already have these cached, so it's a very quick check. + // This also prevents implementations of Element::SupportsFocus() + // from trying to update style on descendants of content-visibility:hidden + // nodes, or display:none nodes, which are the only nodes that don't have + // updated style at this point. + if (cached_is_hidden_via_style_) { + return false; + } + + // At this point, all nodes should have updated style. If they don't, it can + // cause crashes such as the one at crbug.com/1485059 when + // Element::SupportsFocus() calls IsFocusableStyleAfterUpdate() and + // the element doesn't have updated style yet, causing layout to update, + // resulting in unwanted recursion into ProcessDeferredAccessibilityEvents(). + CHECK(!elem->NeedsStyleRecalc()); // NOT focusable: hidden elements. // TODO(aleventhal) Consider caching visibility when it's safe to compute. @@ -4166,14 +4181,24 @@ // frame owner elements have SupportsFocus() == false. return false; } - // content-visibility:hidden or content-visibility: auto nodes (when locked) - // cannot be marked as keyboard focusable, because then we'll need to do a - // style/layout update within the locked subtree to get scroller information. - // For all practical purposes, it's unlikely to matter if display-locked - // content is marked non-focusable, so let's just avoid the lifecycle update. - if (DisplayLockUtilities::IsDisplayLockedPreventingPaint(element)) { + + // Invisible/inert nodes are never focusable. + // We already have these cached, so it's a very quick check. + // This also prevents implementations of Element::IsKeyboardFocusable() + // from trying to update style on descendants of content-visibility:hidden + // nodes, or display:none nodes, which are the only nodes that don't have + // updated style at this point. + if (IsHiddenViaStyle() || IsInert()) { return false; } + + // At this point, all nodes should have updated style. If they don't, it can + // cause crashes such as the one at crbug.com/1485059 when + // Element::IsKeyboardFocusable() calls IsFocusableStyleAfterUpdate() and + // the element doesn't have updated style yet, causing layout to update, + // resulting in unwanted recursion into ProcessDeferredAccessibilityEvents(). + CHECK(!element->NeedsStyleRecalc()); + return element->IsKeyboardFocusable(); }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index 0ebf6ca..d99e668 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -45,6 +45,7 @@ #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/document_lifecycle.h" #include "third_party/blink/renderer/core/dom/dom_node_ids.h" +#include "third_party/blink/renderer/core/dom/node_computed_style.h" #include "third_party/blink/renderer/core/dom/slot_assignment_engine.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/markers/document_marker_controller.h" @@ -2645,6 +2646,49 @@ CheckTreeIsUpdated(); } +void AXObjectCacheImpl::CheckStyleIsComplete(Document& document) const { +#if EXPENSIVE_DCHECKS_ARE_ON() + { + // Check that all style is up-to-date when layout is clean, when a11y is on. + // This allows content-visibility: auto subtrees to have proper a11y + // semantics, e.g. for the hidden and focusable states. + Node* node = &document; + do { + CHECK(!node->NeedsStyleRecalc()) << "Need style on: " << node; + const ComputedStyle* style = node->GetComputedStyle(); + if (!style || style->ContentVisibility() == EContentVisibility::kHidden || + style->IsEnsuredInDisplayNone()) { + // content-visibility:hidden nodes are an exception and do not + // compute style. + node = + LayoutTreeBuilderTraversal::NextSkippingChildren(*node, &document); + } else { + node = LayoutTreeBuilderTraversal::Next(*node, &document); + } + } while (node); + } + + { + // Check results of ChildNeedsStyleRecalc() as well, just to be sure there + // isn't a discrepancy there. + Node* node = &document; + do { + const ComputedStyle* style = node->GetComputedStyle(); + if (!style || style->ContentVisibility() == EContentVisibility::kHidden || + style->IsEnsuredInDisplayNone()) { + // content-visibility:hidden nodes are an exception and do not + // compute style. + node = + LayoutTreeBuilderTraversal::NextSkippingChildren(*node, &document); + continue; + } + CHECK(!node->ChildNeedsStyleRecalc()) << "Need style on child: " << node; + node = LayoutTreeBuilderTraversal::Next(*node, &document); + } while (node); + } +#endif +} + void AXObjectCacheImpl::CheckTreeIsUpdated() const { // TODO(crbug.com/1480442) Add back as once we implement improved tree repair // in crrev.com/c/4873421. @@ -2704,6 +2748,7 @@ } DCHECK_EQ(document, GetDocument()); + CheckStyleIsComplete(document); CHECK(!processing_deferred_events_); @@ -2727,6 +2772,7 @@ if (GetPopupDocumentIfShowing()) { UpdateLifecycleIfNeeded(*GetPopupDocumentIfShowing()); + CheckStyleIsComplete(*GetPopupDocumentIfShowing()); } SCOPED_DISALLOW_LIFECYCLE_TRANSITION();
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h index 8e0ba2e..02e66b50 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -554,6 +554,7 @@ bool HasBeenDisposed() const { return has_been_disposed_; } // Assert that tree is completely up-to-date. void CheckTreeIsUpdated() const; + void CheckStyleIsComplete(Document& document) const; // Returns the `TextChangedOperation` associated with the `id` from the // `text_operation_in_node_ids_` map, if `id` is in the map.
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc index 6b7b90c..e403a78 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc
@@ -1388,6 +1388,9 @@ canvas->DisableAcceleration(); } } + + private: + ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform_; }; INSTANTIATE_PAINT_TEST_SUITE_P(CanvasRenderingContext2DTestAccelerated); @@ -1640,6 +1643,7 @@ private: base::test::ScopedFeatureList feature_list_; + ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform_; }; INSTANTIATE_PAINT_TEST_SUITE_P( @@ -1709,7 +1713,6 @@ private: base::test::ScopedFeatureList feature_list_; - ScopedTestingPlatformSupport<GpuMemoryBufferTestPlatform> platform_; }; INSTANTIATE_PAINT_TEST_SUITE_P(CanvasRenderingContext2DTestImageChromium);
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_test.cc b/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_test.cc index 66e49de..a99345c1 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_test.cc +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_test.cc
@@ -40,6 +40,13 @@ bool alpha; bool desynchronized; }; + +class AcceleratedCompositingTestPlatform + : public blink::TestingPlatformSupport { + public: + bool IsGpuCompositingDisabled() const override { return false; } +}; + } // unnamed namespace class OffscreenCanvasTest : public ::testing::Test, @@ -58,7 +65,7 @@ } LocalDOMWindow* GetWindow() const { - return web_view_helper_.GetWebView() + return web_view_helper_->GetWebView() ->MainFrameImpl() ->GetFrame() ->DomWindow(); @@ -67,25 +74,30 @@ Document& GetDocument() const { return *GetWindow()->document(); } private: - frame_test_helpers::WebViewHelper web_view_helper_; + std::unique_ptr<frame_test_helpers::WebViewHelper> web_view_helper_; Persistent<OffscreenCanvas> offscreen_canvas_; Persistent<OffscreenCanvasRenderingContext2D> context_; FakeGLES2Interface gl_; + std::unique_ptr< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>> + accelerated_compositing_scope_; }; OffscreenCanvasTest::OffscreenCanvasTest() = default; void OffscreenCanvasTest::SetUp() { - auto factory = [](FakeGLES2Interface* gl, bool* gpu_compositing_disabled) + auto factory = [](FakeGLES2Interface* gl) -> std::unique_ptr<WebGraphicsContext3DProvider> { - *gpu_compositing_disabled = false; gl->SetIsContextLost(false); return std::make_unique<FakeWebGraphicsContext3DProvider>(gl); }; SharedGpuContext::SetContextProviderFactoryForTesting( WTF::BindRepeating(factory, WTF::Unretained(&gl_))); - web_view_helper_.Initialize(); + web_view_helper_ = std::make_unique<frame_test_helpers::WebViewHelper>(); + web_view_helper_->Initialize(); + accelerated_compositing_scope_ = std::make_unique< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>>(); GetDocument().documentElement()->setInnerHTML( String::FromUTF8("<body><canvas id='c'></canvas></body>")); @@ -113,6 +125,9 @@ void OffscreenCanvasTest::TearDown() { SharedGpuContext::ResetForTesting(); + // destruction order matters due to nested TestPlatformSupport instance. + accelerated_compositing_scope_ = nullptr; + web_view_helper_ = nullptr; } TEST_F(OffscreenCanvasTest, AnimationNotInitiallySuspended) {
diff --git a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc index 1ceaf738..4490ca1b 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc
@@ -107,7 +107,13 @@ bool disallow_cache_use_ = false; }; -} // anonymous namespace +class AcceleratedCompositingTestPlatform + : public blink::TestingPlatformSupport { + public: + bool IsGpuCompositingDisabled() const override { return false; } +}; + +} // namespace class Canvas2DLayerBridgeTest : public Test { public: @@ -132,6 +138,8 @@ } void SetUp() override { + accelerated_compositing_scope_ = std::make_unique< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>>(); test_context_provider_ = viz::TestContextProvider::Create(); InitializeSharedGpuContextGLES2(test_context_provider_.get(), &image_decode_cache_); @@ -142,6 +150,7 @@ void TearDown() override { SharedGpuContext::ResetForTesting(); test_context_provider_.reset(); + accelerated_compositing_scope_ = nullptr; } FakeCanvasResourceHost* Host() { @@ -164,6 +173,9 @@ scoped_refptr<viz::TestContextProvider> test_context_provider_; ImageTrackingDecodeCache image_decode_cache_; std::unique_ptr<FakeCanvasResourceHost> host_; + std::unique_ptr< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>> + accelerated_compositing_scope_; }; TEST_F(Canvas2DLayerBridgeTest, DisableAcceleration) {
diff --git a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.cc b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.cc index 5720e9e..f7f0557 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.cc
@@ -31,13 +31,25 @@ // static bool SharedGpuContext::IsGpuCompositingEnabled() { SharedGpuContext* this_ptr = GetInstanceForCurrentThread(); - // The check for gpu compositing enabled implies a context will - // desired, so we combine them into a single trip to the main thread. - // This also ensures that the compositing mode does not change before - // the context is created, so if it does change the context will be lost - // and this class will know to check the compositing mode again. - bool only_if_gpu_compositing = true; - this_ptr->CreateContextProviderIfNeeded(only_if_gpu_compositing); + if (IsMainThread()) { + // On the main thread we have the opportunity to keep + // is_gpu_compositing_disabled_ up to date continuously without locking + // up the thread, so we do it. This allows user code to adapt immediately + // when there is a fallback to software compositing. + this_ptr->is_gpu_compositing_disabled_ = + Platform::Current()->IsGpuCompositingDisabled(); + } else { + // The check for gpu compositing enabled implies a context will be + // desired, so we combine them into a single trip to the main thread. + // + // TODO(crbug.com/1486981): It is possible for the value of + // this_ptr->is_gpu_compositing_disabled_ to become stale without notice + // if the compositor falls back to software compositing after this + // initialization. There are currently no known observable bugs caused by + // this, but in theory, we'd need a mechanism for propagating changes in + // GPU compositing availability to worker threads. + this_ptr->CreateContextProviderIfNeeded(/*only_if_gpu_compositing=*/true); + } return !this_ptr->is_gpu_compositing_disabled_; } @@ -125,8 +137,7 @@ if (context_provider_factory_) { // This path should only be used in unit tests. - auto context_provider = - context_provider_factory_.Run(&is_gpu_compositing_disabled_); + auto context_provider = context_provider_factory_.Run(); if (context_provider) { context_provider_wrapper_ = std::make_unique<WebGraphicsContext3DProviderWrapper>(
diff --git a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.h b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.h index 297a41c2..53daa7e 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.h +++ b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.h
@@ -45,8 +45,7 @@ static bool IsValidWithoutRestoring(); using ContextProviderFactory = - base::RepeatingCallback<std::unique_ptr<WebGraphicsContext3DProvider>( - bool* is_gpu_compositing_disabled)>; + base::RepeatingCallback<std::unique_ptr<WebGraphicsContext3DProvider>()>; static void SetContextProviderFactoryForTesting(ContextProviderFactory); // Resets the global instance including the |context_provider_factory_| and // dropping the context. Should be called at the end of a test that uses this
diff --git a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc index 5f7d855..1c792689 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc
@@ -20,6 +20,7 @@ #include "third_party/blink/renderer/platform/graphics/test/fake_gles2_interface.h" #include "third_party/blink/renderer/platform/graphics/test/fake_web_graphics_context_3d_provider.h" #include "third_party/blink/renderer/platform/graphics/test/gpu_test_utils.h" +#include "third_party/blink/renderer/platform/testing/testing_platform_support.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/khronos/GLES2/gl2ext.h" @@ -31,17 +32,24 @@ namespace { +class AcceleratedCompositingTestPlatform + : public blink::TestingPlatformSupport { + public: + bool IsGpuCompositingDisabled() const override { return false; } +}; + template <class GLES2InterfaceType> class SharedGpuContextTestBase : public Test { public: void SetUp() override { + accelerated_compositing_scope_ = std::make_unique< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>>(); task_runner_ = base::MakeRefCounted<base::NullTaskRunner>(); handle_ = std::make_unique<base::SingleThreadTaskRunner::CurrentDefaultHandle>( task_runner_); - auto factory = [](GLES2InterfaceType* gl, bool* gpu_compositing_disabled) + auto factory = [](GLES2InterfaceType* gl) -> std::unique_ptr<WebGraphicsContext3DProvider> { - *gpu_compositing_disabled = false; gl->SetIsContextLost(false); auto fake_context = std::make_unique<FakeWebGraphicsContext3DProvider>(gl); @@ -58,11 +66,18 @@ handle_.reset(); task_runner_.reset(); SharedGpuContext::ResetForTesting(); + accelerated_compositing_scope_ = nullptr; } + GLES2InterfaceType& GlInterface() { return gl_; } + + private: scoped_refptr<base::NullTaskRunner> task_runner_; std::unique_ptr<base::SingleThreadTaskRunner::CurrentDefaultHandle> handle_; GLES2InterfaceType gl_; + std::unique_ptr< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>> + accelerated_compositing_scope_; }; class TestGLES2Interface : public FakeGLES2Interface { @@ -88,13 +103,13 @@ class BadSharedGpuContextTest : public Test { public: void SetUp() override { + accelerated_compositing_scope_ = std::make_unique< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>>(); task_runner_ = base::MakeRefCounted<base::NullTaskRunner>(); handle_ = std::make_unique<base::SingleThreadTaskRunner::CurrentDefaultHandle>( task_runner_); - auto factory = [](bool* gpu_compositing_disabled) - -> std::unique_ptr<WebGraphicsContext3DProvider> { - *gpu_compositing_disabled = false; + auto factory = []() -> std::unique_ptr<WebGraphicsContext3DProvider> { return nullptr; }; SharedGpuContext::SetContextProviderFactoryForTesting( @@ -105,19 +120,23 @@ handle_.reset(); task_runner_.reset(); SharedGpuContext::ResetForTesting(); + accelerated_compositing_scope_ = nullptr; } + private: scoped_refptr<base::NullTaskRunner> task_runner_; std::unique_ptr<base::SingleThreadTaskRunner::CurrentDefaultHandle> handle_; + std::unique_ptr< + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform>> + accelerated_compositing_scope_; }; // Test fixure that simulate not using gpu compositing. class SoftwareCompositingTest : public Test { public: void SetUp() override { - auto factory = [](FakeGLES2Interface* gl, bool* gpu_compositing_disabled) + auto factory = [](FakeGLES2Interface* gl) -> std::unique_ptr<WebGraphicsContext3DProvider> { - *gpu_compositing_disabled = true; // Return a context anyway, to ensure that's not what the class checks // to determine compositing mode. gl->SetIsContextLost(false); @@ -159,7 +178,7 @@ EXPECT_NE(SharedGpuContext::ContextProviderWrapper(), nullptr); base::WeakPtr<WebGraphicsContext3DProviderWrapper> context = SharedGpuContext::ContextProviderWrapper(); - gl_.SetIsContextLost(true); + GlInterface().SetIsContextLost(true); EXPECT_FALSE(SharedGpuContext::IsValidWithoutRestoring()); EXPECT_TRUE(!!context); @@ -171,7 +190,7 @@ TEST_F(SharedGpuContextTest, Canvas2DLayerBridgeAutoRecovery) { // Verifies that after a context loss, attempting to allocate a // Canvas2DLayerBridge will restore the context and succeed. - gl_.SetIsContextLost(true); + GlInterface().SetIsContextLost(true); EXPECT_FALSE(SharedGpuContext::IsValidWithoutRestoring()); gfx::Size size(10, 10); std::unique_ptr<FakeCanvasResourceHost> host =
diff --git a/third_party/blink/renderer/platform/graphics/test/gpu_memory_buffer_test_platform.h b/third_party/blink/renderer/platform/graphics/test/gpu_memory_buffer_test_platform.h index 1111e3c..797acdd 100644 --- a/third_party/blink/renderer/platform/graphics/test/gpu_memory_buffer_test_platform.h +++ b/third_party/blink/renderer/platform/graphics/test/gpu_memory_buffer_test_platform.h
@@ -20,6 +20,8 @@ SharedGpuContext::SetGpuMemoryBufferManagerForTesting(nullptr); } + bool IsGpuCompositingDisabled() const override { return false; } + private: gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override { return &test_gpu_memory_buffer_manager_;
diff --git a/third_party/blink/renderer/platform/graphics/test/gpu_test_utils.cc b/third_party/blink/renderer/platform/graphics/test/gpu_test_utils.cc index 09f2cbd..ba12e938 100644 --- a/third_party/blink/renderer/platform/graphics/test/gpu_test_utils.cc +++ b/third_party/blink/renderer/platform/graphics/test/gpu_test_utils.cc
@@ -20,11 +20,8 @@ auto factory = [](viz::TestGLES2Interface* gl, GrDirectContext* context, cc::ImageDecodeCache* cache, viz::RasterContextProvider* raster_context_provider, - SetIsContextLost set_context_lost, - bool* gpu_compositing_disabled) + SetIsContextLost set_context_lost) -> std::unique_ptr<WebGraphicsContext3DProvider> { - *gpu_compositing_disabled = false; - if (set_context_lost == SetIsContextLost::kSetToFalse) gl->set_context_lost(false); else if (set_context_lost == SetIsContextLost::kSetToTrue) @@ -51,12 +48,11 @@ viz::TestContextProvider* test_context_provider, cc::ImageDecodeCache* cache, SetIsContextLost set_context_lost) { - auto factory = - [](viz::TestRasterInterface* raster, cc::ImageDecodeCache* cache, - viz::RasterContextProvider* raster_context_provider, - SetIsContextLost set_context_lost, bool* gpu_compositing_disabled) + auto factory = [](viz::TestRasterInterface* raster, + cc::ImageDecodeCache* cache, + viz::RasterContextProvider* raster_context_provider, + SetIsContextLost set_context_lost) -> std::unique_ptr<WebGraphicsContext3DProvider> { - *gpu_compositing_disabled = false; if (set_context_lost == SetIsContextLost::kSetToFalse) { raster->set_context_lost(false);
diff --git a/third_party/blink/renderer/platform/graphics/video_frame_image_util_test.cc b/third_party/blink/renderer/platform/graphics/video_frame_image_util_test.cc index 525f9dc..65198c3 100644 --- a/third_party/blink/renderer/platform/graphics/video_frame_image_util_test.cc +++ b/third_party/blink/renderer/platform/graphics/video_frame_image_util_test.cc
@@ -17,6 +17,7 @@ #include "third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.h" #include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h" #include "third_party/blink/renderer/platform/graphics/test/gpu_test_utils.h" +#include "third_party/blink/renderer/platform/testing/testing_platform_support.h" #include "third_party/blink/renderer/platform/testing/video_frame_utils.h" #include "third_party/skia/include/gpu/GrDriverBugWorkarounds.h" @@ -27,6 +28,12 @@ constexpr auto kTestSize = gfx::Size(64, 64); const auto kTestInfo = SkImageInfo::MakeN32Premul(64, 64); +class AcceleratedCompositingTestPlatform + : public blink::TestingPlatformSupport { + public: + bool IsGpuCompositingDisabled() const override { return false; } +}; + class ScopedFakeGpuContext { public: explicit ScopedFakeGpuContext(bool disable_imagebitmap) { @@ -59,6 +66,8 @@ private: base::test::SingleThreadTaskEnvironment task_environment_; scoped_refptr<viz::TestContextProvider> test_context_provider_; + ScopedTestingPlatformSupport<AcceleratedCompositingTestPlatform> + accelerated_compositing_scope_; }; // TODO(crbug.com/1186864): Remove |expect_broken_tagging| when fixed.
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index c482c45a..2482eb22 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1487,12 +1487,6 @@ status: "experimental", }, { - // Kill-switch for fixes to a bug that detached input elements are retained. - // See crbug.com/1413100 - name: "DontLeakDetachedInput", - status: "stable", - }, - { name: "EarlyHintsPreloadForNavigationOptIn", origin_trial_feature_name: "EarlyHintsPreloadForNavigation", status: "stable", @@ -2517,12 +2511,6 @@ status: "stable", }, { - // Kill switch for crbug.com/1427047 fix. - // TODO(xiaochengh): Remove in M117. - name: "NonReentrantFieldSetDisable", - status: "stable", - }, - { // TODO(crbug.com/924486): This feature enables the deprecated values // inner-spin-button, push-button, searchfield-cancel-button, // slider-horizontal, square-button. Disable this feature to stop @@ -2795,10 +2783,6 @@ status: "stable", }, { - name: "PaintNewReplacedInvalidation", - status: "stable", - }, - { name: "PaintUnderInvalidationChecking", base_feature: "none", settable_from_internals: true,
diff --git a/third_party/blink/renderer/platform/weborigin/kurl.cc b/third_party/blink/renderer/platform/weborigin/kurl.cc index a7c840a..8da7f11 100644 --- a/third_party/blink/renderer/platform/weborigin/kurl.cc +++ b/third_party/blink/renderer/platform/weborigin/kurl.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/platform/weborigin/kurl.h" #include <algorithm> +#include <string_view> #include "base/feature_list.h" #include "base/memory/raw_ptr.h" @@ -112,7 +113,7 @@ std::string encoded = encoding_->Encode(String(input, static_cast<unsigned>(input_length)), WTF::kURLEncodedEntitiesForUnencodables); - output->Append(encoded.c_str(), encoded.length()); + output->Append(encoded); } private: @@ -792,8 +793,7 @@ String DecodeURLEscapeSequences(const String& string, DecodeURLMode mode) { StringUTF8Adaptor string_utf8(string); url::RawCanonOutputT<char16_t> unescaped; - url::DecodeURLEscapeSequences(string_utf8.data(), string_utf8.size(), mode, - &unescaped); + url::DecodeURLEscapeSequences(string_utf8.AsStringPiece(), mode, &unescaped); return StringImpl::Create8BitIfPossible( reinterpret_cast<UChar*>(unescaped.data()), base::checked_cast<wtf_size_t>(unescaped.length())); @@ -808,8 +808,7 @@ if (buffer.capacity() < input_length * 3) buffer.Resize(input_length * 3); - url::EncodeURIComponent(utf8.c_str(), static_cast<wtf_size_t>(input_length), - &buffer); + url::EncodeURIComponent(utf8, &buffer); String escaped(buffer.data(), static_cast<unsigned>(buffer.length())); // Unescape '/'; it's safe and much prettier. escaped.Replace("%2F", "/");
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests index bd00ade..fe3766e 100644 --- a/third_party/blink/web_tests/SlowTests +++ b/third_party/blink/web_tests/SlowTests
@@ -1518,6 +1518,7 @@ crbug.com/1459575 webexposed/global-interface-listing-dedicated-worker.html [ Slow ] crbug.com/1456739 [ Linux Release ] virtual/private-aggregation-developer-mode/wpt_internal/private-aggregation/protected-audience-sends-report.https.html [ Slow ] +crbug.com/1456739 [ Linux Release ] virtual/private-aggregation-developer-mode/wpt_internal/private-aggregation/shared-storage-context-id-sends-report.https.html [ Slow ] # Slow because of multiple subtests and many cycles spent doing garbage collection. crbug.com/1473373 wpt_internal/dom/abort/abort-signal-memory-tests.https.any.html [ Slow ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/paint/row-background-paint-remove-last-cell-ref.html b/third_party/blink/web_tests/external/wpt/css/css-tables/paint/row-background-paint-remove-last-cell-ref.html new file mode 100644 index 0000000..57beaed --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/paint/row-background-paint-remove-last-cell-ref.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html lang="en"> +<style> +tr { background-color: rgb(255, 0, 0); } +td:not(#remove) { background-color: green; } +</style> +<title>CSS Test Reference</title> +<p>Test passes if you see three green cells and no red below.</p> +<table> + <tr> + <td>A1</td> + <td>A2</td> + </tr> + <tr> + <td>B1</td> + </tr> +</table> +</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/paint/row-background-paint-remove-last-cell.html b/third_party/blink/web_tests/external/wpt/css/css-tables/paint/row-background-paint-remove-last-cell.html new file mode 100644 index 0000000..e61b5d4f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/paint/row-background-paint-remove-last-cell.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<script src="/common/rendering-utils.js"></script> +<link rel="author" title="Chenguang Shao" href="chenguangshao1@gmail.com"> +<link rel="help" href="https://drafts.csswg.org/css-tables-3/#drawing-cell-backgrounds"> +<link rel="match" href="row-background-paint-remove-last-cell-ref.html"> +<style> +tr { background-color: rgb(255, 0, 0); } +td:not(#remove) { background-color: green; } +</style> +<title>CSS Table Module Test: table-row repaint after removing last cell</title> +<script> +waitForAtLeastOneFrame().then(() => { + const remove = document.getElementById('remove'); + remove.remove(); + takeScreenshot(); +}); +</script> +<p>Test passes if you see three green cells and no red below.</p> +<table> + <tr> + <td>A1</td> + <td>A2</td> + </tr> + <tr> + <td>B1</td> + <td id="remove"> B2 </td> + </tr> +</table> +</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/private-aggregation/shared-storage-context-id-sends-report.https.html b/third_party/blink/web_tests/wpt_internal/private-aggregation/shared-storage-context-id-sends-report.https.html index ca9830c..f020e87e 100644 --- a/third_party/blink/web_tests/wpt_internal/private-aggregation/shared-storage-context-id-sends-report.https.html +++ b/third_party/blink/web_tests/wpt_internal/private-aggregation/shared-storage-context-id-sends-report.https.html
@@ -18,7 +18,8 @@ privateAggregationConfig: {contextId: "example-context-id"}}); const reports = await pollReports( - "/.well-known/private-aggregation/report-shared-storage") + "/.well-known/private-aggregation/report-shared-storage", + /*wait_for=*/1, /*timeout=*/6000) assert_equals(reports.length, 1); const report = JSON.parse(reports[0]); @@ -45,7 +46,8 @@ privateAggregationConfig: {contextId: "example-context-id"}}); const reports = await pollReports( - "/.well-known/private-aggregation/report-shared-storage") + "/.well-known/private-aggregation/report-shared-storage", + /*wait_for=*/1, /*timeout=*/6000) assert_equals(reports.length, 1); const report = JSON.parse(reports[0]); @@ -71,7 +73,8 @@ privateAggregationConfig: {contextId: "example-context-id"}}); const reports = await pollReports( - "/.well-known/private-aggregation/report-shared-storage") + "/.well-known/private-aggregation/report-shared-storage", + /*wait_for=*/1, /*timeout=*/6000) assert_equals(reports.length, 1); const report = JSON.parse(reports[0]);
diff --git a/third_party/catapult b/third_party/catapult index 4f81c1e..b018f90 160000 --- a/third_party/catapult +++ b/third_party/catapult
@@ -1 +1 @@ -Subproject commit 4f81c1e295978227d83f1b42ceff40b4f9b5b08c +Subproject commit b018f901e807db6fcb44dfc45deb658b9810aa46
diff --git a/third_party/chromium-variations b/third_party/chromium-variations index 990efdd..a6b4cf71 160000 --- a/third_party/chromium-variations +++ b/third_party/chromium-variations
@@ -1 +1 @@ -Subproject commit 990efdd6cf54f2124621d065e2de629856c395e4 +Subproject commit a6b4cf7146484726d6b671f171ee35f93dbdd12a
diff --git a/third_party/dawn b/third_party/dawn index e1f1c01..e82fe98 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit e1f1c0135a5eca328a320d4f14d21b24576eea9b +Subproject commit e82fe98bd900efceca25ee39099315c2ad8468e0
diff --git a/third_party/depot_tools b/third_party/depot_tools index 90a30a5..f90b3b0 160000 --- a/third_party/depot_tools +++ b/third_party/depot_tools
@@ -1 +1 @@ -Subproject commit 90a30a5b5357636fa05bb315c393275be7ca705c +Subproject commit f90b3b035c31a13a08922ff0270dfc55fe5a176c
diff --git a/third_party/devtools-frontend-internal b/third_party/devtools-frontend-internal index 5c18380..0af74cb 160000 --- a/third_party/devtools-frontend-internal +++ b/third_party/devtools-frontend-internal
@@ -1 +1 @@ -Subproject commit 5c18380d0cee521d0eb41984f178253763d2f7c1 +Subproject commit 0af74cb7da0e98564b4b022f8e78b9a5e24e004e
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index 46268f4..fc2efdf 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit 46268f4b777d9e3812ae478fd3254f82fea73f3a +Subproject commit fc2efdf6318dc3caa2d8e5ed0b1eb6b087467417
diff --git a/third_party/libc++/src b/third_party/libc++/src index 7cf9862..a094e25 160000 --- a/third_party/libc++/src +++ b/third_party/libc++/src
@@ -1 +1 @@ -Subproject commit 7cf98622abaf832e2d4784889ebc69d5b6fde4d8 +Subproject commit a094e2535c54dd295d22c56bd088691459708b46
diff --git a/third_party/libunwind/src b/third_party/libunwind/src index 43e5a34..7608093 160000 --- a/third_party/libunwind/src +++ b/third_party/libunwind/src
@@ -1 +1 @@ -Subproject commit 43e5a34c5b7066a7ee15c74f09dc37b4b9b5630e +Subproject commit 7608093d21b209a23ccac7c0d5af5cc47e148887
diff --git a/third_party/nearby/README.chromium b/third_party/nearby/README.chromium index fbd58551..25826ef 100644 --- a/third_party/nearby/README.chromium +++ b/third_party/nearby/README.chromium
@@ -1,7 +1,7 @@ Name: Nearby Connections Library Short Name: Nearby URL: https://github.com/google/nearby -Version: d477a2d174fc0e31f6dd06264ff3f47ff8da5378 +Version: 3fdcbe4ddc69ce73907305b1ae18f76e438b4180 License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/third_party/nearby/src b/third_party/nearby/src index d477a2d..3fdcbe4 160000 --- a/third_party/nearby/src +++ b/third_party/nearby/src
@@ -1 +1 @@ -Subproject commit d477a2d174fc0e31f6dd06264ff3f47ff8da5378 +Subproject commit 3fdcbe4ddc69ce73907305b1ae18f76e438b4180
diff --git a/third_party/openscreen/src b/third_party/openscreen/src index 934f246..16eeee9 160000 --- a/third_party/openscreen/src +++ b/third_party/openscreen/src
@@ -1 +1 @@ -Subproject commit 934f2462ad01c407a596641dbc611df49e2017b4 +Subproject commit 16eeee9b9ee295e6119f24bf2282712d6055eb66
diff --git a/third_party/perfetto b/third_party/perfetto index a3d4c1d..d44dbe4 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit a3d4c1de9bcf2a0471ab183c45cf111efd29571e +Subproject commit d44dbe4ad2af5f2148e8a879bca8aa6dd6b10dfa
diff --git a/third_party/skia b/third_party/skia index fcd1b75..064f144 160000 --- a/third_party/skia +++ b/third_party/skia
@@ -1 +1 @@ -Subproject commit fcd1b7521805ab1cde2947be6118f329e4ace14d +Subproject commit 064f144adedd8ad8ac9c613c54e6354268041912
diff --git a/third_party/webgpu-cts/src b/third_party/webgpu-cts/src index 609645e..d253683 160000 --- a/third_party/webgpu-cts/src +++ b/third_party/webgpu-cts/src
@@ -1 +1 @@ -Subproject commit 609645eb5b272668cbfb120d1aa9549eee86e02d +Subproject commit d253683c9379d5a02b0cbcb04f6c0e9b26f15b0c
diff --git a/third_party/webgpu-cts/ts_sources.txt b/third_party/webgpu-cts/ts_sources.txt index 4d17274..3912d72 100644 --- a/third_party/webgpu-cts/ts_sources.txt +++ b/third_party/webgpu-cts/ts_sources.txt
@@ -525,6 +525,7 @@ src/webgpu/shader/execution/flow_control/return.spec.ts src/webgpu/shader/execution/flow_control/switch.spec.ts src/webgpu/shader/execution/flow_control/while.spec.ts +src/webgpu/shader/execution/memory_model/adjacent.spec.ts src/webgpu/shader/execution/memory_model/memory_model_setup.ts src/webgpu/shader/execution/memory_model/atomicity.spec.ts src/webgpu/shader/execution/memory_model/barrier.spec.ts
diff --git a/third_party/wuffs/LICENSE b/third_party/wuffs/LICENSE deleted file mode 100644 index f433b1a5..0000000 --- a/third_party/wuffs/LICENSE +++ /dev/null
@@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS
diff --git a/tools/android/avd/proto/creation/android_30_google_atd_x64.textpb b/tools/android/avd/proto/creation/android_30_google_atd_x64.textpb new file mode 100644 index 0000000..f7065c6 --- /dev/null +++ b/tools/android/avd/proto/creation/android_30_google_atd_x64.textpb
@@ -0,0 +1,36 @@ +# 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. + +# Configuration for an Android-11 (R, API 30) AVD on google_atd on x86_64 + +emulator_package { + package_name: "chromium/third_party/android_sdk/public/emulator" + version: "N2X90_ADQtGKgoxkXZH3-TM5dbrynU-zGC4mj0B5KMIC" # 32.1.15 + dest_path: "android_30_google_atd_x64" +} + +system_image_package { + package_name: "chromium/third_party/android_sdk/public/system-images/android-30/google_atd/x86_64" + version: "u_SH3n7SZWYQy6D3E7e28PouioZlBTsA5aXv1CqYnkIC" # r2 + dest_path: "android_30_google_atd_x64" +} +system_image_name: "system-images;android-30;google_atd;x86_64" + +avd_package { + package_name: "chromium/third_party/android_sdk/public/avds/android-30/google_atd/x86_64" + dest_path: "android_30_google_atd_x64" +} +avd_name: "android_30_google_atd_x64" + +avd_settings { + screen { + density: 480 + height: 1920 + width: 1080 + } + advanced_features { + key: "GLESDynamicVersion" + value: "on" + } +}
diff --git a/tools/android/avd/proto/creation/android_30_google_atd_x86.textpb b/tools/android/avd/proto/creation/android_30_google_atd_x86.textpb new file mode 100644 index 0000000..66231ed --- /dev/null +++ b/tools/android/avd/proto/creation/android_30_google_atd_x86.textpb
@@ -0,0 +1,36 @@ +# 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. + +# Configuration for an Android-11 (R, API 30) AVD on google_atd on x86 + +emulator_package { + package_name: "chromium/third_party/android_sdk/public/emulator" + version: "N2X90_ADQtGKgoxkXZH3-TM5dbrynU-zGC4mj0B5KMIC" # 32.1.15 + dest_path: "android_30_google_atd_x86" +} + +system_image_package { + package_name: "chromium/third_party/android_sdk/public/system-images/android-30/google_atd/x86" + version: "zcdODu15a3sjTg5huKuTAWO-6EJUokjTM59k_xHR-ZsC" # r1 + dest_path: "android_30_google_atd_x86" +} +system_image_name: "system-images;android-30;google_atd;x86" + +avd_package { + package_name: "chromium/third_party/android_sdk/public/avds/android-30/google_atd/x86" + dest_path: "android_30_google_atd_x86" +} +avd_name: "android_30_google_atd_x86" + +avd_settings { + screen { + density: 480 + height: 1920 + width: 1080 + } + advanced_features { + key: "GLESDynamicVersion" + value: "on" + } +}
diff --git a/tools/android/avd/proto/creation/android_31_google_atd_x64.textpb b/tools/android/avd/proto/creation/android_31_google_atd_x64.textpb new file mode 100644 index 0000000..a984ce5 --- /dev/null +++ b/tools/android/avd/proto/creation/android_31_google_atd_x64.textpb
@@ -0,0 +1,36 @@ +# 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. + +# Configuration for an Android-12 (S, API 31) AVD on google_atd on x86_64 + +emulator_package { + package_name: "chromium/third_party/android_sdk/public/emulator" + version: "N2X90_ADQtGKgoxkXZH3-TM5dbrynU-zGC4mj0B5KMIC" # 32.1.15 + dest_path: "android_31_google_atd_x64" +} + +system_image_package { + package_name: "chromium/third_party/android_sdk/public/system-images/android-31/google_atd/x86_64" + version: "4yT_R1tLQ3TP4_DMci8-FhYcNSFP3eaVSeSus3vWDmoC" # r2 + dest_path: "android_31_google_atd_x64" +} +system_image_name: "system-images;android-31;google_atd;x86_64" + +avd_package { + package_name: "chromium/third_party/android_sdk/public/avds/android-31/google_atd/x86_64" + dest_path: "android_31_google_atd_x64" +} +avd_name: "android_31_google_atd_x64" + +avd_settings { + screen { + density: 480 + height: 1920 + width: 1080 + } + advanced_features { + key: "GLESDynamicVersion" + value: "on" + } +}
diff --git a/tools/android/avd/proto/creation/android_32_google_atd_x64.textpb b/tools/android/avd/proto/creation/android_32_google_atd_x64.textpb new file mode 100644 index 0000000..3421398 --- /dev/null +++ b/tools/android/avd/proto/creation/android_32_google_atd_x64.textpb
@@ -0,0 +1,36 @@ +# 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. + +# Configuration for an Android-12L (S_V2, API 32) AVD on google_atd on x86_64 + +emulator_package { + package_name: "chromium/third_party/android_sdk/public/emulator" + version: "N2X90_ADQtGKgoxkXZH3-TM5dbrynU-zGC4mj0B5KMIC" # 32.1.15 + dest_path: "android_32_google_atd_x64" +} + +system_image_package { + package_name: "chromium/third_party/android_sdk/public/system-images/android-32/google_atd/x86_64" + version: "FCZ_rmn_f1plPb_m80Elty4yaCaKZWTCpY0UGDBiWLsC" # r1 + dest_path: "android_32_google_atd_x64" +} +system_image_name: "system-images;android-32;google_atd;x86_64" + +avd_package { + package_name: "chromium/third_party/android_sdk/public/avds/android-32/google_atd/x86_64" + dest_path: "android_32_google_atd_x64" +} +avd_name: "android_32_google_atd_x64" + +avd_settings { + screen { + density: 480 + height: 1920 + width: 1080 + } + advanced_features { + key: "GLESDynamicVersion" + value: "on" + } +}
diff --git a/tools/android/avd/proto/creation/android_33_google_atd_x64.textpb b/tools/android/avd/proto/creation/android_33_google_atd_x64.textpb new file mode 100644 index 0000000..965a71e --- /dev/null +++ b/tools/android/avd/proto/creation/android_33_google_atd_x64.textpb
@@ -0,0 +1,36 @@ +# 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. + +# Configuration for an Android-13 (T, API 33) AVD on google_atd on x86_64 + +emulator_package { + package_name: "chromium/third_party/android_sdk/public/emulator" + version: "N2X90_ADQtGKgoxkXZH3-TM5dbrynU-zGC4mj0B5KMIC" # 32.1.15 + dest_path: "android_33_google_atd_x64" +} + +system_image_package { + package_name: "chromium/third_party/android_sdk/public/system-images/android-33/google_atd/x86_64" + version: "RzAMzXHpmZLkIt9sdHJjlzYmcLPDyq4wwkSKo7miG24C" # r1 + dest_path: "android_33_google_atd_x64" +} +system_image_name: "system-images;android-33;google_atd;x86_64" + +avd_package { + package_name: "chromium/third_party/android_sdk/public/avds/android-33/google_atd/x86_64" + dest_path: "android_33_google_atd_x64" +} +avd_name: "android_33_google_atd_x64" + +avd_settings { + screen { + density: 480 + height: 1920 + width: 1080 + } + advanced_features { + key: "GLESDynamicVersion" + value: "on" + } +}
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 60d368e..9270585 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -124,7 +124,7 @@ 'android-arm64-proguard-rel': 'android_release_bot_minimal_symbols_arm64_webview_google_reclient', 'android-bfcache-rel': 'android_release_bot_minimal_symbols_x86_fastbuild_webview_monochrome_reclient', 'android-binary-size-generator': 'android_binary_size_reclient', - 'android-cronet-arm-dbg': 'android_cronet_debug_static_bot_arm_no_neon_reclient', + 'android-cronet-arm-dbg': 'android_cronet_debug_static_bot_arm_no_neon_reclient_use_dummy_lastchange', 'android-cronet-arm-rel': 'android_cronet_release_bot_minimal_symbols_arm_no_neon_reclient', 'android-cronet-arm64-dbg': 'android_cronet_debug_static_bot_arm64_reclient', 'android-cronet-arm64-rel': 'android_cronet_release_bot_minimal_symbols_arm64_reclient', @@ -625,6 +625,7 @@ 'chromium.infra.codesearch': { 'codesearch-gen-chromium-android': 'codesearch_gen_chromium_android_bot_reclient', 'codesearch-gen-chromium-chromiumos': 'codesearch_gen_chromium_chromiumos_bot_reclient', + 'codesearch-gen-chromium-cronet': 'codesearch_gen_chromium_cronet_bot_reclient', 'codesearch-gen-chromium-fuchsia': 'codesearch_gen_chromium_fuchsia_bot_reclient', 'codesearch-gen-chromium-ios': 'codesearch_gen_chromium_ios_bot_reclient', 'codesearch-gen-chromium-lacros': 'codesearch_gen_chromium_lacros_bot_reclient', @@ -1045,8 +1046,8 @@ }, 'tryserver.chromium.accessibility': { - 'fuchsia-x64-accessibility-rel': 'release_bot_fuchsia_reclient_with_blink_symbol', - 'linux-blink-web-tests-force-accessibility-rel': 'release_bot_blink_accessibility_reclient', + 'fuchsia-x64-accessibility-rel': 'release_bot_fuchsia_reclient_with_blink_symbol_use_dummy_lastchange', + 'linux-blink-web-tests-force-accessibility-rel': 'release_bot_blink_accessibility_reclient_use_dummy_lastchange', }, 'tryserver.chromium.android': { @@ -1085,9 +1086,9 @@ 'android-cronet-x64-dbg-12-tests': 'android_cronet_debug_static_bot_x64_reclient', 'android-cronet-x64-dbg-13-tests': 'android_cronet_debug_static_bot_x64_reclient', 'android-cronet-x86-dbg': 'android_cronet_debug_static_bot_x86_reclient', - 'android-cronet-x86-dbg-10-tests': 'android_cronet_debug_static_bot_x86_reclient', + 'android-cronet-x86-dbg-10-tests': 'android_cronet_debug_static_bot_x86_reclient_use_dummy_lastchange', 'android-cronet-x86-dbg-11-tests': 'android_cronet_debug_static_bot_x86_reclient', - 'android-cronet-x86-dbg-lollipop-tests': 'android_cronet_debug_static_bot_x86_reclient', + 'android-cronet-x86-dbg-lollipop-tests': 'android_cronet_debug_static_bot_x86_reclient_use_dummy_lastchange', 'android-cronet-x86-dbg-marshmallow-tests': 'android_cronet_debug_static_bot_x86_reclient', 'android-cronet-x86-dbg-nougat-tests': 'android_cronet_debug_static_bot_x86_reclient', 'android-cronet-x86-dbg-oreo-tests': 'android_cronet_debug_static_bot_x86_reclient', @@ -1156,7 +1157,7 @@ # TODO(crbug.com/913750): Enable DCHECKS on the two amd64-generic bots # and two kevin bots when the PFQ has it enabled. 'chromeos-amd64-generic-cfi-thin-lto-rel': 'chromeos_amd64-generic_cfi_thin_lto_reclient', - 'chromeos-amd64-generic-dbg': 'chromeos_amd64-generic_dbg_reclient', + 'chromeos-amd64-generic-dbg': 'chromeos_amd64-generic_dbg_reclient_use_dummy_lastchange', 'chromeos-amd64-generic-lacros-dbg': 'chromeos_amd64-generic_lacros_dbg_reclient', 'chromeos-amd64-generic-rel': 'chromeos_amd64-generic_use_fake_dbus_clients_vm_optimized_dchecks_reclient', 'chromeos-amd64-generic-siso-rel': 'chromeos_amd64-generic_use_fake_dbus_clients_vm_optimized_dchecks_reclient', @@ -1169,7 +1170,7 @@ 'gpu-fyi-try-chromeos-kevin': 'gpu_tests_chromeos_kevin_release_trybot_dcheck_off_no_symbols_reclient', 'gpu-fyi-try-chromeos-skylab-kevin': 'gpu_tests_chromeos_kevin_release_trybot_dcheck_off_no_symbols_reclient_skylab', 'lacros-amd64-generic-rel': 'chromeos_amd64-generic_lacros_rel_dchecks_reclient', - 'lacros-amd64-generic-rel-skylab': 'chromeos_amd64-generic_lacros_rel_dchecks_skylab_reclient', + 'lacros-amd64-generic-rel-skylab': 'chromeos_amd64-generic_lacros_rel_dchecks_skylab_reclient_use_dummy_lastchange', 'lacros-arm-generic-rel': 'chromeos_arm-generic_lacros_rel_dchecks_reclient', 'lacros-arm64-generic-rel': 'chromeos_arm64-generic_lacros_rel_dchecks_reclient', 'lacros-arm64-generic-rel-skylab-fyi': 'chromeos_arm64-generic_lacros_rel_skylab_reclient', @@ -1228,7 +1229,7 @@ 'fuchsia-arm64-rel-orchestrator': 'release_trybot_fuchsia_arm64_reclient', 'fuchsia-binary-size': 'release_fuchsia_arm64_binary_size_reclient', 'fuchsia-code-coverage': 'fuchsia_clang_code_coverage_reclient', - 'fuchsia-compile-x64-dbg': 'debug_bot_fuchsia_compile_only_reclient', + 'fuchsia-compile-x64-dbg': 'debug_bot_fuchsia_compile_only_reclient_use_dummy_lastchange', 'fuchsia-deterministic-dbg': 'debug_bot_fuchsia_reclient', 'fuchsia-fyi-arm64-dbg': 'debug_bot_fuchsia_arm64_reclient', 'fuchsia-fyi-x64-asan': 'asan_lsan_bot_fuchsia_reclient', @@ -1264,7 +1265,7 @@ 'tryserver.chromium.linux': { 'cast-binary-size': 'cast_binary_size', 'chromeos-js-code-coverage': 'chromeos_js_coverage_reclient', - 'chromeos-js-coverage-rel': 'chromeos_js_coverage_reclient', + 'chromeos-js-coverage-rel': 'chromeos_js_coverage_reclient_use_dummy_lastchange', 'chromium_presubmit': 'presubmit', 'gpu-fyi-try-lacros-amd-rel': 'gpu_tests_ozone_linux_non_x11_release_trybot_reclient', 'gpu-fyi-try-lacros-intel-rel': 'gpu_tests_ozone_linux_non_x11_release_trybot_reclient', @@ -1281,7 +1282,7 @@ 'leak_detection_linux': 'release_trybot_reclient', 'linux-afl-asan-rel': 'afl_asan_release_trybot_reclient', 'linux-annotator-rel': 'release_trybot_reclient', - 'linux-arm64-castos': 'cast_arm64_release_bot_reclient', + 'linux-arm64-castos': 'cast_arm64_release_bot_reclient_use_dummy_lastchange', 'linux-bfcache-rel': 'release_bot_blink', 'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_tsan', 'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification_reclient', @@ -1297,10 +1298,10 @@ 'linux-extended-tracing-rel': 'release_trybot_extended_tracing_reclient', 'linux-fieldtrial-rel': 'release_bot_minimal_symbols_reclient', 'linux-gcc-rel': 'release_bot_minimal_symbols_no_clang', - 'linux-headless-shell-rel': 'headless_shell_release_bot_reclient', + 'linux-headless-shell-rel': 'headless_shell_release_bot_reclient_use_dummy_lastchange', 'linux-inverse-fieldtrials-fyi-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_invert_fieldtrials_reclient', 'linux-js-code-coverage': 'js_coverage_reclient', - 'linux-js-coverage-rel': 'js_coverage_reclient', + 'linux-js-coverage-rel': 'js_coverage_reclient_use_dummy_lastchange', 'linux-lacros-asan-lsan-rel': 'asan_lsan_lacros_release_bot_dcheck_always_on_reclient', 'linux-lacros-code-coverage': 'lacros_on_linux_clang_code_coverage_reclient', 'linux-lacros-fyi-rel': 'lacros_on_linux_release_trybot_reclient', @@ -1330,17 +1331,17 @@ 'linux-wpt-input-fyi-rel': 'release_trybot_reclient', 'linux-x64-castos': 'cast_release_trybot_reclient', 'linux-x64-castos-audio': 'cast_audio_release_trybot_reclient', - 'linux-x64-castos-dbg': 'cast_debug_bot_reclient', + 'linux-x64-castos-dbg': 'cast_debug_bot_reclient_use_dummy_lastchange', 'linux_chromium_archive_rel_ng': 'release_bot_reclient', 'linux_chromium_asan_rel_ng': 'asan_lsan_release_trybot_reclient', 'linux_chromium_asan_siso_rel_ng': 'asan_lsan_release_trybot_reclient', - 'linux_chromium_cfi_rel_ng': 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_reclient', + 'linux_chromium_cfi_rel_ng': 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_reclient_use_dummy_last_change', 'linux_chromium_chromeos_asan_rel_ng': 'asan_lsan_chromeos_release_bot_dcheck_always_on_reclient', 'linux_chromium_chromeos_msan_rel_ng': 'chromeos_msan_release_bot_reclient', 'linux_chromium_clobber_deterministic': 'release_trybot_reclient', - 'linux_chromium_compile_dbg_ng': 'debug_bot_reclient', + 'linux_chromium_compile_dbg_ng': 'debug_bot_reclient_use_dummy_lastchange', 'linux_chromium_compile_rel_ng': 'release_trybot_reclient', - 'linux_chromium_dbg_ng': 'gpu_tests_debug_bot_reclient', + 'linux_chromium_dbg_ng': 'gpu_tests_debug_bot_reclient_use_dummy_lastchange', # This is intentionally a release_bot and not a release_trybot; # enabling DCHECKs seems to cause flaky failures that don't show up @@ -1382,11 +1383,11 @@ 'ios-simulator': 'ios_simulator_code_coverage_partial_instrumentation_xctest_reclient', 'ios-simulator-code-coverage': 'clang_code_coverage_ios_xctest_sim_reclient', 'ios-simulator-cr-recipe': 'ios_simulator_debug_static_bot_xctest', - 'ios-simulator-cronet': 'ios_cronet_xctest_reclient', + 'ios-simulator-cronet': 'ios_cronet_xctest_reclient_use_dummy_lastchange', 'ios-simulator-full-configs': 'ios_simulator_code_coverage_partial_instrumentation_xctest_reclient', 'ios-simulator-inverse-fieldtrials-fyi': 'ios_simulator_debug_static_bot_invert_fieldtrials_xctest_reclient', 'ios-simulator-multi-window': 'ios_simulator_debug_static_bot_xctest_reclient', - 'ios-simulator-noncq': 'ios_simulator_debug_static_bot_xctest_reclient', + 'ios-simulator-noncq': 'ios_simulator_debug_static_bot_xctest_reclient_use_dummy_lastchange', 'ios-simulator-siso': 'ios_simulator_code_coverage_partial_instrumentation_xctest_reclient', 'ios-wpt-fyi-rel': 'ios_simulator_release_static_bot_xctest_reclient', 'ios16-beta-simulator': 'ios_simulator_debug_static_bot_xctest_arm64_reclient', @@ -1422,7 +1423,7 @@ 'mac_chromium_10.15_rel_ng': 'release_trybot_no_nacl_reclient', 'mac_chromium_11.0_rel_ng': 'release_trybot_reclient', 'mac_chromium_asan_rel_ng': 'asan_dcheck_disable_nacl_release_bot_reclient', - 'mac_chromium_compile_dbg_ng': 'gpu_tests_debug_bot_reclient', + 'mac_chromium_compile_dbg_ng': 'gpu_tests_debug_bot_reclient_use_dummy_lastchange', 'mac_chromium_compile_rel_ng': 'gpu_tests_release_trybot_reclient', 'mac_chromium_dbg_ng': 'gpu_tests_debug_bot_reclient', 'mac_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot_reclient', @@ -1486,11 +1487,11 @@ }, 'tryserver.chromium.updater': { - 'linux-updater-try-builder-dbg': 'updater_debug_bot_reclient', + 'linux-updater-try-builder-dbg': 'updater_debug_bot_reclient_use_dummy_lastchange', 'linux-updater-try-builder-rel': 'updater_release_trybot_reclient', - 'mac-updater-try-builder-dbg': 'updater_debug_bot_reclient', + 'mac-updater-try-builder-dbg': 'updater_debug_bot_reclient_use_dummy_lastchange', 'mac-updater-try-builder-rel': 'updater_release_trybot_reclient', - 'win-updater-try-builder-dbg': 'updater_debug_bot_reclient', + 'win-updater-try-builder-dbg': 'updater_debug_bot_reclient_use_dummy_lastchange', 'win-updater-try-builder-rel': 'updater_release_trybot_reclient', }, @@ -1523,7 +1524,7 @@ 'win11-wpt-content-shell-fyi-rel': 'release_trybot_reclient', 'win11-x64-fyi-rel': 'gpu_tests_release_trybot_resource_allowlisting_code_coverage_reclient', 'win32-clobber-rel': 'release_trybot_x86_reclient', - 'win_chromium_compile_dbg_ng': 'gpu_tests_debug_bot_x86_no_symbols_reclient', + 'win_chromium_compile_dbg_ng': 'gpu_tests_debug_bot_x86_no_symbols_reclient_use_dummy_lastchange', 'win_chromium_compile_rel_ng': 'gpu_tests_release_trybot_x86_resource_allowlisting_reclient', 'win_chromium_x64_rel_ng': 'gpu_tests_release_trybot_reclient', 'win_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot_reclient', @@ -1580,11 +1581,11 @@ 'android_binary_size_reclient': [ 'android', 'chrome_with_codecs', 'reclient', 'minimal_symbols', - 'official_optimize', 'stable_channel', 'v8_release_branch', + 'official_optimize', 'stable_channel', 'v8_release_branch', 'use_dummy_lastchange', ], 'android_cast_debug_static_bot_compile_only_reclient': [ - 'android', 'cast_android', 'cast_receiver', 'clang', 'debug_static_bot_reclient', 'compile_only', + 'android', 'cast_android', 'cast_receiver', 'clang', 'debug_static_bot_reclient', 'compile_only', 'use_dummy_lastchange', ], 'android_cast_debug_static_bot_reclient': [ @@ -1650,6 +1651,10 @@ 'android', 'cronet_android', 'debug_static_bot_reclient', 'arm_no_neon', 'release_java', ], + 'android_cronet_debug_static_bot_arm_no_neon_reclient_use_dummy_lastchange': [ + 'android', 'cronet_android', 'debug_static_bot_reclient', 'arm_no_neon', 'release_java', 'use_dummy_lastchange', + ], + 'android_cronet_debug_static_bot_riscv64_reclient': [ 'android', 'cronet_android', 'debug_static_bot_reclient', 'riscv64', ], @@ -1662,6 +1667,10 @@ 'android', 'cronet_android', 'debug_static_bot_reclient', 'x86', ], + 'android_cronet_debug_static_bot_x86_reclient_use_dummy_lastchange': [ + 'android', 'cronet_android', 'debug_static_bot_reclient', 'x86', 'use_dummy_lastchange', + ], + 'android_cronet_mainline_clang_debug_static_bot_arm64_reclient': [ 'android', 'cronet_android', 'debug_static_bot_reclient', 'arm64', 'cronet_android_mainline_clang', ], @@ -1763,31 +1772,31 @@ ], 'android_debug_trybot_arm64_reclient': [ - 'android', 'debug_bot_reclient', 'arm64', + 'android', 'debug_bot_reclient', 'arm64', 'use_dummy_lastchange', ], 'android_debug_trybot_compile_only_arm64_fastbuild_reclient': [ - 'android', 'debug_bot_reclient', 'compile_only', 'arm64', 'android_fastbuild' + 'android', 'debug_bot_reclient', 'compile_only', 'arm64', 'android_fastbuild', 'use_dummy_lastchange', ], 'android_debug_trybot_compile_only_arm64_reclient': [ - 'android', 'debug_bot_reclient', 'compile_only', 'arm64' + 'android', 'debug_bot_reclient', 'compile_only', 'arm64', 'use_dummy_lastchange', ], 'android_debug_trybot_compile_only_x64_reclient': [ - 'android', 'debug_bot_reclient', 'compile_only', 'x64', + 'android', 'debug_bot_reclient', 'compile_only', 'x64', 'use_dummy_lastchange', ], 'android_debug_trybot_compile_only_x86_reclient': [ - 'android', 'debug_bot_reclient', 'compile_only', 'x86', + 'android', 'debug_bot_reclient', 'compile_only', 'x86', 'use_dummy_lastchange', ], 'android_debug_trybot_java_coverage': [ - 'android', 'debug_bot', 'use_java_coverage', 'strip_debug_info', + 'android', 'debug_bot', 'use_java_coverage', 'strip_debug_info', 'use_dummy_lastchange', ], 'android_debug_trybot_x64_webview_trichrome_webview_shell_reclient': [ - 'android', 'debug_bot_reclient', 'x64', 'webview_trichrome', 'webview_shell', + 'android', 'debug_bot_reclient', 'x64', 'webview_trichrome', 'webview_shell', 'use_dummy_lastchange', ], # GN args to simulate Android developer builds. @@ -2010,7 +2019,7 @@ ], 'angle_deqp_release_trybot_reclient': [ - 'angle_deqp_tests', 'shared_release_bot_dcheck_always_on_reclient', + 'angle_deqp_tests', 'shared_release_bot_dcheck_always_on_reclient', 'use_dummy_lastchange', ], 'angle_deqp_release_trybot_x86_reclient': [ @@ -2117,6 +2126,10 @@ 'cast_receiver', 'cast_os', 'release_bot_reclient', 'arm64', 'minimal_symbols', ], + 'cast_arm64_release_bot_reclient_use_dummy_lastchange': [ + 'cast_receiver', 'cast_os', 'release_bot_reclient', 'arm64', 'minimal_symbols', 'use_dummy_lastchange', + ], + 'cast_audio_release_bot_reclient': [ 'cast_receiver', 'cast_os', 'cast_audio', 'release_bot_reclient', 'minimal_symbols', ], @@ -2136,6 +2149,10 @@ 'cast_receiver', 'cast_os', 'debug_bot_reclient', ], + 'cast_debug_bot_reclient_use_dummy_lastchange': [ + 'cast_receiver', 'cast_os', 'debug_bot_reclient', 'use_dummy_lastchange', + ], + # Cast Linux takes very long in linking, possibly due to being on GCE # (crbug/794423). 'cast_release_bot_reclient': [ @@ -2163,6 +2180,10 @@ 'cfi_full', 'cfi_icall', 'cfi_diag', 'thin_lto', 'release', 'static', 'dcheck_always_on', 'reclient', ], + 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_reclient_use_dummy_last_change': [ + 'cfi_full', 'cfi_icall', 'cfi_diag', 'thin_lto', 'release', 'static', 'dcheck_always_on', 'reclient', 'use_dummy_lastchange', + ], + 'chrome_branded_reclient_minimal_symbols': [ 'chrome_branded', 'minimal_symbols', 'release_bot_reclient', ], @@ -2189,6 +2210,10 @@ 'chromeos_amd64-generic_reclient', 'debug', ], + 'chromeos_amd64-generic_dbg_reclient_use_dummy_lastchange': [ + 'chromeos_amd64-generic_reclient', 'debug', 'use_dummy_lastchange', + ], + 'chromeos_amd64-generic_lacros_dbg_reclient': [ 'chromeos_amd64-generic-crostoolchain_reclient', 'lacros', 'debug', 'static', ], @@ -2223,8 +2248,8 @@ 'chromeos_amd64-generic-crostoolchain_reclient', 'lacros', 'release', 'dcheck_always_on', 'use_dummy_lastchange', ], - 'chromeos_amd64-generic_lacros_rel_dchecks_skylab_reclient': [ - 'chromeos_amd64-generic-crostoolchain_reclient', 'lacros', 'release', 'dcheck_always_on', 'is_skylab', + 'chromeos_amd64-generic_lacros_rel_dchecks_skylab_reclient_use_dummy_lastchange': [ + 'chromeos_amd64-generic-crostoolchain_reclient', 'lacros', 'release', 'dcheck_always_on', 'is_skylab', 'use_dummy_lastchange', ], 'chromeos_amd64-generic_lacros_rel_reclient': [ @@ -2416,6 +2441,10 @@ 'chromeos_with_codecs', 'release_bot_reclient', 'use_javascript_coverage', 'optimize_webui_off', ], + 'chromeos_js_coverage_reclient_use_dummy_lastchange': [ + 'chromeos_with_codecs', 'release_bot_reclient', 'use_javascript_coverage', 'optimize_webui_off', 'use_dummy_lastchange', + ], + 'chromeos_kevin_include_unwind_tables_official_reclient': [ 'chromeos_kevin_reclient', 'include_unwind_tables', 'official', ], @@ -2491,14 +2520,14 @@ 'chromeos_with_codecs_release_trybot_code_coverage_reclient': [ 'chromeos_with_codecs', 'release_trybot_reclient', 'no_symbols', 'also_build_lacros_chrome', 'use_clang_coverage', 'partial_code_coverage_instrumentation', - 'enable_dangling_raw_ptr_feature_flag', 'enable_backup_ref_ptr_feature_flag', 'use_dummy_lastchange', + 'enable_dangling_raw_ptr_feature_flag', 'enable_backup_ref_ptr_feature_flag', ], 'chromeos_with_codecs_release_trybot_code_coverage_siso': [ 'chromeos_with_codecs', 'release_trybot', 'no_symbols', 'also_build_lacros_chrome', 'use_clang_coverage', 'partial_code_coverage_instrumentation', 'enable_dangling_raw_ptr_feature_flag', 'enable_backup_ref_ptr_feature_flag', - 'no_goma', 'no_reclient', 'siso', 'use_dummy_lastchange', + 'no_goma', 'no_reclient', 'siso', ], 'chromeos_with_codecs_release_trybot_invert_fieldtrials_reclient': [ @@ -2608,7 +2637,6 @@ ], 'codesearch_gen_chromium_android_bot_reclient': [ - # Set is_component_build=false to enable cronet targets. 'codesearch_reclient', 'android_without_codecs', 'static', ], @@ -2620,6 +2648,11 @@ 'codesearch_reclient', 'chromeos', ], + 'codesearch_gen_chromium_cronet_bot_reclient': [ + # Set is_cronet_build to true in order to build cronet. + 'codesearch_reclient', 'android_without_codecs', 'static', 'is_cronet_build', + ], + 'codesearch_gen_chromium_fuchsia_bot_reclient': [ 'codesearch_release_reclient', 'fuchsia', 'cast_receiver', ], @@ -2698,6 +2731,10 @@ 'debug_bot_reclient', 'fuchsia', 'compile_only', ], + 'debug_bot_fuchsia_compile_only_reclient_use_dummy_lastchange': [ + 'debug_bot_reclient', 'fuchsia', 'compile_only', 'use_dummy_lastchange', + ], + 'debug_bot_fuchsia_reclient': [ 'debug_bot_reclient', 'fuchsia', ], @@ -2710,6 +2747,12 @@ 'debug_bot_reclient', ], + # When migrating to starlark, builders using this should instead just combine + # try_builder, debug and reclient configs + 'debug_bot_reclient_use_dummy_lastchange': [ + 'debug_bot_reclient', 'use_dummy_lastchange', + ], + 'debug_bot_rust_android_arm64_reclient': [ 'debug_bot_reclient', 'enable_all_rust_features', 'android', 'arm64', ], @@ -2749,11 +2792,11 @@ ], 'gpu_fyi_tests_debug_trybot_reclient': [ - 'gpu_fyi_tests', 'debug_bot_reclient', 'disable_nacl', + 'gpu_fyi_tests', 'debug_bot_reclient', 'disable_nacl', 'use_dummy_lastchange', ], 'gpu_fyi_tests_dx12vk_debug_trybot_reclient': [ - 'gpu_fyi_tests', 'dx12vk', 'debug_bot_reclient', 'disable_nacl', + 'gpu_fyi_tests', 'dx12vk', 'debug_bot_reclient', 'disable_nacl', 'use_dummy_lastchange', ], 'gpu_fyi_tests_dx12vk_release_trybot_reclient': [ @@ -2762,12 +2805,12 @@ 'gpu_fyi_tests_lacros_jacuzzi_release_trybot_dcheck_off_no_symbols_reclient': [ 'chromeos', 'jacuzzi', 'official', 'release_bot_reclient', 'no_symbols', - 'chromeos_device_reclient', 'also_build_lacros_chrome_for_architecture_arm', + 'chromeos_device_reclient', 'also_build_lacros_chrome_for_architecture_arm', 'use_dummy_lastchange', ], 'gpu_fyi_tests_lacros_octopus_release_trybot_dcheck_off_no_symbols_reclient': [ 'chromeos', 'octopus', 'official', 'release_bot_reclient', 'no_symbols', - 'chromeos_device_reclient', 'also_build_lacros_chrome_for_architecture_amd64', + 'chromeos_device_reclient', 'also_build_lacros_chrome_for_architecture_amd64', 'use_dummy_lastchange', ], 'gpu_fyi_tests_release_trybot_arm64_reclient': [ @@ -2859,6 +2902,12 @@ 'gpu_tests', 'debug_bot_reclient', ], + # When migrating to starlark, builders using this should instead just combine + # try_builder, debug, gpu_tests and reclient configs + 'gpu_tests_debug_bot_reclient_use_dummy_lastchange': [ + 'gpu_tests', 'debug_bot_reclient', 'use_dummy_lastchange', + ], + 'gpu_tests_debug_bot_x86_no_symbols': [ 'gpu_tests', 'debug_bot', 'x86', 'no_symbols' ], @@ -2867,8 +2916,14 @@ 'gpu_tests', 'debug_bot_reclient', 'x86', 'no_symbols' ], + # When migrating to starlark, builders using this should instead just combine + # try_builder, debug, gpu_tests, x86, compile_only and reclient configs + 'gpu_tests_debug_bot_x86_no_symbols_reclient_use_dummy_lastchange': [ + 'gpu_tests', 'debug_bot_reclient', 'x86', 'no_symbols', 'use_dummy_lastchange', + ], + 'gpu_tests_debug_trybot_reclient': [ - 'gpu_tests', 'debug', 'no_symbols', 'dcheck_always_on', 'static', 'reclient' + 'gpu_tests', 'debug', 'no_symbols', 'dcheck_always_on', 'static', 'reclient', 'use_dummy_lastchange', ], 'gpu_tests_ozone_linux_non_x11_release_trybot_reclient': [ @@ -3070,6 +3125,10 @@ 'headless_shell', 'release', 'static', 'reclient', ], + 'headless_shell_release_bot_reclient_use_dummy_lastchange': [ + 'headless_shell', 'release', 'static', 'reclient', 'use_dummy_lastchange', + ], + 'ios_catalyst_debug_static_bot_compile_only_libfuzzer_asan_no_dsyms_no_remoting_reclient': [ 'compile_only', 'debug_static_bot_reclient', 'ios', 'ios_catalyst', 'ios_cpu_x64', 'asan', 'libfuzzer', 'no_dsyms', 'no_remoting', ], @@ -3090,6 +3149,10 @@ 'cronet_ios', 'debug_static_bot_reclient', 'ios_deployment_target_11_0', 'ios', 'ios_simulator', 'ios_cpu_x64', 'xctest', ], + 'ios_cronet_xctest_reclient_use_dummy_lastchange': [ + 'cronet_ios', 'debug_static_bot_reclient', 'ios_deployment_target_11_0', 'ios', 'ios_simulator', 'ios_cpu_x64', 'xctest', 'use_dummy_lastchange', + ], + 'ios_device_release_compile_only': [ 'ios_device_release_compile_only', ], @@ -3108,7 +3171,7 @@ ], 'ios_simulator_code_coverage_partial_instrumentation_xctest_reclient': [ - 'use_clang_coverage', 'debug_static_bot_reclient', 'x64', 'ios', 'ios_simulator', 'partial_code_coverage_instrumentation', 'xctest', + 'use_clang_coverage', 'debug_static_bot_reclient', 'x64', 'ios', 'ios_simulator', 'partial_code_coverage_instrumentation', 'xctest', 'use_dummy_lastchange', ], 'ios_simulator_debug_static_bot_invert_fieldtrials_xctest_reclient': [ @@ -3131,6 +3194,10 @@ 'debug_static_bot_reclient', 'ios', 'ios_simulator', 'ios_cpu_x64', 'xctest', 'no_lld', ], + 'ios_simulator_debug_static_bot_xctest_reclient_use_dummy_lastchange': [ + 'debug_static_bot_reclient', 'ios', 'ios_simulator', 'ios_cpu_x64', 'xctest', 'use_dummy_lastchange', + ], + 'ios_simulator_release_static_asan_bot_xctest_reclient': [ 'ios', 'ios_simulator', 'ios_cpu_x64', 'release_bot_reclient', 'asan', 'xctest', ], @@ -3143,6 +3210,10 @@ 'release_bot_reclient', 'clang', 'no_symbols', 'use_javascript_coverage', 'optimize_webui_off', ], + 'js_coverage_reclient_use_dummy_lastchange': [ + 'release_bot_reclient', 'clang', 'no_symbols', 'use_javascript_coverage', 'optimize_webui_off', 'use_dummy_lastchange', + ], + 'lacros_on_linux_clang_code_coverage_reclient': [ 'lacros_on_linux', 'release_bot_reclient', 'also_build_ash_chrome', 'clang', 'use_clang_coverage', 'no_symbols', ], @@ -3594,6 +3665,10 @@ 'release_bot_blink', 'dcheck_always_on', ], + 'release_bot_blink_accessibility_reclient_use_dummy_lastchange': [ + 'release_bot_blink', 'dcheck_always_on', 'use_dummy_lastchange', + ], + 'release_bot_blink_arm64_minimal_symbols_reclient': [ 'release_bot_blink', 'arm64', 'minimal_symbols', ], @@ -3652,6 +3727,10 @@ 'release_bot_reclient', 'fuchsia', 'blink_symbol', 'minimal_symbols', ], + 'release_bot_fuchsia_reclient_with_blink_symbol_use_dummy_lastchange': [ + 'release_bot_reclient', 'fuchsia', 'blink_symbol', 'minimal_symbols', 'use_dummy_lastchange', + ], + 'release_bot_mac_strip_minimal_symbols_arm64_reclient': [ 'release_bot_reclient', 'mac_strip', 'minimal_symbols', 'arm64', ], @@ -3701,7 +3780,7 @@ ], 'release_fuchsia_arm64_binary_size_reclient': [ - 'release', 'official_optimize_reclient', 'fuchsia', 'arm64', 'cast_receiver_size_optimized', + 'release', 'official_optimize_reclient', 'fuchsia', 'arm64', 'cast_receiver_size_optimized', 'use_dummy_lastchange', ], 'release_rust_android_arm32_reclient': [ @@ -3829,6 +3908,10 @@ 'updater', 'debug_static_bot_reclient', ], + 'updater_debug_bot_reclient_use_dummy_lastchange': [ + 'updater', 'debug_static_bot_reclient', 'use_dummy_lastchange', + ], + 'updater_debug_bot_x86_reclient': [ 'updater', 'debug_static_bot_reclient', 'x86', 'no_symbols', ], @@ -4478,6 +4561,10 @@ 'gn_args': 'target_environment="simulator"', }, + 'is_cronet_build': { + 'gn_args': 'is_cronet_build=true', + }, + 'is_skylab': { 'gn_args': 'is_skylab=true', }, @@ -4627,7 +4714,7 @@ }, 'official_optimize_reclient_trybot': { - 'mixins': ['official_optimize', 'reclient', 'minimal_symbols', 'dcheck_always_on'], + 'mixins': ['official_optimize', 'reclient', 'minimal_symbols', 'dcheck_always_on', 'use_dummy_lastchange',], }, 'optimization_guide': { @@ -4737,15 +4824,15 @@ }, 'release_trybot': { - 'mixins': ['release_bot', 'no_symbols', 'dcheck_always_on'], + 'mixins': ['release_bot', 'no_symbols', 'dcheck_always_on', 'use_dummy_lastchange'], }, 'release_trybot_blink': { - 'mixins': ['release_bot_blink', 'minimal_symbols', 'dcheck_always_on'], + 'mixins': ['release_bot_blink', 'minimal_symbols', 'dcheck_always_on', 'use_dummy_lastchange'], }, 'release_trybot_blink': { - 'mixins': ['release_bot_blink', 'minimal_symbols', 'dcheck_always_on'], + 'mixins': ['release_bot_blink', 'minimal_symbols', 'dcheck_always_on', 'use_dummy_lastchange'], }, 'release_trybot_dcheck_off_reclient': { @@ -4753,15 +4840,15 @@ }, 'release_trybot_minimal_symbols': { - 'mixins': ['release_bot', 'minimal_symbols', 'dcheck_always_on'], + 'mixins': ['release_bot', 'minimal_symbols', 'dcheck_always_on', 'use_dummy_lastchange'], }, 'release_trybot_minimal_symbols_reclient': { - 'mixins': ['release_bot_reclient', 'minimal_symbols', 'dcheck_always_on'], + 'mixins': ['release_bot_reclient', 'minimal_symbols', 'dcheck_always_on', 'use_dummy_lastchange'], }, 'release_trybot_reclient': { - 'mixins': ['release_bot_reclient', 'no_symbols', 'dcheck_always_on'], + 'mixins': ['release_bot_reclient', 'no_symbols', 'dcheck_always_on', 'use_dummy_lastchange'], }, 'resource_allowlisting': { @@ -4789,7 +4876,7 @@ }, 'shared_release_trybot_reclient': { - 'mixins': ['shared_release_bot_reclient', 'no_symbols', 'dcheck_always_on'], + 'mixins': ['shared_release_bot_reclient', 'no_symbols', 'dcheck_always_on', 'use_dummy_lastchange'], }, 'siso': {
diff --git a/tools/mb/mb_config_expectations/chrome.gpu.fyi.json b/tools/mb/mb_config_expectations/chrome.gpu.fyi.json index 6a99db9..357ded4a 100644 --- a/tools/mb/mb_config_expectations/chrome.gpu.fyi.json +++ b/tools/mb/mb_config_expectations/chrome.gpu.fyi.json
@@ -11,6 +11,7 @@ "ozone_platform_headless": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -26,6 +27,7 @@ "is_official_build": true, "symbol_level": 0, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -41,6 +43,7 @@ "is_official_build": true, "symbol_level": 0, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.android.json b/tools/mb/mb_config_expectations/chromium.android.json index ba289cb..8ee7586 100644 --- a/tools/mb/mb_config_expectations/chromium.android.json +++ b/tools/mb/mb_config_expectations/chromium.android.json
@@ -255,6 +255,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -281,6 +282,7 @@ "target_cpu": "arm", "target_os": "android", "use_crash_key_stubs": true, + "use_dummy_lastchange": true, "use_hashed_jni_names": true, "use_partition_alloc": false, "use_platform_icu_alternatives": true,
diff --git a/tools/mb/mb_config_expectations/chromium.angle.json b/tools/mb/mb_config_expectations/chromium.angle.json index 223e516..3255b3c 100644 --- a/tools/mb/mb_config_expectations/chromium.angle.json +++ b/tools/mb/mb_config_expectations/chromium.angle.json
@@ -11,6 +11,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -37,6 +38,7 @@ "target_cpu": "x64", "target_environment": "simulator", "target_os": "ios", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -48,6 +50,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -59,6 +62,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -70,6 +74,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -82,6 +87,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.build.json b/tools/mb/mb_config_expectations/chromium.build.json index 27d40129..ea42280f 100644 --- a/tools/mb/mb_config_expectations/chromium.build.json +++ b/tools/mb/mb_config_expectations/chromium.build.json
@@ -43,6 +43,7 @@ "target_cpu": "arm64", "target_os": "android", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -66,6 +67,7 @@ "target_cpu": "arm64", "target_os": "android", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": false } }, @@ -89,6 +91,7 @@ "target_cpu": "arm64", "target_os": "android", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } } @@ -164,6 +167,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -182,6 +186,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_goma": false, "use_remoteexec": false } @@ -199,6 +204,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } } @@ -298,6 +304,7 @@ "symbol_level": 0, "target_cpu": "x64", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -337,6 +344,7 @@ "symbol_level": 0, "target_cpu": "x64", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": false } }, @@ -354,6 +362,7 @@ "symbol_level": 0, "target_cpu": "x64", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.dawn.json b/tools/mb/mb_config_expectations/chromium.dawn.json index a6d1256..362b798 100644 --- a/tools/mb/mb_config_expectations/chromium.dawn.json +++ b/tools/mb/mb_config_expectations/chromium.dawn.json
@@ -9,6 +9,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -22,6 +23,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -36,6 +38,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -50,6 +53,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -61,6 +65,7 @@ "is_debug": false, "is_tsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -71,6 +76,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -81,6 +87,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -92,6 +99,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -103,6 +111,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -113,6 +122,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -123,6 +133,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -135,6 +146,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -146,6 +158,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -157,6 +170,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -168,6 +182,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -179,6 +194,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.devtools-frontend.json b/tools/mb/mb_config_expectations/chromium.devtools-frontend.json index cefb871..4ac78ad 100644 --- a/tools/mb/mb_config_expectations/chromium.devtools-frontend.json +++ b/tools/mb/mb_config_expectations/chromium.devtools-frontend.json
@@ -8,6 +8,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json index f7af940..4ec7729 100644 --- a/tools/mb/mb_config_expectations/chromium.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -247,6 +247,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -313,6 +314,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -406,6 +408,7 @@ "target_environment": "simulator", "target_os": "ios", "use_blink": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -678,6 +681,7 @@ "is_debug": false, "is_tsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_goma": true } }, @@ -856,6 +860,7 @@ "is_debug": false, "is_lsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -865,6 +870,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -874,6 +880,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -883,6 +890,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -921,6 +929,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -948,6 +957,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -966,6 +976,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -984,6 +995,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1002,6 +1014,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1075,6 +1088,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1084,6 +1098,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/mb/mb_config_expectations/chromium.gpu.fyi.json b/tools/mb/mb_config_expectations/chromium.gpu.fyi.json index 97749c72..cf88bb4 100644 --- a/tools/mb/mb_config_expectations/chromium.gpu.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.gpu.fyi.json
@@ -10,6 +10,7 @@ "ozone_platform_headless": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -24,6 +25,7 @@ "ozone_platform_headless": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -39,6 +41,7 @@ "ozone_platform_headless": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -52,6 +55,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -67,6 +71,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -82,6 +87,7 @@ "proprietary_codecs": true, "symbol_level": 1, "use_bundled_weston": true, + "use_dummy_lastchange": true, "use_ozone": true, "use_remoteexec": true } @@ -95,6 +101,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -106,6 +113,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -118,6 +126,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -131,6 +140,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -142,6 +152,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -155,6 +166,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -168,6 +180,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -180,6 +193,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -191,6 +205,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -204,6 +219,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -216,6 +232,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -228,6 +245,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -241,6 +259,7 @@ "is_tsan": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.gpu.json b/tools/mb/mb_config_expectations/chromium.gpu.json index 701eecf..d81250f3 100644 --- a/tools/mb/mb_config_expectations/chromium.gpu.json +++ b/tools/mb/mb_config_expectations/chromium.gpu.json
@@ -11,6 +11,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -23,6 +24,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -44,6 +46,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -66,6 +69,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -90,6 +94,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_goma": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.infra.codesearch.json b/tools/mb/mb_config_expectations/chromium.infra.codesearch.json index 8ada83b..db35d8b 100644 --- a/tools/mb/mb_config_expectations/chromium.infra.codesearch.json +++ b/tools/mb/mb_config_expectations/chromium.infra.codesearch.json
@@ -26,6 +26,21 @@ "use_remoteexec": true } }, + "codesearch-gen-chromium-cronet": { + "gn_args": { + "blink_enable_generated_code_formatting": true, + "clang_use_chrome_plugins": false, + "debuggable_apks": false, + "enable_kythe_annotations": true, + "is_clang": true, + "is_component_build": false, + "is_cronet_build": true, + "is_debug": true, + "symbol_level": 1, + "target_os": "android", + "use_remoteexec": true + } + }, "codesearch-gen-chromium-fuchsia": { "gn_args": { "blink_enable_generated_code_formatting": true,
diff --git a/tools/mb/mb_config_expectations/chromium.memory.fyi.json b/tools/mb/mb_config_expectations/chromium.memory.fyi.json index 3200978..0e7e016 100644 --- a/tools/mb/mb_config_expectations/chromium.memory.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.memory.fyi.json
@@ -8,6 +8,7 @@ "is_debug": false, "is_lsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/mb/mb_config_expectations/chromium.memory.json b/tools/mb/mb_config_expectations/chromium.memory.json index 122ba3e..fd6d6ef 100644 --- a/tools/mb/mb_config_expectations/chromium.memory.json +++ b/tools/mb/mb_config_expectations/chromium.memory.json
@@ -7,6 +7,7 @@ "is_debug": false, "is_lsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -32,6 +33,7 @@ "is_lsan": true, "symbol_level": 1, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -151,6 +153,7 @@ "is_lsan": true, "symbol_level": 1, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/mb/mb_config_expectations/chromium.rust.json b/tools/mb/mb_config_expectations/chromium.rust.json index 90133c8..280fdc7 100644 --- a/tools/mb/mb_config_expectations/chromium.rust.json +++ b/tools/mb/mb_config_expectations/chromium.rust.json
@@ -11,6 +11,7 @@ "symbol_level": 1, "target_cpu": "arm", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -40,6 +41,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -61,6 +63,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -92,6 +95,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x64", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.swangle.json b/tools/mb/mb_config_expectations/chromium.swangle.json index 9b1bac79..fcfe4fe 100644 --- a/tools/mb/mb_config_expectations/chromium.swangle.json +++ b/tools/mb/mb_config_expectations/chromium.swangle.json
@@ -7,6 +7,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -18,6 +19,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -28,6 +30,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -38,6 +41,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -48,6 +52,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -59,6 +64,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -72,6 +78,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -82,6 +89,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -103,6 +111,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/mb/mb_config_expectations/client.devtools-frontend.integration.json b/tools/mb/mb_config_expectations/client.devtools-frontend.integration.json index d6320ba..2fec2702 100644 --- a/tools/mb/mb_config_expectations/client.devtools-frontend.integration.json +++ b/tools/mb/mb_config_expectations/client.devtools-frontend.integration.json
@@ -8,6 +8,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -19,6 +20,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/client.v8.fyi.json b/tools/mb/mb_config_expectations/client.v8.fyi.json index e9d534a2a..3f673d7 100644 --- a/tools/mb/mb_config_expectations/client.v8.fyi.json +++ b/tools/mb/mb_config_expectations/client.v8.fyi.json
@@ -10,6 +10,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -22,6 +23,7 @@ "is_debug": false, "is_lsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -43,6 +45,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -54,6 +57,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true, "v8_enable_pointer_compression": false } @@ -66,6 +70,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -150,6 +155,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json b/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json index 11f9e6c..407cd24 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json
@@ -7,6 +7,7 @@ "is_debug": false, "symbol_level": 1, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -17,6 +18,7 @@ "is_component_build": false, "is_debug": false, "proprietary_codecs": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.android.json b/tools/mb/mb_config_expectations/tryserver.chromium.android.json index 191959e..7caba5a 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.android.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.android.json
@@ -13,6 +13,7 @@ "system_webview_package_name": "com.google.android.webview.debug", "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -31,6 +32,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -46,6 +48,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -67,6 +70,7 @@ "target_cpu": "x64", "target_os": "android", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_jacoco_coverage": true, "use_remoteexec": true } @@ -88,6 +92,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_jacoco_coverage": true, "use_remoteexec": true } @@ -104,6 +109,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -123,6 +129,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -150,6 +157,7 @@ "symbol_level": 0, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -173,6 +181,7 @@ "target_cpu": "arm64", "target_os": "android", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -196,6 +205,7 @@ "target_cpu": "arm64", "target_os": "android", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -212,6 +222,7 @@ "strip_debug_info": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -245,6 +256,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -258,6 +270,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -276,6 +289,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -294,6 +308,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -308,6 +323,7 @@ "strip_debug_info": true, "symbol_level": 0, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -593,6 +609,7 @@ "target_cpu": "arm64", "target_os": "android", "use_crash_key_stubs": true, + "use_dummy_lastchange": true, "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, @@ -764,6 +781,7 @@ "target_cpu": "x86", "target_os": "android", "use_crash_key_stubs": true, + "use_dummy_lastchange": true, "use_hashed_jni_names": true, "use_partition_alloc": false, "use_platform_icu_alternatives": true, @@ -820,6 +838,7 @@ "target_cpu": "x86", "target_os": "android", "use_crash_key_stubs": true, + "use_dummy_lastchange": true, "use_hashed_jni_names": true, "use_partition_alloc": false, "use_platform_icu_alternatives": true, @@ -991,6 +1010,7 @@ "strip_debug_info": true, "symbol_level": 0, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1010,6 +1030,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1028,6 +1049,7 @@ "system_webview_package_name": "com.google.android.webview", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1048,6 +1070,7 @@ "target_cpu": "x86", "target_os": "android", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_jacoco_coverage": true, "use_remoteexec": true } @@ -1068,6 +1091,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_jacoco_coverage": true, "use_remoteexec": true } @@ -1082,6 +1106,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1101,6 +1126,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_jacoco_coverage": true, "use_remoteexec": true } @@ -1116,6 +1142,7 @@ "symbol_level": 0, "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_perfetto_client_library": true, "use_remoteexec": true } @@ -1130,6 +1157,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1148,6 +1176,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1166,6 +1195,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_goma": true } }, @@ -1184,6 +1214,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1199,6 +1230,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1214,6 +1246,7 @@ "system_webview_shell_package_name": "org.chromium.my_webview_shell", "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1230,6 +1263,7 @@ "system_webview_package_name": "com.google.android.apps.chrome", "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1246,6 +1280,7 @@ "system_webview_package_name": "com.google.android.apps.chrome", "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1262,6 +1297,7 @@ "system_webview_package_name": "com.google.android.apps.chrome", "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1295,6 +1331,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1309,6 +1346,7 @@ "symbol_level": 0, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1324,6 +1362,7 @@ "symbol_level": 0, "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1337,6 +1376,7 @@ "symbol_level": 0, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1350,6 +1390,7 @@ "symbol_level": 0, "target_cpu": "x64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1363,6 +1404,7 @@ "symbol_level": 0, "target_cpu": "x86", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1376,6 +1418,7 @@ "strip_debug_info": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_goma": true, "use_jacoco_coverage": true } @@ -1403,6 +1446,7 @@ "target_cpu": "arm", "target_os": "android", "use_crash_key_stubs": true, + "use_dummy_lastchange": true, "use_hashed_jni_names": true, "use_partition_alloc": false, "use_platform_icu_alternatives": true, @@ -1420,6 +1464,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1433,6 +1478,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1447,6 +1493,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -1461,6 +1508,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1476,6 +1524,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1490,6 +1539,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1504,6 +1554,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1519,6 +1570,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1533,6 +1585,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1548,6 +1601,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -1574,6 +1628,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.angle.json b/tools/mb/mb_config_expectations/tryserver.chromium.angle.json index b535ee43..d3fe6733 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.angle.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.angle.json
@@ -11,6 +11,7 @@ "symbol_level": 0, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true, "use_static_angle": true } @@ -23,6 +24,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -37,6 +39,7 @@ "target_cpu": "x64", "target_environment": "simulator", "target_os": "ios", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -48,6 +51,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -59,6 +63,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -70,6 +75,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -82,6 +88,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.cft.json b/tools/mb/mb_config_expectations/tryserver.chromium.cft.json index 3cc60ad6..b18365a0 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.cft.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.cft.json
@@ -9,6 +9,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -35,6 +36,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -48,6 +50,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json b/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json index e0132b3..5a70446 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json
@@ -29,6 +29,7 @@ "is_chromeos_device": true, "is_debug": true, "ozone_platform_headless": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -128,6 +129,7 @@ "ozone_platform_headless": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -142,6 +144,7 @@ "ozone_platform_headless": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -157,6 +160,7 @@ "ozone_platform_headless": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -183,6 +187,7 @@ "is_skylab": true, "ozone_platform_headless": true, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -232,6 +237,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -288,6 +294,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.dawn.json b/tools/mb/mb_config_expectations/tryserver.chromium.dawn.json index e7eb00a..3fa496fa 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.dawn.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.dawn.json
@@ -9,6 +9,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -23,6 +24,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -36,6 +38,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -50,6 +53,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -60,6 +64,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -70,6 +75,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -81,6 +87,7 @@ "is_debug": false, "is_tsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -91,6 +98,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -102,6 +110,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -113,6 +122,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -123,6 +133,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -134,6 +145,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -145,6 +157,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -157,6 +170,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -169,6 +183,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -180,6 +195,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -191,6 +207,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -202,6 +219,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -212,6 +230,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -222,6 +241,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -233,6 +253,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.fuchsia.json b/tools/mb/mb_config_expectations/tryserver.chromium.fuchsia.json index 02164e5..fb6213d 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.fuchsia.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.fuchsia.json
@@ -9,6 +9,7 @@ "target_cpu": "arm64", "target_os": "fuchsia", "test_host_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -21,6 +22,7 @@ "target_cpu": "arm64", "target_os": "fuchsia", "test_host_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -33,6 +35,7 @@ "target_cpu": "arm64", "target_os": "fuchsia", "test_host_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -45,6 +48,7 @@ "target_cpu": "arm64", "target_os": "fuchsia", "test_host_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -56,6 +60,7 @@ "is_official_build": true, "target_cpu": "arm64", "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -78,6 +83,7 @@ "is_debug": true, "symbol_level": 0, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -141,6 +147,7 @@ "symbol_level": 0, "target_os": "fuchsia", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -152,6 +159,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -162,6 +170,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -173,6 +182,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_goma": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.json b/tools/mb/mb_config_expectations/tryserver.chromium.json index 1f9eeeb2..70eef36 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.json
@@ -6,6 +6,7 @@ "is_official_build": true, "symbol_level": 2, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -15,6 +16,7 @@ "is_official_build": true, "symbol_level": 1, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -23,6 +25,7 @@ "dcheck_always_on": true, "is_official_build": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -31,6 +34,7 @@ "dcheck_always_on": true, "is_official_build": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -40,6 +44,7 @@ "is_official_build": true, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json index 16a70263..92ca302 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -32,6 +32,7 @@ "optimize_webui": false, "proprietary_codecs": true, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_javascript_coverage": true, "use_remoteexec": true } @@ -47,6 +48,7 @@ "proprietary_codecs": true, "symbol_level": 1, "use_bundled_weston": true, + "use_dummy_lastchange": true, "use_ozone": true, "use_remoteexec": true } @@ -62,6 +64,7 @@ "proprietary_codecs": true, "symbol_level": 1, "use_bundled_weston": true, + "use_dummy_lastchange": true, "use_ozone": true, "use_remoteexec": true } @@ -75,6 +78,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -87,6 +91,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -99,6 +104,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -110,6 +116,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -122,6 +129,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -134,6 +142,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -147,6 +156,7 @@ "is_tsan": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -168,6 +178,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -177,6 +188,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -186,6 +198,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -204,6 +217,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_afl": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -213,6 +227,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -225,6 +240,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -245,6 +261,7 @@ "is_debug": false, "is_tsan": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_goma": true } }, @@ -257,6 +274,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -275,6 +293,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_centipede": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -296,6 +315,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -318,6 +338,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -327,6 +348,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -339,6 +361,7 @@ "is_debug": false, "is_lsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -371,6 +394,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -403,6 +427,7 @@ "media_use_ffmpeg": false, "media_use_libvpx": false, "proprietary_codecs": false, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -439,6 +464,7 @@ "is_debug": false, "optimize_webui": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_javascript_coverage": true, "use_remoteexec": true } @@ -454,6 +480,7 @@ "is_lsan": true, "symbol_level": 1, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -480,6 +507,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -499,6 +527,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -516,6 +545,7 @@ "pdf_enable_xfa": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_libfuzzer": true, "use_remoteexec": true } @@ -529,6 +559,7 @@ "mbi_mode": "per_render_process_host", "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -541,6 +572,7 @@ "mbi_mode": "per_site_instance", "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -550,6 +582,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_perfetto_client_library": true, "use_remoteexec": true } @@ -631,6 +664,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true, "use_v4l2_codec": true, "use_vaapi": false @@ -642,6 +676,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -711,6 +746,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -720,6 +756,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -729,6 +766,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -738,6 +776,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -747,6 +786,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -758,6 +798,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -770,6 +811,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -780,6 +822,7 @@ "is_component_build": true, "is_debug": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -799,6 +842,7 @@ "is_debug": false, "is_lsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -810,6 +854,7 @@ "is_debug": false, "is_lsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -822,6 +867,7 @@ "use_cfi_cast": true, "use_cfi_diag": true, "use_cfi_icall": true, + "use_dummy_lastchange": true, "use_remoteexec": true, "use_thin_lto": true } @@ -835,6 +881,7 @@ "is_lsan": true, "symbol_level": 1, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -855,6 +902,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -863,6 +911,7 @@ "is_component_build": true, "is_debug": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -872,6 +921,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -882,6 +932,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -903,6 +954,7 @@ "is_debug": false, "is_tsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -914,6 +966,7 @@ "is_debug": false, "is_tsan": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -926,6 +979,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -943,6 +997,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.mac.json b/tools/mb/mb_config_expectations/tryserver.chromium.mac.json index 244d004..7e2a9ff 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.mac.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.mac.json
@@ -8,6 +8,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -21,6 +22,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -32,6 +34,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -44,6 +47,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -56,6 +60,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -69,6 +74,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -82,6 +88,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -95,6 +102,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -108,6 +116,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -119,6 +128,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -131,6 +141,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -143,6 +154,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -155,6 +167,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -167,6 +180,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -216,6 +230,7 @@ "target_environment": "simulator", "target_os": "ios", "use_blink": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -307,6 +322,7 @@ "target_environment": "simulator", "target_os": "ios", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -354,6 +370,7 @@ "target_os": "ios", "use_allocator_shim": false, "use_crash_key_stubs": true, + "use_dummy_lastchange": true, "use_partition_alloc": false, "use_platform_icu_alternatives": true, "use_remoteexec": true @@ -370,6 +387,7 @@ "target_environment": "simulator", "target_os": "ios", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -407,6 +425,7 @@ "target_cpu": "x64", "target_environment": "simulator", "target_os": "ios", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -421,6 +440,7 @@ "target_environment": "simulator", "target_os": "ios", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -503,6 +523,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -548,6 +569,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -571,6 +593,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "x64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -583,6 +606,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -594,6 +618,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -603,6 +628,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_perfetto_client_library": true, "use_remoteexec": true } @@ -621,6 +647,7 @@ "symbol_level": 0, "target_cpu": "x64", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -638,6 +665,7 @@ "symbol_level": 0, "target_cpu": "x64", "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -647,6 +675,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -659,6 +688,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -669,6 +699,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -678,6 +709,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -690,6 +722,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -700,6 +733,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -709,6 +743,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -718,6 +753,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -730,6 +766,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -742,6 +779,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -752,6 +790,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "arm64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -761,6 +800,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -770,6 +810,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -780,6 +821,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -789,6 +831,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -809,6 +852,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -820,6 +864,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -842,6 +887,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.rust.json b/tools/mb/mb_config_expectations/tryserver.chromium.rust.json index 90133c8..280fdc7 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.rust.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.rust.json
@@ -11,6 +11,7 @@ "symbol_level": 1, "target_cpu": "arm", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -40,6 +41,7 @@ "symbol_level": 1, "target_cpu": "arm64", "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -61,6 +63,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x64", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -92,6 +95,7 @@ "is_debug": false, "symbol_level": 1, "target_cpu": "x64", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.swangle.json b/tools/mb/mb_config_expectations/tryserver.chromium.swangle.json index c993e89..5f35984ae 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.swangle.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.swangle.json
@@ -7,6 +7,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -18,6 +19,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -28,6 +30,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -38,6 +41,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -48,6 +52,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -59,6 +64,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -72,6 +78,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -82,6 +89,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -93,6 +101,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -103,6 +112,7 @@ "is_component_build": true, "is_debug": false, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -114,6 +124,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json b/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json index 4a4c95f..6566c5b 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json
@@ -10,6 +10,7 @@ "strip_debug_info": true, "symbol_level": 0, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -20,6 +21,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "fuchsia", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -32,6 +34,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -41,6 +44,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -53,6 +57,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "chromeos", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -62,6 +67,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -71,6 +77,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.updater.json b/tools/mb/mb_config_expectations/tryserver.chromium.updater.json index a18b8c1..c281598 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.updater.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.updater.json
@@ -5,6 +5,7 @@ "is_component_build": false, "is_debug": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -15,6 +16,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -24,6 +26,7 @@ "is_component_build": false, "is_debug": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -34,6 +37,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -43,6 +47,7 @@ "is_component_build": false, "is_debug": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -53,6 +58,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.win.json b/tools/mb/mb_config_expectations/tryserver.chromium.win.json index 646be97..98cc149 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.win.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.win.json
@@ -8,6 +8,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -20,6 +21,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -32,6 +34,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -43,6 +46,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -55,6 +59,7 @@ "is_debug": true, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -68,6 +73,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -80,6 +86,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -93,6 +100,7 @@ "proprietary_codecs": true, "symbol_level": 1, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -105,6 +113,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -124,6 +133,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -154,6 +164,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -163,6 +174,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -188,6 +200,7 @@ "pdf_enable_xfa": true, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_libfuzzer": true, "use_remoteexec": true } @@ -198,6 +211,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_perfetto_client_library": true, "use_remoteexec": true } @@ -215,6 +229,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -231,6 +246,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -253,6 +269,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -266,6 +283,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -285,6 +303,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_goma": true } }, @@ -294,6 +313,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -310,6 +330,7 @@ "proprietary_codecs": true, "symbol_level": 0, "use_clang_coverage": true, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -320,6 +341,7 @@ "is_debug": false, "symbol_level": 0, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -331,6 +353,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -344,6 +367,7 @@ "proprietary_codecs": true, "symbol_level": 0, "target_cpu": "x86", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -355,6 +379,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -367,6 +392,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/mb/mb_config_expectations/tryserver.devtools-frontend.json b/tools/mb/mb_config_expectations/tryserver.devtools-frontend.json index fe3340f6..bcddaf48 100644 --- a/tools/mb/mb_config_expectations/tryserver.devtools-frontend.json +++ b/tools/mb/mb_config_expectations/tryserver.devtools-frontend.json
@@ -8,6 +8,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -19,6 +20,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -31,6 +33,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.v8.json b/tools/mb/mb_config_expectations/tryserver.v8.json index 5ebf90d..b523530 100644 --- a/tools/mb/mb_config_expectations/tryserver.v8.json +++ b/tools/mb/mb_config_expectations/tryserver.v8.json
@@ -7,6 +7,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -16,6 +17,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.webrtc.json b/tools/mb/mb_config_expectations/tryserver.webrtc.json index 30bb4a0a..71b47fb 100644 --- a/tools/mb/mb_config_expectations/tryserver.webrtc.json +++ b/tools/mb/mb_config_expectations/tryserver.webrtc.json
@@ -10,6 +10,7 @@ "strip_debug_info": true, "symbol_level": 0, "target_os": "android", + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -19,6 +20,7 @@ "is_component_build": false, "is_debug": false, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -38,6 +40,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -49,6 +52,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 1, + "use_dummy_lastchange": true, "use_remoteexec": true } }, @@ -61,6 +65,7 @@ "is_debug": false, "proprietary_codecs": true, "symbol_level": 0, + "use_dummy_lastchange": true, "use_remoteexec": true } },
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index d47f30d..3ea7318 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -81129,6 +81129,7 @@ <int value="1209" label="Show PK Auto-correction"/> <int value="1210" label="Show VK Auto-correction"/> <int value="1211" label="Show Diacritics"/> + <int value="1212" label="Show Orca"/> <int value="1300" label="Google Drive Connection"/> <int value="1301" label="Remove Google Drive access"/> <int value="1302" label="Google Drive File Sync"/> @@ -99386,6 +99387,19 @@ <int value="3" label="Price"/> </enum> +<enum name="ShoppingDiscountsFetchResult"> + <int value="0" label="We got info back from OptGuide"/> + <int value="1" + label="We found valid info in local db. This is only recorded when we + don't get info back from OptGuide."/> + <int value="2" + label="We found invalid info in local db. This is only recorded when we + don't get info back from OptGuide."/> + <int value="3" + label="We don't get info back from OptGuide and don't find any info in + local db."/> +</enum> + <enum name="ShoppingFeatureIneligibilityReason"> <summary> The different reasons a user might be ineligible for a shopping feature.
diff --git a/tools/metrics/histograms/metadata/bluetooth/histograms.xml b/tools/metrics/histograms/metadata/bluetooth/histograms.xml index 6c0ec82..7d29fa6 100644 --- a/tools/metrics/histograms/metadata/bluetooth/histograms.xml +++ b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
@@ -1928,7 +1928,7 @@ </histogram> <histogram name="Bluetooth.Web.GetCharacteristic.Characteristic" - enum="GATTCharacteristicHash" expires_after="2023-11-12"> + enum="GATTCharacteristicHash" expires_after="2024-11-12"> <owner>reillyg@chromium.org</owner> <owner>deviceapi-team@google.com</owner> <summary> @@ -1939,7 +1939,7 @@ </histogram> <histogram name="Bluetooth.Web.GetCharacteristics.Characteristic" - enum="GATTCharacteristicHash" expires_after="2024-04-25"> + enum="GATTCharacteristicHash" expires_after="2024-11-12"> <owner>reillyg@chromium.org</owner> <owner>deviceapi-team@google.com</owner> <summary> @@ -1950,7 +1950,7 @@ </histogram> <histogram name="Bluetooth.Web.GetPrimaryService.Services" - enum="GATTServiceHash" expires_after="2024-04-25"> + enum="GATTServiceHash" expires_after="2024-11-12"> <owner>reillyg@chromium.org</owner> <owner>deviceapi-team@google.com</owner> <summary> @@ -1961,7 +1961,7 @@ </histogram> <histogram name="Bluetooth.Web.GetPrimaryServices.Services" - enum="GATTServiceHash" expires_after="2024-04-25"> + enum="GATTServiceHash" expires_after="2024-11-12"> <owner>reillyg@chromium.org</owner> <owner>deviceapi-team@google.com</owner> <summary> @@ -1995,7 +1995,7 @@ </histogram> <histogram name="Bluetooth.Web.RequestDevice.UnionOfServices.Services" - enum="GATTServiceHash" expires_after="2023-11-12"> + enum="GATTServiceHash" expires_after="2024-11-12"> <owner>reillyg@chromium.org</owner> <owner>deviceapi-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml index a64927ae1..9202c1a 100644 --- a/tools/metrics/histograms/metadata/commerce/histograms.xml +++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -135,6 +135,19 @@ </summary> </histogram> +<histogram name="Commerce.Discounts.FetchResult" + enum="ShoppingDiscountsFetchResult" expires_after="2024-06-01"> + <owner>zhiyuancai@chromium.org</owner> + <owner>meiliang@chromium.org</owner> + <owner>chrome-shopping@google.com</owner> + <summary> + Records the result of fetching discounts in the shopping service. Recorded + for every requested url. This is used to evaluate the local discounts + database. For example, we may not need the local database if it returns + invalid info for most requested urls / almost never returns valid info. + </summary> +</histogram> + <histogram name="Commerce.Heuristics.CartExtractionScriptSource" enum="CommerceHeuristicsDataSource" expires_after="2023-04-23"> <owner>yuezhanggg@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml index 3256dfc..48c009a 100644 --- a/tools/metrics/histograms/metadata/enterprise/histograms.xml +++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -2527,7 +2527,7 @@ <variant name="CopyToJson" summary="Copy To JSON"/> <variant name="ExportToJson" summary="Export To JSON"/> <variant name="ReloadPolicies" summary="Reload Policies"/> - <variant name="Upload Report" summary="Upload Report"/> + <variant name="UploadReport" summary="Upload Report"/> </token> </histogram>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 23e209f..500d929 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -1989,7 +1989,22 @@ <owner>cros-oac@chromium.org</owner> <summary> Time from the moment sign in authentication is started until the first user - session UI elements become ready to use. (Chrome OS). + session UI elements are painted. (Chrome OS). + </summary> +</histogram> + +<histogram name="BootTime.Login3" units="ms" expires_after="never"> +<!-- expires-never: This is a primary metric for the ChromeOS login. --> + + <owner>alemate@chromium.org</owner> + <owner>xiyuan@chromium.org</owner> + <owner>cros-sw-perf@google.com</owner> + <summary> + Chrome OS: The time it takes from when sign-in authentication begins to when + the login animation finishes. This marks the end of the login process, as + the user's session should be usable at this point. + + This does not replace the BootTime.Login2 histogram. </summary> </histogram> @@ -12722,7 +12737,7 @@ </histogram> <histogram name="SubresourceWebBundles.BundleFetchErrorCode" - enum="NetErrorCodes" expires_after="2024-01-14"> + enum="NetErrorCodes" expires_after="2024-03-01"> <owner>ksakamoto@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -12732,7 +12747,7 @@ </histogram> <histogram name="SubresourceWebBundles.ContentLength" units="bytes" - expires_after="2023-12-24"> + expires_after="2024-03-01"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -12742,14 +12757,14 @@ </histogram> <histogram name="SubresourceWebBundles.LoadResult" - enum="SubresourceWebBundleLoadResult" expires_after="2024-02-25"> + enum="SubresourceWebBundleLoadResult" expires_after="2024-03-01"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary>The result of loading subresource web bundles.</summary> </histogram> <histogram name="SubresourceWebBundles.MaxMemoryUsagePerProcess" units="bytes" - expires_after="2023-10-22"> + expires_after="2024-03-01"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -12760,7 +12775,7 @@ </histogram> <histogram name="SubresourceWebBundles.OriginType" - enum="SubresourceWebBundleOriginType" expires_after="2024-01-14"> + enum="SubresourceWebBundleOriginType" expires_after="2024-03-01"> <owner>hayato@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -12771,7 +12786,7 @@ </histogram> <histogram name="SubresourceWebBundles.ReceivedSize" units="bytes" - expires_after="2023-10-22"> + expires_after="2024-03-01"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -12781,7 +12796,7 @@ </histogram> <histogram name="SubresourceWebBundles.ResourceCount" units="resources" - expires_after="2023-10-22"> + expires_after="2024-03-01"> <owner>ksakamoto@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/performance_controls/histograms.xml b/tools/metrics/histograms/metadata/performance_controls/histograms.xml index 6a38b53..1324695 100644 --- a/tools/metrics/histograms/metadata/performance_controls/histograms.xml +++ b/tools/metrics/histograms/metadata/performance_controls/histograms.xml
@@ -15,7 +15,7 @@ <histograms> <histogram name="PerformanceControls.BatterySaver.BubbleAction" - enum="BatterySaverBubbleActionType" expires_after="2023-11-12"> + enum="BatterySaverBubbleActionType" expires_after="2024-03-17"> <owner>agale@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/printing/histograms.xml b/tools/metrics/histograms/metadata/printing/histograms.xml index 35596751..2a55170 100644 --- a/tools/metrics/histograms/metadata/printing/histograms.xml +++ b/tools/metrics/histograms/metadata/printing/histograms.xml
@@ -134,7 +134,7 @@ </histogram> <histogram name="Printing.CUPS.IppAttributesSuccess" enum="BooleanSuccess" - expires_after="2023-10-22"> + expires_after="2024-05-12"> <owner>bmgordon@chromium.org</owner> <owner>cros-printing-dev@chromium.org</owner> <summary> @@ -147,7 +147,7 @@ </histogram> <histogram name="Printing.CUPS.IppDeviceReachable" enum="BooleanSuccess" - expires_after="2023-11-12"> + expires_after="2024-05-12"> <owner>bmgordon@chromium.org</owner> <owner>cros-printing-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/security/histograms.xml b/tools/metrics/histograms/metadata/security/histograms.xml index d2fa9e0..50461919 100644 --- a/tools/metrics/histograms/metadata/security/histograms.xml +++ b/tools/metrics/histograms/metadata/security/histograms.xml
@@ -145,6 +145,16 @@ </summary> </histogram> +<histogram name="Security.DataDecoder.Json.DecodingTime" units="ms" + expires_after="2024-02-25"> + <owner>djmitche@chromium.org</owner> + <owner>dadrian@chromium.org</owner> + <summary> + Logged once for every invocation of `DataDecoder::ParseJson`. Logs the time + that has elapsed while decoding the input. + </summary> +</histogram> + <histogram name="Security.GwpAsan.CrashAnalysisResult.{Allocator}" enum="GwpAsanCrashAnalysisResult" expires_after="2024-03-24"> <owner>glazunov@google.com</owner>
diff --git a/tools/perf/core/bot_platforms.py b/tools/perf/core/bot_platforms.py index 5512097..fd365a20 100644 --- a/tools/perf/core/bot_platforms.py +++ b/tools/perf/core/bot_platforms.py
@@ -642,7 +642,7 @@ 'SSD, 4GB RAM.', _WIN_10_LOW_END_BENCHMARK_CONFIGS, # TODO(b/278947510): Increase the count when m.2 disks stop failing. - 20, + 48, 'win') WIN_10_LOW_END_PGO = PerfPlatform( 'win-10_laptop_low_end-perf-pgo',
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index 403e1db..4f65130 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -295,12 +295,16 @@ 'target_bits': 64, 'dimension': { - 'pool': 'chrome.tests.perf-fyi', - 'id': 'build370-a7', + 'pool': + 'chrome.tests.perf-fyi', # TODO(crbug.com/971204): Explicitly set the gpu to None to make # chromium_swarming recipe_module ignore this dimension. - 'gpu': None, - 'os': 'Windows-10', + 'gpu': + None, + 'os': + 'Windows-10', + 'synthetic_product_name': + 'HP Laptop 15-bs1xx [Type1ProductConfigId] (HP)' }, }, 'chromeos-kevin-builder-perf-fyi': { @@ -823,16 +827,18 @@ 'target_bits': 64, 'dimension': { - 'pool': 'chrome.tests.perf', + 'pool': + 'chrome.tests.perf', # Explicitly set GPU driver version and Windows OS version such # that we can be informed if this # version ever changes or becomes inconsistent. It is important # that bots are homogeneous. See crbug.com/988045 for history. - 'os': 'Windows-10-18363.476', - 'gpu': '8086:1616-20.19.15.5070', - # TODO(crbug.com/998161): Add synthetic product name for these. - # They don't have this dimension yet as I am writing this CL since - # they are since in pool 'unassigned'. + 'os': + 'Windows-10-18363.476', + 'gpu': + '8086:1616-20.19.15.5070', + 'synthetic_product_name': + 'HP Laptop 15-bs1xx [Type1ProductConfigId] (HP)' }, }, 'win-10_laptop_low_end-perf-pgo': {
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index d1ff4c0..a1db57b 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@ "full_remote_path": "perfetto-luci-artifacts/v37.0/linux-arm64/trace_processor_shell" }, "win": { - "hash": "631e5890bec6fbf53b736ab408e2c231cd70f25f", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/ee5cadbada4d39bc97bac3bf6cdb592e369f1a99/trace_processor_shell.exe" + "hash": "60cb6e43c3291d02db4bf38c3109666490008701", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/d44dbe4ad2af5f2148e8a879bca8aa6dd6b10dfa/trace_processor_shell.exe" }, "linux_arm": { "hash": "4ad0dc8eeae3ad92d6a1da2f1653a81fb9e3c4c1", @@ -21,8 +21,8 @@ "full_remote_path": "perfetto-luci-artifacts/v35.0/mac-arm64/trace_processor_shell" }, "linux": { - "hash": "a0d37191475ed9da1200b7baa7208c34035102ab", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/a3d4c1de9bcf2a0471ab183c45cf111efd29571e/trace_processor_shell" + "hash": "16c7d555ccae66af2329886e494e6907c99a367a", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/d44dbe4ad2af5f2148e8a879bca8aa6dd6b10dfa/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json b/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json index 741cc66..57c5c35 100644 --- a/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json +++ b/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json
@@ -1,106 +1,106 @@ [ { - "duration": "21.0", + "duration": "29.0", "name": "ad_frames.fencedframe/fencedframe: https://ad.doubleclick.net/ddm/adi/N378.275220.MYBESTOPTION.IT4/B8455269.126839257;sz=970x250" }, { - "duration": "21.0", + "duration": "28.0", "name": "ad_frames.fencedframe/fencedframe: https://ad.doubleclick.net/ddm/adi/N378.275220.MYBESTOPTION.IT4/B9340305.127461685;sz=970x250" }, { - "duration": "24.0", + "duration": "31.0", "name": "ad_frames.fencedframe/fencedframe: https://ad.doubleclick.net/ddm/adi/N378.275220.MYBESTOPTION.IT4/B9340305.127562781;sz=970x250" }, { - "duration": "21.0", + "duration": "29.0", "name": "ad_frames.fencedframe/fencedframe: https://ad.doubleclick.net/ddm/adi/N378.275220.MYBESTOPTION.IT4/B9340305.128470354;sz=300x600" }, { - "duration": "22.0", + "duration": "29.0", "name": "ad_frames.fencedframe/fencedframe: https://ad.doubleclick.net/ddm/adi/N378.275220.MYBESTOPTION.IT4/B9340305.128710365;sz=970x250" }, { - "duration": "22.0", + "duration": "29.0", "name": "ad_frames.fencedframe/fencedframe: https://ad.doubleclick.net/ddm/adi/N378.3159.GOOGLE3/B9340305.138620671;sz=970x250" }, { - "duration": "32.0", + "duration": "92.0", "name": "blink_perf.accessibility/build-table.html" }, { - "duration": "28.0", + "duration": "34.0", "name": "blink_perf.accessibility/focus-links.html" }, { - "duration": "25.0", + "duration": "26.0", "name": "blink_perf.accessibility/insert-block-child-after-many-inline-children.html" }, { - "duration": "25.0", + "duration": "29.0", "name": "blink_perf.accessibility/line-breaks.html" }, { - "duration": "32.0", + "duration": "58.0", "name": "blink_perf.accessibility/many-nodes-toggle-content-visibility-auto.html" }, { - "duration": "30.0", + "duration": "43.0", "name": "blink_perf.accessibility/many-nodes-toggle-content-visibility-hidden.html" }, { - "duration": "26.0", + "duration": "53.0", "name": "blink_perf.accessibility/many-nodes-toggle-display-none-in-focusable.html" }, { - "duration": "26.0", + "duration": "33.0", "name": "blink_perf.accessibility/many-nodes-toggle-display-none.html" }, { - "duration": "26.0", + "duration": "49.0", "name": "blink_perf.accessibility/many-text-changes-deep-block-subtree.html" }, { - "duration": "26.0", + "duration": "40.0", "name": "blink_perf.accessibility/many-text-changes-deep-hidden-subtree.html" }, { - "duration": "25.0", + "duration": "28.0", "name": "blink_perf.accessibility/many-text-changes-deep-inline-subtree.html" }, { - "duration": "26.0", + "duration": "57.0", "name": "blink_perf.accessibility/many-text-changes-small-wait-between.html" }, { - "duration": "25.0", + "duration": "27.0", "name": "blink_perf.accessibility/slot-updates.html" }, { - "duration": "25.0", + "duration": "41.0", "name": "blink_perf.accessibility/text-changes-ignored-in-focusable.html" }, { - "duration": "26.0", + "duration": "35.0", "name": "blink_perf.accessibility/text-changes-unignored-in-focusable.html" }, { - "duration": "25.0", + "duration": "26.0", "name": "blink_perf.accessibility/textarea-append.html" }, { - "duration": "26.0", + "duration": "33.0", "name": "blink_perf.accessibility/unassignable-slots-deep-tree.html" }, { - "duration": "26.0", + "duration": "33.0", "name": "blink_perf.accessibility/unassignable-slots-focusable-containers.html" }, { - "duration": "25.0", + "duration": "28.0", "name": "blink_perf.accessibility/unassignable-slots-wide-tree.html" }, { - "duration": "14.0", + "duration": "16.0", "name": "blink_perf.bindings/append-child.html" }, { @@ -120,7 +120,7 @@ "name": "blink_perf.bindings/first-child.html" }, { - "duration": "7.0", + "duration": "6.0", "name": "blink_perf.bindings/gc-forest.html" }, { @@ -128,7 +128,7 @@ "name": "blink_perf.bindings/gc-mini-tree.html" }, { - "duration": "15.0", + "duration": "22.0", "name": "blink_perf.bindings/gc-tree.html" }, { @@ -168,7 +168,7 @@ "name": "blink_perf.bindings/named-property-enumerator.html" }, { - "duration": "15.0", + "duration": "16.0", "name": "blink_perf.bindings/node-list-access.html" }, { @@ -184,7 +184,7 @@ "name": "blink_perf.bindings/sequence-conversion-array.html" }, { - "duration": "8.0", + "duration": "10.0", "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html" }, { @@ -192,7 +192,7 @@ "name": "blink_perf.bindings/serialize-array.html" }, { - "duration": "2.0", + "duration": "3.0", "name": "blink_perf.bindings/serialize-long-string.html" }, { @@ -212,11 +212,11 @@ "name": "blink_perf.bindings/set-attribute.html" }, { - "duration": "11.0", + "duration": "10.0", "name": "blink_perf.bindings/structured-clone-json-deserialize.html" }, { - "duration": "11.0", + "duration": "10.0", "name": "blink_perf.bindings/structured-clone-json-serialize.html" }, { @@ -260,19 +260,19 @@ "name": "blink_perf.bindings/worker-structured-clone-different-payloads.html" }, { - "duration": "21.0", + "duration": "19.0", "name": "blink_perf.bindings/worker-structured-clone-json-from-worker.html" }, { - "duration": "21.0", + "duration": "19.0", "name": "blink_perf.bindings/worker-structured-clone-json-roundtrip.html" }, { - "duration": "21.0", + "duration": "19.0", "name": "blink_perf.bindings/worker-structured-clone-json-to-worker.html" }, { - "duration": "5.0", + "duration": "4.0", "name": "blink_perf.bindings/worker-structured-clone-workerDOM-DBMon-from-worker.html" }, { @@ -280,15 +280,15 @@ "name": "blink_perf.bindings/worker-structured-clone-workerDOM-Map-from-worker.html" }, { - "duration": "13.0", + "duration": "12.0", "name": "blink_perf.bindings/worker-text-encoded-transferable-from-worker.html" }, { - "duration": "13.0", + "duration": "12.0", "name": "blink_perf.bindings/worker-text-encoded-transferable-roundtrip.html" }, { - "duration": "13.0", + "duration": "12.0", "name": "blink_perf.bindings/worker-text-encoded-transferable-to-worker.html" }, { @@ -304,11 +304,15 @@ "name": "blink_perf.bindings/worker-transferable-to-worker.html" }, { - "duration": "12.0", + "duration": "14.0", "name": "blink_perf.css/AtScope.html" }, { - "duration": "17.0", + "duration": "6.0", + "name": "blink_perf.css/AtScopeAncestor.html" + }, + { + "duration": "25.0", "name": "blink_perf.css/AttributeDescendantSelector.html" }, { @@ -316,6 +320,10 @@ "name": "blink_perf.css/BigContainerQuery.html" }, { + "duration": "28.0", + "name": "blink_perf.css/CSSCountersCreate.html" + }, + { "duration": "5.0", "name": "blink_perf.css/CSSLogicalDirection.html" }, @@ -344,7 +352,7 @@ "name": "blink_perf.css/ChangeStyleChildElementSelectors.html" }, { - "duration": "9.0", + "duration": "11.0", "name": "blink_perf.css/ChangeStyleCustomPropertyDeclaration.html" }, { @@ -368,6 +376,10 @@ "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html" }, { + "duration": "14.0", + "name": "blink_perf.css/ChangeStyleNewRuleInExistingStylesheet.html" + }, + { "duration": "7.0", "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html" }, @@ -412,19 +424,23 @@ "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html" }, { - "duration": "16.0", + "duration": "7.0", + "name": "blink_perf.css/ChangeStyleUnrelatedAttributeSelector.html" + }, + { + "duration": "23.0", "name": "blink_perf.css/ClassDescendantSelector.html" }, { - "duration": "12.0", + "duration": "13.0", "name": "blink_perf.css/ClassInvalidation.html" }, { - "duration": "4.0", + "duration": "5.0", "name": "blink_perf.css/CustomPropertiesCascade.html" }, { - "duration": "6.0", + "duration": "7.0", "name": "blink_perf.css/CustomPropertiesDependency.html" }, { @@ -436,7 +452,7 @@ "name": "blink_perf.css/CustomPropertiesNonRootInheritance.html" }, { - "duration": "4.0", + "duration": "5.0", "name": "blink_perf.css/CustomPropertiesPendingSubstitution.html" }, { @@ -452,7 +468,7 @@ "name": "blink_perf.css/ExplicitInheritance.html" }, { - "duration": "12.0", + "duration": "15.0", "name": "blink_perf.css/FocusUpdate.html" }, { @@ -460,7 +476,7 @@ "name": "blink_perf.css/HasDescendantInAncestorPositionInvalidation.html" }, { - "duration": "12.0", + "duration": "13.0", "name": "blink_perf.css/HasDescendantInvalidation.html" }, { @@ -472,15 +488,15 @@ "name": "blink_perf.css/HasDescendantInvalidationMultipleSubjects.html" }, { - "duration": "11.0", + "duration": "12.0", "name": "blink_perf.css/HasDescendantInvalidationWith1NonMatchingHasRule.html" }, { - "duration": "11.0", + "duration": "12.0", "name": "blink_perf.css/HasDescendantInvalidationWithMultipleNonMatchingHasRules.html" }, { - "duration": "11.0", + "duration": "13.0", "name": "blink_perf.css/HasDescendantInvalidationWithoutNonMatchingHasRule.html" }, { @@ -488,7 +504,7 @@ "name": "blink_perf.css/HasInvalidationFiltering.html" }, { - "duration": "12.0", + "duration": "13.0", "name": "blink_perf.css/HasSiblingDescendantInvalidation.html" }, { @@ -496,7 +512,7 @@ "name": "blink_perf.css/HasSiblingDescendantInvalidationAllSubjects.html" }, { - "duration": "11.0", + "duration": "12.0", "name": "blink_perf.css/HasSiblingInvalidation.html" }, { @@ -508,7 +524,7 @@ "name": "blink_perf.css/HighlightInheritanceRecalc.html" }, { - "duration": "9.0", + "duration": "10.0", "name": "blink_perf.css/HighlightInheritanceSelected.html" }, { @@ -524,7 +540,7 @@ "name": "blink_perf.css/LoadSemanticPageExample.html" }, { - "duration": "12.0", + "duration": "24.0", "name": "blink_perf.css/ModifySelectorText.html" }, { @@ -532,6 +548,18 @@ "name": "blink_perf.css/NamedContainerLookup.html" }, { + "duration": "4.0", + "name": "blink_perf.css/NestingIdentKnownProperty.html" + }, + { + "duration": "5.0", + "name": "blink_perf.css/NestingIdentLeadingBraces.html" + }, + { + "duration": "4.0", + "name": "blink_perf.css/NestingIdentNonProperty.html" + }, + { "duration": "10.0", "name": "blink_perf.css/PseudoClassSelectors.html" }, @@ -540,11 +568,11 @@ "name": "blink_perf.css/ScrollbarPseudoSelector.html" }, { - "duration": "14.0", + "duration": "13.0", "name": "blink_perf.css/SelectorCountScaling.html" }, { - "duration": "14.0", + "duration": "17.0", "name": "blink_perf.dom/custom-element-default-style-with-shadow.html" }, { @@ -552,15 +580,55 @@ "name": "blink_perf.dom/custom-element-default-style.html" }, { - "duration": "17.0", + "duration": "10.0", + "name": "blink_perf.dom/deep-tree-clonenode.html" + }, + { + "duration": "66.0", + "name": "blink_perf.dom/dom-parts-api-flat-append.html" + }, + { + "duration": "65.0", + "name": "blink_perf.dom/dom-parts-api-flat-clone.html" + }, + { + "duration": "65.0", + "name": "blink_perf.dom/dom-parts-api-flat-parts.html" + }, + { + "duration": "66.0", + "name": "blink_perf.dom/dom-parts-api-manual-append.html" + }, + { + "duration": "66.0", + "name": "blink_perf.dom/dom-parts-api-manual-clone.html" + }, + { + "duration": "66.0", + "name": "blink_perf.dom/dom-parts-api-manual-parts.html" + }, + { + "duration": "66.0", + "name": "blink_perf.dom/dom-parts-api-nested-append.html" + }, + { + "duration": "66.0", + "name": "blink_perf.dom/dom-parts-api-nested-clone.html" + }, + { + "duration": "66.0", + "name": "blink_perf.dom/dom-parts-api-nested-parts.html" + }, + { + "duration": "20.0", "name": "blink_perf.dom/insert-text-with-dir-auto.html" }, { - "duration": "11.0", + "duration": "13.0", "name": "blink_perf.dom/long-sibling-list.html" }, { - "duration": "6.0", + "duration": "5.0", "name": "blink_perf.dom/modify-element-classname.html" }, { @@ -580,15 +648,15 @@ "name": "blink_perf.dom/select-multiple-add.html" }, { - "duration": "9.0", + "duration": "19.0", "name": "blink_perf.dom/select-single-add.html" }, { - "duration": "8.0", + "duration": "10.0", "name": "blink_perf.dom/select-single-remove.html" }, { - "duration": "14.0", + "duration": "16.0", "name": "blink_perf.events/EventsDispatching.html" }, { @@ -596,19 +664,19 @@ "name": "blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html" }, { - "duration": "24.0", + "duration": "41.0", "name": "blink_perf.events/EventsDispatchingInV1ShadowTrees.html" }, { - "duration": "21.0", + "duration": "22.0", "name": "blink_perf.events/hit-test-lots-of-layers.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.events/is-input-pending-default-events.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.events/is-input-pending-include-continuous-events.html" }, { @@ -632,7 +700,7 @@ "name": "blink_perf.image_decoder/decode-jpeg-h2v2.html" }, { - "duration": "22.0", + "duration": "21.0", "name": "blink_perf.image_decoder/decode-lossless-webp.html" }, { @@ -640,22 +708,26 @@ "name": "blink_perf.image_decoder/decode-lossy-webp.html" }, { - "duration": "17.0", + "duration": "16.0", "name": "blink_perf.image_decoder/decode-png-palette-opaque.html" }, { - "duration": "12.0", + "duration": "13.0", "name": "blink_perf.image_decoder/decode-png-palette.html" }, { - "duration": "23.0", + "duration": "21.0", "name": "blink_perf.image_decoder/decode-png.html" }, { - "duration": "14.0", + "duration": "16.0", "name": "blink_perf.layout/ArabicLineLayout.html" }, { + "duration": "5.0", + "name": "blink_perf.layout/CJK-article.html" + }, + { "duration": "3.0", "name": "blink_perf.layout/Shapes/MultipleShapes.html" }, @@ -664,7 +736,7 @@ "name": "blink_perf.layout/SimpleTextPathLineLayout.html" }, { - "duration": "17.0", + "duration": "20.0", "name": "blink_perf.layout/abspos.html" }, { @@ -680,23 +752,23 @@ "name": "blink_perf.layout/attach-inlines-2.html" }, { - "duration": "9.0", + "duration": "10.0", "name": "blink_perf.layout/attach-inlines.html" }, { - "duration": "9.0", + "duration": "10.0", "name": "blink_perf.layout/auto-grid-lots-of-data.html" }, { - "duration": "9.0", + "duration": "10.0", "name": "blink_perf.layout/auto-grid-lots-of-spanning-data.html" }, { - "duration": "8.0", + "duration": "9.0", "name": "blink_perf.layout/chapter-reflow-once-random.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "blink_perf.layout/chapter-reflow-once.html" }, { @@ -704,7 +776,7 @@ "name": "blink_perf.layout/chapter-reflow-thrice.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "blink_perf.layout/chapter-reflow-twice.html" }, { @@ -720,19 +792,19 @@ "name": "blink_perf.layout/contain-content-style-change.html" }, { - "duration": "8.0", + "duration": "10.0", "name": "blink_perf.layout/css-contain-change-text-different-subtree-root.html" }, { - "duration": "8.0", + "duration": "10.0", "name": "blink_perf.layout/css-contain-change-text-without-subtree-root.html" }, { - "duration": "8.0", + "duration": "10.0", "name": "blink_perf.layout/css-contain-change-text.html" }, { - "duration": "4.0", + "duration": "5.0", "name": "blink_perf.layout/culled-inline-bounding-rects.html" }, { @@ -748,7 +820,7 @@ "name": "blink_perf.layout/editing_append.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/editing_append_single_line.html" }, { @@ -764,7 +836,7 @@ "name": "blink_perf.layout/editing_prepend.html" }, { - "duration": "14.0", + "duration": "20.0", "name": "blink_perf.layout/fit-content-change-available-size-blocks.html" }, { @@ -772,11 +844,11 @@ "name": "blink_perf.layout/fit-content-change-available-size-text.html" }, { - "duration": "9.0", + "duration": "11.0", "name": "blink_perf.layout/fixed-grid-lots-of-data.html" }, { - "duration": "9.0", + "duration": "11.0", "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html" }, { @@ -793,10 +865,14 @@ }, { "duration": "9.0", - "name": "blink_perf.layout/flexbox-hittest.html" + "name": "blink_perf.layout/flexbox-deeply-nested-with-ortho-flow.html" }, { "duration": "9.0", + "name": "blink_perf.layout/flexbox-hittest.html" + }, + { + "duration": "10.0", "name": "blink_perf.layout/flexbox-input.html" }, { @@ -804,11 +880,11 @@ "name": "blink_perf.layout/flexbox-lots-of-data.html" }, { - "duration": "16.0", + "duration": "8.0", "name": "blink_perf.layout/flexbox-nested-rows-and-columns-auto-overflow.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "blink_perf.layout/flexbox-row-nowrap.html" }, { @@ -824,11 +900,11 @@ "name": "blink_perf.layout/flexbox-row-wrap.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/flexbox-with-stretch-layout.html" }, { - "duration": "12.0", + "duration": "16.0", "name": "blink_perf.layout/flexbox_with_list_item.html" }, { @@ -844,15 +920,15 @@ "name": "blink_perf.layout/floats_10_1000.html" }, { - "duration": "6.0", + "duration": "5.0", "name": "blink_perf.layout/floats_20_100.html" }, { - "duration": "6.0", + "duration": "5.0", "name": "blink_perf.layout/floats_20_100_nested.html" }, { - "duration": "6.0", + "duration": "5.0", "name": "blink_perf.layout/floats_2_100.html" }, { @@ -860,11 +936,11 @@ "name": "blink_perf.layout/floats_2_100_nested.html" }, { - "duration": "5.0", + "duration": "4.0", "name": "blink_perf.layout/floats_50_100.html" }, { - "duration": "5.0", + "duration": "4.0", "name": "blink_perf.layout/floats_50_100_nested.html" }, { @@ -876,15 +952,15 @@ "name": "blink_perf.layout/grid-nested-baseline.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/grid-with-block-constraints-dependence.html" }, { - "duration": "12.0", + "duration": "9.0", "name": "blink_perf.layout/hindi-line-layout.html" }, { - "duration": "5.0", + "duration": "7.0", "name": "blink_perf.layout/hittest-block-children.html" }, { @@ -892,35 +968,35 @@ "name": "blink_perf.layout/hittest-nested-inline-blocks-listbased.html" }, { - "duration": "6.0", + "duration": "5.0", "name": "blink_perf.layout/japanese-kokoro-insert.html" }, { - "duration": "13.0", + "duration": "15.0", "name": "blink_perf.layout/large-grid.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/large-spanning-grid-item.html" }, { - "duration": "15.0", + "duration": "19.0", "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html" }, { - "duration": "15.0", + "duration": "19.0", "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html" }, { - "duration": "15.0", + "duration": "19.0", "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html" }, { - "duration": "11.0", + "duration": "10.0", "name": "blink_perf.layout/latin-ebook-resize.html" }, { - "duration": "7.0", + "duration": "6.0", "name": "blink_perf.layout/latin-ebook.html" }, { @@ -936,7 +1012,7 @@ "name": "blink_perf.layout/line-layout-fit-content-break-word.html" }, { - "duration": "8.0", + "duration": "7.0", "name": "blink_perf.layout/line-layout-fit-content.html" }, { @@ -948,7 +1024,7 @@ "name": "blink_perf.layout/line-layout-repeat-append-select.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/line-layout-repeat-append.html" }, { @@ -976,7 +1052,7 @@ "name": "blink_perf.layout/many-block-children-fixed-inline-size.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/many-block-children-rebuild-box-tree.html" }, { @@ -984,15 +1060,19 @@ "name": "blink_perf.layout/multicol/balance-forced-breaks.html" }, { - "duration": "18.0", + "duration": "8.0", "name": "blink_perf.layout/multicol/balance-list-items-with-tall-marker.html" }, { "duration": "9.0", + "name": "blink_perf.layout/multicol/balance-tables-with-break-inside-avoidance.html" + }, + { + "duration": "9.0", "name": "blink_perf.layout/multicol/deeply-nested-tables-2.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/multicol/deeply-nested-tables.html" }, { @@ -1000,15 +1080,19 @@ "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html" }, { + "duration": "10.0", + "name": "blink_perf.layout/multicol/large-inline-formatting-context.html" + }, + { "duration": "9.0", "name": "blink_perf.layout/multicol/lots-of-small-nested-unbreakable-blocks-autofill.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-autofill.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "blink_perf.layout/multicol/lots-of-small-unbreakable-blocks-balanced.html" }, { @@ -1028,7 +1112,7 @@ "name": "blink_perf.layout/multicol/nested-forced-breaks.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html" }, { @@ -1044,7 +1128,7 @@ "name": "blink_perf.layout/nested-grid-lots-of-tracks.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.layout/nested-grid.html" }, { @@ -1056,11 +1140,11 @@ "name": "blink_perf.layout/nested-tables-with-overflow-auto.html" }, { - "duration": "15.0", + "duration": "18.0", "name": "blink_perf.layout/ruby.html" }, { - "duration": "73.0", + "duration": "22.0", "name": "blink_perf.layout/subtree-detaching.html" }, { @@ -1072,7 +1156,7 @@ "name": "blink_perf.layout/text-wrap-balance.html" }, { - "duration": "7.0", + "duration": "6.0", "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html" }, { @@ -1104,31 +1188,31 @@ "name": "blink_perf.owp_storage/blob-perf-tiny.html" }, { - "duration": "14.0", + "duration": "13.0", "name": "blink_perf.owp_storage/idb-load-docs.html" }, { - "duration": "14.0", + "duration": "15.0", "name": "blink_perf.parser/css-parser-yui.html" }, { - "duration": "17.0", + "duration": "18.0", "name": "blink_perf.parser/declarative-shadow-dom-cloning.html" }, { - "duration": "10.0", + "duration": "1.0", "name": "blink_perf.parser/declarative-shadow-dom.html" }, { - "duration": "8.0", + "duration": "11.0", "name": "blink_perf.parser/html-parser.html" }, { - "duration": "42.0", + "duration": "51.0", "name": "blink_perf.parser/html5-full-render.html" }, { - "duration": "16.0", + "duration": "15.0", "name": "blink_perf.parser/iframe-append-remove.html" }, { @@ -1156,11 +1240,11 @@ "name": "blink_perf.parser/query-selector-all-class-first.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.parser/query-selector-all-class-last.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.parser/query-selector-all-class.html" }, { @@ -1172,7 +1256,7 @@ "name": "blink_perf.parser/query-selector-all-first.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "blink_perf.parser/query-selector-all-id-deep.html" }, { @@ -1180,7 +1264,7 @@ "name": "blink_perf.parser/query-selector-all-id-first.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "blink_perf.parser/query-selector-all-id-last.html" }, { @@ -1192,11 +1276,11 @@ "name": "blink_perf.parser/query-selector-deep.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.parser/query-selector-first.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.parser/query-selector-id-deep.html" }, { @@ -1208,15 +1292,15 @@ "name": "blink_perf.parser/query-selector-last.html" }, { - "duration": "8.0", + "duration": "10.0", "name": "blink_perf.parser/simple-url.html" }, { - "duration": "10.0", + "duration": "11.0", "name": "blink_perf.parser/textarea-parsing.html" }, { - "duration": "9.0", + "duration": "8.0", "name": "blink_perf.parser/tiny-innerHTML.html" }, { @@ -1224,11 +1308,11 @@ "name": "blink_perf.parser/url-parser.html" }, { - "duration": "9.0", + "duration": "10.0", "name": "blink_perf.parser/xml-parser.html" }, { - "duration": "8.0", + "duration": "10.0", "name": "blink_perf.shadow_dom/declarative-api.html" }, { @@ -1272,19 +1356,19 @@ "name": "blink_perf.shadow_dom/imperative-api.html" }, { - "duration": "258.0", + "duration": "1.0", "name": "blink_perf.shadow_dom/imperative-shadow-dom-overhead.html" }, { - "duration": "221.0", + "duration": "1.0", "name": "blink_perf.shadow_dom/shadow-dom-overhead-iframe.html" }, { - "duration": "62.0", + "duration": "1.0", "name": "blink_perf.shadow_dom/shadow-dom-overhead.html" }, { - "duration": "4.0", + "duration": "13.0", "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html" }, { @@ -1304,11 +1388,11 @@ "name": "blink_perf.shadow_dom/style-sheet-insert.html" }, { - "duration": "33.0", + "duration": "39.0", "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html" }, { - "duration": "11.0", + "duration": "3.0", "name": "blink_perf.shadow_dom/v1-distribution.html" }, { @@ -1316,7 +1400,7 @@ "name": "blink_perf.shadow_dom/v1-host-child-append.html" }, { - "duration": "10.0", + "duration": "11.0", "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html" }, { @@ -1384,11 +1468,11 @@ "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html" }, { - "duration": "21.0", + "duration": "22.0", "name": "blink_perf.webaudio/audio-buffer-source-node.html" }, { - "duration": "102.0", + "duration": "101.0", "name": "blink_perf.webaudio/audio-worklet-node.html" }, { @@ -1396,15 +1480,15 @@ "name": "blink_perf.webaudio/biquad-filter-node.html" }, { - "duration": "82.0", + "duration": "89.0", "name": "blink_perf.webaudio/dynamics-compressor-node-knee.html" }, { - "duration": "84.0", + "duration": "92.0", "name": "blink_perf.webaudio/dynamics-compressor-node-post-knee.html" }, { - "duration": "82.0", + "duration": "89.0", "name": "blink_perf.webaudio/dynamics-compressor-node-pre-knee.html" }, { @@ -1412,7 +1496,7 @@ "name": "blink_perf.webaudio/gain-node.html" }, { - "duration": "39.0", + "duration": "37.0", "name": "blink_perf.webaudio/panner-node.html" }, { @@ -1420,11 +1504,11 @@ "name": "blink_perf.webaudio/timeline-insert-event.html" }, { - "duration": "14.0", + "duration": "15.0", "name": "blink_perf.webcodecs/hardware-video-encoding.html" }, { - "duration": "7.0", + "duration": "6.0", "name": "blink_perf.webcodecs/software-video-encoding.html" }, { @@ -1440,11 +1524,11 @@ "name": "blink_perf.webcodecs/videoFrame-copyTo-videoDecoder.html" }, { - "duration": "2.0", + "duration": "3.0", "name": "blink_perf.webcodecs/videoFrame-createImageBitmap-canvas.html" }, { - "duration": "2.0", + "duration": "3.0", "name": "blink_perf.webcodecs/videoFrame-createImageBitmap-imageDecoder.html" }, { @@ -1464,11 +1548,11 @@ "name": "blink_perf.webcodecs/videoFrame-texImage2d.html" }, { - "duration": "10.0", + "duration": "11.0", "name": "blink_perf.webgl/binding-bind-buffer.html" }, { - "duration": "5.0", + "duration": "4.0", "name": "blink_perf.webgl/binding-buffer-sub-data.html" }, { @@ -1484,7 +1568,7 @@ "name": "blink_perf.webgl_fast_call/binding-bind-buffer.html" }, { - "duration": "5.0", + "duration": "4.0", "name": "blink_perf.webgl_fast_call/binding-buffer-sub-data.html" }, { @@ -1496,231 +1580,211 @@ "name": "blink_perf.webgl_fast_call/binding-typed-array-uniforms.html" }, { - "duration": "9.0", + "duration": "11.0", "name": "blink_perf.webgpu/binding-draw.html" }, { - "duration": "9.0", + "duration": "11.0", "name": "blink_perf.webgpu_fast_call/binding-draw.html" }, { - "duration": "30.0", + "duration": "23.0", "name": "desktop_ui/new_tab_page:loading" }, { - "duration": "26.0", + "duration": "21.0", "name": "desktop_ui/omnibox:pedal" }, { - "duration": "24.0", + "duration": "17.0", "name": "desktop_ui/omnibox:scoped_search" }, { - "duration": "23.0", + "duration": "16.0", "name": "desktop_ui/omnibox:search" }, { - "duration": "0.0", + "duration": "9.0", "name": "desktop_ui/side_search:measure_memory" }, { - "duration": "0.0", + "duration": "9.0", "name": "desktop_ui/side_search:navigation" }, { - "duration": "282.0", - "name": "desktop_ui/tab_search:100_recently_closed" - }, - { - "duration": "47.0", - "name": "desktop_ui/tab_search:10_recently_closed" - }, - { - "duration": "152.0", - "name": "desktop_ui/tab_search:50_recently_closed" - }, - { - "duration": "20.0", + "duration": "12.0", "name": "desktop_ui/tab_search:clean_slate" }, { - "duration": "57.0", + "duration": "54.0", "name": "desktop_ui/tab_search:close_and_open:2020" }, { - "duration": "16.0", + "duration": "9.0", "name": "desktop_ui/tab_search:close_and_open:loading:2020" }, { - "duration": "28.0", + "duration": "20.0", "name": "desktop_ui/tab_search:measure_memory:2tab_search" }, { - "duration": "28.0", + "duration": "21.0", "name": "desktop_ui/tab_search:measure_memory:3tab_search" }, { - "duration": "27.0", + "duration": "20.0", "name": "desktop_ui/tab_search:measure_memory:after" }, { - "duration": "28.0", + "duration": "21.0", "name": "desktop_ui/tab_search:measure_memory:before" }, { - "duration": "32.0", + "duration": "24.0", "name": "desktop_ui/tab_search:measure_memory:multiwindow" }, { - "duration": "94.0", + "duration": "9.0", "name": "desktop_ui/tab_search:scroll_up_and_down:2020" }, { - "duration": "65.0", - "name": "desktop_ui/tab_search:top10:2020" - }, - { - "duration": "40.0", - "name": "desktop_ui/tab_search:top10:loading:2020" - }, - { - "duration": "16.0", + "duration": "13.0", "name": "desktop_ui/tab_search:top50:2020" }, { - "duration": "99.0", + "duration": "9.0", "name": "desktop_ui/tab_search:top50:loading:2020" }, { - "duration": "25.0", + "duration": "9.0", "name": "desktop_ui/webui_tab_strip:clean_slate" }, { - "duration": "27.0", + "duration": "20.0", "name": "desktop_ui/webui_tab_strip:measure_memory" }, { - "duration": "29.0", + "duration": "21.0", "name": "desktop_ui/webui_tab_strip:measure_memory:2window" }, { - "duration": "59.0", + "duration": "49.0", "name": "desktop_ui/webui_tab_strip:top10:2020" }, { - "duration": "61.0", + "duration": "9.0", "name": "desktop_ui/webui_tab_strip:top10:loading:2020" }, { - "duration": "14.0", + "duration": "4.0", "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html" }, { - "duration": "12.0", + "duration": "4.0", "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html" }, { - "duration": "313.0", + "duration": "253.0", "name": "jetstream2/JetStream2" }, { - "duration": "21.0", + "duration": "20.0", "name": "media.desktop/mse.html?media=aac_audio.mp4" }, { - "duration": "22.0", + "duration": "20.0", "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4" }, { - "duration": "21.0", + "duration": "22.0", "name": "media.desktop/mse.html?media=h264_video.mp4" }, { - "duration": "20.0", + "duration": "18.0", "name": "media.desktop/mse.html?media=tulip0.av1.mp4" }, { - "duration": "21.0", + "duration": "20.0", "name": "media.desktop/mse.html?media=tulip2.vp9.webm" }, { - "duration": "141.0", + "duration": "12.0", "name": "media.desktop/video.html?src=boat_1080p60fps_vp9.webm" }, { - "duration": "28.0", + "duration": "26.0", "name": "media.desktop/video.html?src=crowd1080.mp4" }, { - "duration": "28.0", + "duration": "27.0", "name": "media.desktop/video.html?src=crowd1080.webm" }, { - "duration": "27.0", + "duration": "25.0", "name": "media.desktop/video.html?src=crowd1080_vp9.webm" }, { - "duration": "139.0", + "duration": "140.0", "name": "media.desktop/video.html?src=foodmarket_720p30fps.mp4" }, { - "duration": "13.0", + "duration": "12.0", "name": "media.desktop/video.html?src=garden2_10s.mp4&seek" }, { - "duration": "13.0", + "duration": "12.0", "name": "media.desktop/video.html?src=garden2_10s.webm&seek" }, { - "duration": "13.0", + "duration": "12.0", "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek" }, { - "duration": "13.0", + "duration": "12.0", "name": "media.desktop/video.html?src=tulip0.av1.mp4" }, { - "duration": "18.0", + "duration": "17.0", "name": "media.desktop/video.html?src=tulip0.av1.mp4&seek" }, { - "duration": "33.0", + "duration": "32.0", "name": "media.desktop/video.html?src=tulip2.m4a&type=audio" }, { - "duration": "33.0", + "duration": "32.0", "name": "media.desktop/video.html?src=tulip2.mp3&type=audio" }, { - "duration": "17.0", + "duration": "16.0", "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek" }, { - "duration": "33.0", + "duration": "32.0", "name": "media.desktop/video.html?src=tulip2.mp4" }, { - "duration": "75.0", + "duration": "74.0", "name": "media.desktop/video.html?src=tulip2.mp4&busyjs" }, { - "duration": "33.0", + "duration": "32.0", "name": "media.desktop/video.html?src=tulip2.ogg&type=audio" }, { - "duration": "17.0", + "duration": "16.0", "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek" }, { - "duration": "33.0", + "duration": "32.0", "name": "media.desktop/video.html?src=tulip2.vp9.webm" }, { - "duration": "27.0", + "duration": "26.0", "name": "media.desktop/video.html?src=tulip2.vp9.webm&background" }, { - "duration": "33.0", + "duration": "32.0", "name": "media.desktop/video.html?src=tulip2.vp9.webm_WiFi" }, { @@ -1748,7 +1812,7 @@ "name": "memory.desktop/TrivialGifPageSharedPageState" }, { - "duration": "24.0", + "duration": "25.0", "name": "memory.desktop/TrivialScrollingPageSharedPageState" }, { @@ -1756,27 +1820,27 @@ "name": "memory.desktop/TrivialWebGLPageSharedPageState" }, { - "duration": "56.0", + "duration": "52.0", "name": "memory.desktop/WebWorker" }, { - "duration": "44.0", + "duration": "45.0", "name": "octane/Octane" }, { - "duration": "46.0", + "duration": "47.0", "name": "power.desktop/TrivialAnimationPageSharedPageState" }, { - "duration": "48.0", + "duration": "46.0", "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState" }, { - "duration": "50.0", + "duration": "47.0", "name": "power.desktop/TrivialBlurAnimationPageSharedPageState" }, { - "duration": "48.0", + "duration": "47.0", "name": "power.desktop/TrivialCanvasPageSharedPageState" }, { @@ -1784,47 +1848,47 @@ "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState" }, { - "duration": "46.0", + "duration": "47.0", "name": "power.desktop/TrivialGifPageSharedPageState" }, { - "duration": "51.0", + "duration": "49.0", "name": "power.desktop/TrivialScrollingPageSharedPageState" }, { - "duration": "48.0", + "duration": "47.0", "name": "power.desktop/TrivialWebGLPageSharedPageState" }, { - "duration": "13.0", + "duration": "14.0", "name": "power.desktop/abcnews" }, { - "duration": "47.0", + "duration": "49.0", "name": "power.desktop/indiatimes" }, { - "duration": "47.0", + "duration": "48.0", "name": "power.desktop/instagram" }, { - "duration": "47.0", + "duration": "49.0", "name": "power.desktop/microsoft" }, { - "duration": "47.0", + "duration": "61.0", "name": "power.desktop/sina" }, { - "duration": "56.0", + "duration": "51.0", "name": "power.desktop/slideshare" }, { - "duration": "47.0", + "duration": "49.0", "name": "power.desktop/uol" }, { - "duration": "28.0", + "duration": "26.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html" }, { @@ -1832,7 +1896,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html" }, { - "duration": "13.0", + "duration": "14.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html" }, { @@ -1840,7 +1904,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html" }, { - "duration": "10.0", + "duration": "12.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html" }, { @@ -1856,7 +1920,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html" }, { - "duration": "10.0", + "duration": "9.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html" }, { @@ -1872,7 +1936,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html" }, { - "duration": "25.0", + "duration": "24.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html" }, { @@ -1880,7 +1944,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html" }, { - "duration": "7.0", + "duration": "8.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html" }, { @@ -1888,7 +1952,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html" }, { - "duration": "20.0", + "duration": "22.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html" }, { @@ -1900,7 +1964,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html" }, { - "duration": "16.0", + "duration": "25.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html" }, { @@ -1916,7 +1980,7 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html" }, { - "duration": "30.0", + "duration": "29.0", "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html" }, { @@ -1924,275 +1988,275 @@ "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html" }, { - "duration": "339.0", + "duration": "334.0", "name": "rendering.desktop.notracing/motionmark_ramp_composite" }, { - "duration": "44.0", + "duration": "41.0", "name": "rendering.desktop/accu_weather_2018" }, { - "duration": "42.0", + "duration": "18.0", "name": "rendering.desktop/accu_weather_pinch_2018" }, { - "duration": "34.0", + "duration": "32.0", "name": "rendering.desktop/amazon_2018" }, { - "duration": "30.0", + "duration": "32.0", "name": "rendering.desktop/amazon_pinch_2018" }, { - "duration": "33.0", + "duration": "31.0", "name": "rendering.desktop/analog_clock_svg" }, { - "duration": "39.0", + "duration": "36.0", "name": "rendering.desktop/animometer_webgl" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/animometer_webgl_attrib_arrays" }, { - "duration": "38.0", + "duration": "18.0", "name": "rendering.desktop/animometer_webgl_fast_call" }, { - "duration": "38.0", + "duration": "35.0", "name": "rendering.desktop/animometer_webgl_indexed" }, { - "duration": "38.0", + "duration": "35.0", "name": "rendering.desktop/animometer_webgl_indexed_fast_call" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/animometer_webgl_indexed_multi_draw" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/animometer_webgl_indexed_multi_draw_base_vertex_base_instance" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/animometer_webgl_multi_draw" }, { - "duration": "40.0", + "duration": "38.0", "name": "rendering.desktop/aquarium" }, { - "duration": "42.0", + "duration": "39.0", "name": "rendering.desktop/aquarium_20k" }, { - "duration": "42.0", + "duration": "39.0", "name": "rendering.desktop/aquarium_20k_fast_call" }, { - "duration": "36.0", + "duration": "32.0", "name": "rendering.desktop/background_color_animation" }, { - "duration": "33.0", + "duration": "31.0", "name": "rendering.desktop/background_color_animation_with_gradient" }, { - "duration": "36.0", + "duration": "33.0", "name": "rendering.desktop/balls_css_key_frame_animations" }, { - "duration": "36.0", + "duration": "33.0", "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform" }, { - "duration": "35.0", + "duration": "33.0", "name": "rendering.desktop/balls_css_transition_2_properties" }, { - "duration": "35.0", + "duration": "33.0", "name": "rendering.desktop/balls_css_transition_40_properties" }, { - "duration": "35.0", + "duration": "33.0", "name": "rendering.desktop/balls_css_transition_all_properties" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/balls_javascript_canvas" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/balls_javascript_css" }, { - "duration": "35.0", + "duration": "33.0", "name": "rendering.desktop/balls_svg_animations" }, { - "duration": "37.0", + "duration": "34.0", "name": "rendering.desktop/blob" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/blogspot_2018" }, { - "duration": "31.0", + "duration": "28.0", "name": "rendering.desktop/blogspot_pinch_2018" }, { - "duration": "26.0", + "duration": "24.0", "name": "rendering.desktop/blur_rotating_background" }, { - "duration": "31.0", + "duration": "28.0", "name": "rendering.desktop/booking.com_2018" }, { - "duration": "30.0", + "duration": "27.0", "name": "rendering.desktop/booking_pinch_2018" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/bouncing_balls_15" }, { - "duration": "33.0", + "duration": "31.0", "name": "rendering.desktop/bouncing_balls_shadow" }, { - "duration": "34.0", + "duration": "31.0", "name": "rendering.desktop/bouncing_clipped_rectangles" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/bouncing_gradient_circles" }, { - "duration": "33.0", + "duration": "32.0", "name": "rendering.desktop/bouncing_png_images" }, { - "duration": "29.0", + "duration": "31.0", "name": "rendering.desktop/bouncing_svg_images" }, { - "duration": "15.0", + "duration": "18.0", "name": "rendering.desktop/camera_to_webgl" }, { - "duration": "30.0", + "duration": "32.0", "name": "rendering.desktop/canvas2d_to_texture.html" }, { - "duration": "44.0", + "duration": "41.0", "name": "rendering.desktop/canvas_05000_pixels_per_second" }, { - "duration": "42.0", + "duration": "39.0", "name": "rendering.desktop/canvas_10000_pixels_per_second" }, { - "duration": "40.0", + "duration": "38.0", "name": "rendering.desktop/canvas_20000_pixels_per_second" }, { - "duration": "40.0", + "duration": "37.0", "name": "rendering.desktop/canvas_40000_pixels_per_second" }, { - "duration": "41.0", + "duration": "37.0", "name": "rendering.desktop/canvas_60000_pixels_per_second" }, { - "duration": "40.0", + "duration": "36.0", "name": "rendering.desktop/canvas_75000_pixels_per_second" }, { - "duration": "41.0", + "duration": "45.0", "name": "rendering.desktop/canvas_90000_pixels_per_second" }, { - "duration": "31.0", + "duration": "33.0", "name": "rendering.desktop/canvas_animation_no_clear" }, { - "duration": "28.0", + "duration": "30.0", "name": "rendering.desktop/canvas_arcs" }, { - "duration": "30.0", + "duration": "32.0", "name": "rendering.desktop/canvas_font_cycler" }, { - "duration": "28.0", + "duration": "32.0", "name": "rendering.desktop/canvas_globalAlpha" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/canvas_lines" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/canvas_to_blob" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/canvas_to_canvas_draw" }, { - "duration": "31.0", + "duration": "33.0", "name": "rendering.desktop/cc_poster_circle" }, { - "duration": "25.0", + "duration": "27.0", "name": "rendering.desktop/cc_scroll_text_only" }, { - "duration": "33.0", + "duration": "34.0", "name": "rendering.desktop/chip_tune" }, { - "duration": "39.0", + "duration": "31.0", "name": "rendering.desktop/cnn_2018" }, { - "duration": "15.0", + "duration": "16.0", "name": "rendering.desktop/cnn_pinch_2018" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/compositor_heavy_animation" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/crafty_mind" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/css_animations_many_keyframes" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_animations_simultaneous_inline_style" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_animations_simultaneous_new_element" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_animations_simultaneous_style_element" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_animations_simultaneous_updating_class" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_animations_staggered_infinite_iterations" }, { @@ -2208,135 +2272,135 @@ "name": "rendering.desktop/css_animations_staggered_style_element" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/css_animations_staggered_updating_class" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/css_animations_triggered_inline_style" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/css_animations_triggered_new_element" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_animations_triggered_style_element" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/css_animations_triggered_updating_class" }, { - "duration": "31.0", + "duration": "33.0", "name": "rendering.desktop/css_opacity_plus_n_layers_99" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_transitions_inline_style" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_transitions_new_element" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_staggered_inline_style" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_staggered_new_element" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_staggered_style_element" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_staggered_updating_class" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_transitions_style_element" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_triggered_inline_style" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_triggered_new_element" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_triggered_style_element" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_transitions_triggered_updating_class" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_transitions_updating_class" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_value_type_color" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_value_type_filter" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_value_type_length" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_value_type_length_complex" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_value_type_length_simple" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/css_value_type_path" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_value_type_shadow" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_value_type_transform_complex" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/css_value_type_transform_simple" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/docs_paper.html" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/docs_resume.html" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/docs_table.html" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/draw_image" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/draw_image_not_pixel_aligned" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/dynamic_canvas_to_hw_accelerated_canvas.html" }, { @@ -2344,31 +2408,31 @@ "name": "rendering.desktop/dynamic_cube_map" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/dynamic_webgl_to_hw_accelerated_canvas.html" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/earth" }, { - "duration": "25.0", + "duration": "35.0", "name": "rendering.desktop/ebay_2018" }, { - "duration": "33.0", + "duration": "34.0", "name": "rendering.desktop/ebay_pinch_2018" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/effect_games" }, { - "duration": "15.0", + "duration": "16.0", "name": "rendering.desktop/espn_2018" }, { - "duration": "15.0", + "duration": "16.0", "name": "rendering.desktop/espn_pinch_2018" }, { @@ -2384,23 +2448,23 @@ "name": "rendering.desktop/facebook_pinch_2018" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/falling_particle_simulation_cpu.html" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/falling_particle_simulation_gpu.html" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/fill_clear_rect.html" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/fill_shapes" }, { - "duration": "31.0", + "duration": "29.0", "name": "rendering.desktop/filter_terrain_svg" }, { @@ -2412,7 +2476,7 @@ "name": "rendering.desktop/get_image_data_gpu.html" }, { - "duration": "40.0", + "duration": "31.0", "name": "rendering.desktop/gmail_2018" }, { @@ -2420,15 +2484,15 @@ "name": "rendering.desktop/gmail_move_2018" }, { - "duration": "32.0", + "duration": "33.0", "name": "rendering.desktop/gmail_pinch_2018" }, { - "duration": "22.0", + "duration": "35.0", "name": "rendering.desktop/google_calendar_2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "rendering.desktop/google_calendar_pinch_2018" }, { @@ -2436,19 +2500,19 @@ "name": "rendering.desktop/google_docs_2018" }, { - "duration": "25.0", + "duration": "26.0", "name": "rendering.desktop/google_image_pinch_2018" }, { - "duration": "25.0", + "duration": "26.0", "name": "rendering.desktop/google_image_search_2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "rendering.desktop/google_plus_2018" }, { - "duration": "25.0", + "duration": "26.0", "name": "rendering.desktop/google_search_pinch_2018" }, { @@ -2456,7 +2520,7 @@ "name": "rendering.desktop/google_web_search_2018" }, { - "duration": "29.0", + "duration": "34.0", "name": "rendering.desktop/gpu_bound_shader.html" }, { @@ -2464,79 +2528,79 @@ "name": "rendering.desktop/guimark_vector_chart" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/hakim" }, { - "duration": "29.0", + "duration": "31.0", "name": "rendering.desktop/hw_accelerated_canvas_to_sw_canvas.html" }, { - "duration": "39.0", + "duration": "40.0", "name": "rendering.desktop/ie_chalkboard" }, { - "duration": "37.0", + "duration": "34.0", "name": "rendering.desktop/ie_pirate_mark" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/infinite_scroll_element_n_layers_99" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/infinite_scroll_root_fixed_n_layers_99" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/infinite_scroll_root_n_layers_99" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/jarro_doverson" }, { - "duration": "23.0", + "duration": "24.0", "name": "rendering.desktop/jpeg_decoding_rgb_and_gpu_rasterization" }, { - "duration": "23.0", + "duration": "24.0", "name": "rendering.desktop/jpeg_decoding_yuv_and_gpu_rasterization" }, { - "duration": "33.0", + "duration": "34.0", "name": "rendering.desktop/js_full_screen_invalidation" }, { - "duration": "33.0", + "duration": "34.0", "name": "rendering.desktop/js_opacity_plus_n_layers_99" }, { - "duration": "32.0", + "duration": "33.0", "name": "rendering.desktop/js_paint_plus_n_layers_99" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/js_poster_circle" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/js_scroll_text_only" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/kevs_3d" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/keyframed_animations" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/large_texture_uploads" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/linkedin_2018" }, { @@ -2544,7 +2608,7 @@ "name": "rendering.desktop/linkedin_pinch_2018" }, { - "duration": "70.0", + "duration": "71.0", "name": "rendering.desktop/lost_crypt" }, { @@ -2552,11 +2616,11 @@ "name": "rendering.desktop/lost_crypt_fast_call" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/main_0fps_impl_60fps" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/main_0fps_impl_60fps_no_update" }, { @@ -2564,71 +2628,71 @@ "name": "rendering.desktop/main_0fps_impl_60fps_no_update_jank" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/main_0fps_with_jank_impl_0fps" }, { - "duration": "28.0", + "duration": "30.0", "name": "rendering.desktop/main_15fps_impl_0fps" }, { - "duration": "30.0", + "duration": "32.0", "name": "rendering.desktop/main_15fps_with_jank_impl_0fps" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/main_30fps_impl_0fps" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/main_30fps_impl_60fps" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/main_60fps_impl_0fps" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/main_60fps_impl_60fps" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/main_60fps_impl_60fps_no_update" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/main_60fps_impl_60fps_no_update_jank" }, { - "duration": "46.0", + "duration": "47.0", "name": "rendering.desktop/main_60fps_with_extreme_jank_impl_0fps" }, { - "duration": "30.0", + "duration": "32.0", "name": "rendering.desktop/main_60fps_with_jank_and_delay_impl_60fps" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/main_60fps_with_jank_impl_0fps" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/main_animations_half_presented" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/man_in_blue" }, { - "duration": "32.0", + "duration": "33.0", "name": "rendering.desktop/many_images" }, { - "duration": "32.0", + "duration": "33.0", "name": "rendering.desktop/many_planets_deep" }, { - "duration": "16.0", + "duration": "17.0", "name": "rendering.desktop/maps_move_2018" }, { @@ -2636,11 +2700,11 @@ "name": "rendering.desktop/maps_perf_test" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/medium_texture_uploads" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/megi_dish" }, { @@ -2652,43 +2716,43 @@ "name": "rendering.desktop/microgame_fps_fast_call" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/microsoft_asteroid_belt" }, { - "duration": "32.0", + "duration": "34.0", "name": "rendering.desktop/microsoft_fireflies" }, { - "duration": "30.0", + "duration": "31.0", "name": "rendering.desktop/microsoft_fish_ie_tank" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/microsoft_performance" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/microsoft_snow" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/microsoft_speed_reading" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/microsoft_tweet_map" }, { - "duration": "33.0", + "duration": "34.0", "name": "rendering.desktop/microsoft_video_city" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/microsoft_worker_fountains" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/mix_10k" }, { @@ -2696,339 +2760,339 @@ "name": "rendering.desktop/mix_blend_mode_animation_difference" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/mix_blend_mode_animation_hue" }, { - "duration": "29.0", + "duration": "31.0", "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation" }, { - "duration": "28.0", + "duration": "29.0", "name": "rendering.desktop/mix_blend_mode_animation_screen" }, { - "duration": "29.0", + "duration": "31.0", "name": "rendering.desktop/motion_mark_canvas_fill_shapes" }, { - "duration": "29.0", + "duration": "30.0", "name": "rendering.desktop/motion_mark_canvas_stroke_shapes" }, { - "duration": "16.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_canvas_arcs" }, { - "duration": "16.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_canvas_lines" }, { - "duration": "16.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_design" }, { - "duration": "16.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_images" }, { - "duration": "21.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_leaves" }, { - "duration": "21.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_multiply" }, { - "duration": "21.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_paths" }, { - "duration": "21.0", + "duration": "18.0", "name": "rendering.desktop/motionmark_fixed_2_seconds_suits" }, { - "duration": "57.0", + "duration": "53.0", "name": "rendering.desktop/motionmark_ramp_canvas_arcs" }, { - "duration": "53.0", + "duration": "51.0", "name": "rendering.desktop/motionmark_ramp_canvas_lines" }, { - "duration": "51.0", + "duration": "48.0", "name": "rendering.desktop/motionmark_ramp_design" }, { - "duration": "51.0", + "duration": "48.0", "name": "rendering.desktop/motionmark_ramp_images" }, { - "duration": "53.0", + "duration": "49.0", "name": "rendering.desktop/motionmark_ramp_leaves" }, { - "duration": "54.0", + "duration": "51.0", "name": "rendering.desktop/motionmark_ramp_multiply" }, { - "duration": "52.0", + "duration": "49.0", "name": "rendering.desktop/motionmark_ramp_paths" }, { - "duration": "51.0", + "duration": "49.0", "name": "rendering.desktop/motionmark_ramp_suits" }, { - "duration": "37.0", + "duration": "33.0", "name": "rendering.desktop/new_tilings" }, { - "duration": "37.0", + "duration": "33.0", "name": "rendering.desktop/no_update_compositor_animation_with_janky_main_animation" }, { - "duration": "43.0", + "duration": "40.0", "name": "rendering.desktop/non_opaque_background_compositor_thread_scrolling_00050_pixels_per_second" }, { - "duration": "43.0", + "duration": "40.0", "name": "rendering.desktop/non_opaque_background_main_thread_scrolling_00050_pixels_per_second" }, { - "duration": "39.0", + "duration": "35.0", "name": "rendering.desktop/nvidia_vertex_buffer_object" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/off_screen_main_60fps" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/off_screen_main_60fps_jank" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/offscreen_animation_no_damage" }, { - "duration": "36.0", + "duration": "33.0", "name": "rendering.desktop/overlay_background_color_css_transitions_page" }, { - "duration": "34.0", + "duration": "30.0", "name": "rendering.desktop/paint_worklet" }, { - "duration": "36.0", + "duration": "33.0", "name": "rendering.desktop/particles" }, { - "duration": "36.0", + "duration": "33.0", "name": "rendering.desktop/pinterest_2018" }, { - "duration": "36.0", + "duration": "33.0", "name": "rendering.desktop/put_and_create_imagebitmap_from_imagedata" }, { - "duration": "36.0", + "duration": "32.0", "name": "rendering.desktop/put_get_image_data" }, { - "duration": "35.0", + "duration": "32.0", "name": "rendering.desktop/put_image_data.html" }, { - "duration": "31.0", + "duration": "27.0", "name": "rendering.desktop/raf" }, { - "duration": "31.0", + "duration": "27.0", "name": "rendering.desktop/raf_animation" }, { - "duration": "31.0", + "duration": "27.0", "name": "rendering.desktop/raf_canvas" }, { - "duration": "32.0", + "duration": "29.0", "name": "rendering.desktop/raf_touch_animation" }, { - "duration": "32.0", + "duration": "28.0", "name": "rendering.desktop/repaint_amazon_2018" }, { - "duration": "30.0", + "duration": "27.0", "name": "rendering.desktop/repaint_cnn_2018" }, { - "duration": "29.0", + "duration": "26.0", "name": "rendering.desktop/repaint_facebook_2018" }, { - "duration": "29.0", + "duration": "26.0", "name": "rendering.desktop/repaint_google_search_2018" }, { - "duration": "29.0", + "duration": "26.0", "name": "rendering.desktop/repaint_instagram_2018" }, { - "duration": "29.0", + "duration": "26.0", "name": "rendering.desktop/repaint_reddit_2018" }, { - "duration": "29.0", + "duration": "26.0", "name": "rendering.desktop/repaint_theverge_2018" }, { - "duration": "29.0", + "duration": "26.0", "name": "rendering.desktop/repaint_twitter_2018" }, { - "duration": "29.0", + "duration": "25.0", "name": "rendering.desktop/repaint_wikipedia_2018" }, { - "duration": "29.0", + "duration": "26.0", "name": "rendering.desktop/repaint_yahoo_homepage_2018" }, { - "duration": "36.0", + "duration": "32.0", "name": "rendering.desktop/runway_2019" }, { - "duration": "38.0", + "duration": "34.0", "name": "rendering.desktop/san_angeles" }, { - "duration": "23.0", + "duration": "27.0", "name": "rendering.desktop/second_batch_js_heavy" }, { - "duration": "23.0", + "duration": "27.0", "name": "rendering.desktop/second_batch_js_light" }, { - "duration": "23.0", + "duration": "27.0", "name": "rendering.desktop/second_batch_js_medium" }, { - "duration": "33.0", + "duration": "37.0", "name": "rendering.desktop/sheets_render.html" }, { - "duration": "28.0", + "duration": "32.0", "name": "rendering.desktop/simple_text_page" }, { - "duration": "24.0", + "duration": "28.0", "name": "rendering.desktop/simple_touch_drag" }, { - "duration": "74.0", + "duration": "77.0", "name": "rendering.desktop/skelebuddies_wasm_2020" }, { - "duration": "67.0", + "duration": "70.0", "name": "rendering.desktop/skelebuddies_wasm_2020_fast_call" }, { - "duration": "31.0", + "duration": "35.0", "name": "rendering.desktop/small_texture_uploads" }, { - "duration": "36.0", + "duration": "40.0", "name": "rendering.desktop/smash_cat" }, { - "duration": "31.0", + "duration": "35.0", "name": "rendering.desktop/spielzeugz" }, { - "duration": "32.0", + "duration": "35.0", "name": "rendering.desktop/static_canvas_to_hw_accelerated_canvas.html" }, { - "duration": "32.0", + "duration": "35.0", "name": "rendering.desktop/static_webgl_to_hw_accelerated_canvas.html" }, { - "duration": "31.0", + "duration": "35.0", "name": "rendering.desktop/stroke_shapes" }, { - "duration": "27.0", + "duration": "31.0", "name": "rendering.desktop/sync_scroll_offset" }, { - "duration": "42.0", + "duration": "45.0", "name": "rendering.desktop/techcrunch_2018" }, { - "duration": "43.0", + "duration": "46.0", "name": "rendering.desktop/text_05000_pixels_per_second" }, { - "duration": "42.0", + "duration": "43.0", "name": "rendering.desktop/text_10000_pixels_per_second" }, { - "duration": "39.0", + "duration": "42.0", "name": "rendering.desktop/text_20000_pixels_per_second" }, { - "duration": "40.0", + "duration": "41.0", "name": "rendering.desktop/text_40000_pixels_per_second" }, { - "duration": "40.0", + "duration": "42.0", "name": "rendering.desktop/text_60000_pixels_per_second" }, { - "duration": "40.0", + "duration": "41.0", "name": "rendering.desktop/text_75000_pixels_per_second" }, { - "duration": "40.0", + "duration": "41.0", "name": "rendering.desktop/text_90000_pixels_per_second" }, { - "duration": "45.0", + "duration": "48.0", "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second" }, { - "duration": "45.0", + "duration": "46.0", "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second" }, { - "duration": "40.0", + "duration": "43.0", "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second" }, { - "duration": "40.0", + "duration": "43.0", "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second" }, { - "duration": "39.0", + "duration": "43.0", "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second" }, { - "duration": "39.0", + "duration": "43.0", "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second" }, { - "duration": "39.0", + "duration": "43.0", "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second" }, { - "duration": "34.0", + "duration": "35.0", "name": "rendering.desktop/text_fling_05000_pixels_per_second" }, { - "duration": "38.0", + "duration": "35.0", "name": "rendering.desktop/text_fling_10000_pixels_per_second" }, { @@ -3036,19 +3100,19 @@ "name": "rendering.desktop/text_fling_20000_pixels_per_second" }, { - "duration": "44.0", + "duration": "46.0", "name": "rendering.desktop/text_hover_05000_pixels_per_second" }, { - "duration": "42.0", + "duration": "43.0", "name": "rendering.desktop/text_hover_10000_pixels_per_second" }, { - "duration": "40.0", + "duration": "41.0", "name": "rendering.desktop/text_hover_20000_pixels_per_second" }, { - "duration": "40.0", + "duration": "41.0", "name": "rendering.desktop/text_hover_40000_pixels_per_second" }, { @@ -3060,267 +3124,267 @@ "name": "rendering.desktop/text_hover_75000_pixels_per_second" }, { - "duration": "41.0", + "duration": "42.0", "name": "rendering.desktop/text_hover_90000_pixels_per_second" }, { - "duration": "43.0", + "duration": "40.0", "name": "rendering.desktop/text_scrollbar_100_pixels_per_second" }, { - "duration": "41.0", + "duration": "37.0", "name": "rendering.desktop/text_scrollbar_1200_pixels_per_second" }, { - "duration": "40.0", + "duration": "36.0", "name": "rendering.desktop/text_scrollbar_200_pixels_per_second" }, { - "duration": "39.0", + "duration": "36.0", "name": "rendering.desktop/text_scrollbar_2300_pixels_per_second" }, { - "duration": "42.0", + "duration": "37.0", "name": "rendering.desktop/text_scrollbar_700_pixels_per_second" }, { - "duration": "34.0", + "duration": "38.0", "name": "rendering.desktop/throughput_scrolling_active_handler" }, { - "duration": "35.0", + "duration": "38.0", "name": "rendering.desktop/throughput_scrolling_composited" }, { - "duration": "35.0", + "duration": "38.0", "name": "rendering.desktop/throughput_scrolling_passive_handler" }, { - "duration": "35.0", + "duration": "39.0", "name": "rendering.desktop/throughput_scrolling_uncomposited" }, { - "duration": "67.0", + "duration": "70.0", "name": "rendering.desktop/tiny_racing_v3_wasm_2020" }, { - "duration": "67.0", + "duration": "70.0", "name": "rendering.desktop/tiny_racing_v3_wasm_2020_fast_call" }, { - "duration": "33.0", + "duration": "37.0", "name": "rendering.desktop/toBlob_duration.html" }, { - "duration": "33.0", + "duration": "37.0", "name": "rendering.desktop/toBlob_duration_jpeg.html" }, { - "duration": "33.0", + "duration": "37.0", "name": "rendering.desktop/toBlob_small_canvas_in_worker.html" }, { - "duration": "28.0", + "duration": "32.0", "name": "rendering.desktop/touch_handler_scrolling" }, { - "duration": "31.0", + "duration": "35.0", "name": "rendering.desktop/transfer_from_imageBitmap.html" }, { - "duration": "33.0", + "duration": "37.0", "name": "rendering.desktop/transform_transitions" }, { - "duration": "31.0", + "duration": "35.0", "name": "rendering.desktop/transform_transitions_js_block" }, { - "duration": "31.0", + "duration": "34.0", "name": "rendering.desktop/twitch_2018" }, { - "duration": "36.0", + "duration": "39.0", "name": "rendering.desktop/twitch_pinch_2018" }, { - "duration": "32.0", + "duration": "36.0", "name": "rendering.desktop/twitter_2018" }, { - "duration": "29.0", + "duration": "33.0", "name": "rendering.desktop/twitter_pinch_2018" }, { - "duration": "36.0", + "duration": "38.0", "name": "rendering.desktop/video_to_hw_accelerated_canvas" }, { - "duration": "34.0", + "duration": "38.0", "name": "rendering.desktop/video_to_sub_texture" }, { - "duration": "34.0", + "duration": "33.0", "name": "rendering.desktop/video_to_sub_texture_flip_and_premultiply" }, { - "duration": "34.0", + "duration": "30.0", "name": "rendering.desktop/video_to_sub_texture_flip_y" }, { - "duration": "34.0", + "duration": "30.0", "name": "rendering.desktop/video_to_sub_texture_premultiply" }, { - "duration": "34.0", + "duration": "30.0", "name": "rendering.desktop/video_to_texture" }, { - "duration": "31.0", + "duration": "28.0", "name": "rendering.desktop/web_animation_value_type_color" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/web_animation_value_type_length_3d" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/web_animation_value_type_length_complex" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/web_animation_value_type_length_simple" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/web_animation_value_type_path" }, { - "duration": "31.0", + "duration": "28.0", "name": "rendering.desktop/web_animation_value_type_shadow" }, { - "duration": "31.0", + "duration": "28.0", "name": "rendering.desktop/web_animation_value_type_transform_complex" }, { - "duration": "31.0", + "duration": "27.0", "name": "rendering.desktop/web_animation_value_type_transform_simple" }, { - "duration": "36.0", + "duration": "32.0", "name": "rendering.desktop/web_animations_many_keyframes" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/web_animations_set_current_time" }, { - "duration": "32.0", + "duration": "28.0", "name": "rendering.desktop/web_animations_simultaneous" }, { - "duration": "34.0", + "duration": "30.0", "name": "rendering.desktop/web_animations_staggered_chaining" }, { - "duration": "31.0", + "duration": "27.0", "name": "rendering.desktop/web_animations_staggered_infinite_iterations" }, { - "duration": "34.0", + "duration": "31.0", "name": "rendering.desktop/web_animations_staggered_triggering_page" }, { - "duration": "38.0", + "duration": "35.0", "name": "rendering.desktop/webgl_to_texture" }, { - "duration": "26.0", + "duration": "22.0", "name": "rendering.desktop/webp_decoding_rgb_and_gpu_rasterization" }, { - "duration": "26.0", + "duration": "22.0", "name": "rendering.desktop/webp_decoding_yuv_and_gpu_rasterization" }, { - "duration": "31.0", + "duration": "38.0", "name": "rendering.desktop/wikipedia_2018" }, { - "duration": "30.0", + "duration": "27.0", "name": "rendering.desktop/wordpress_2018" }, { - "duration": "25.0", + "duration": "21.0", "name": "rendering.desktop/yahoo_answers_2018" }, { - "duration": "19.0", + "duration": "15.0", "name": "rendering.desktop/yahoo_news_2018" }, { - "duration": "31.0", + "duration": "32.0", "name": "rendering.desktop/yahoo_news_pinch_2018" }, { - "duration": "19.0", + "duration": "15.0", "name": "rendering.desktop/yahoo_sports_2018" }, { - "duration": "33.0", + "duration": "30.0", "name": "rendering.desktop/yahoo_sports_pinch_2018" }, { - "duration": "19.0", + "duration": "15.0", "name": "rendering.desktop/youtube_2018" }, { - "duration": "19.0", + "duration": "15.0", "name": "rendering.desktop/youtube_pinch_2018" }, { - "duration": "60.0", + "duration": "55.0", "name": "speedometer-future/http://browserbench.org/Speedometer/" }, { - "duration": "61.0", + "duration": "55.0", "name": "speedometer/http://browserbench.org/Speedometer/" }, { - "duration": "107.0", + "duration": "97.0", "name": "speedometer2-future/Speedometer2" }, { - "duration": "107.0", + "duration": "97.0", "name": "speedometer2/Speedometer2" }, { - "duration": "41.0", + "duration": "43.0", "name": "system_health.common_desktop/browse:media:googleplaystore:2021" }, { - "duration": "84.0", + "duration": "85.0", "name": "system_health.common_desktop/browse:media:imgur" }, { - "duration": "105.0", + "duration": "99.0", "name": "system_health.common_desktop/browse:media:pinterest:2018" }, { - "duration": "89.0", + "duration": "71.0", "name": "system_health.common_desktop/browse:media:tumblr:2018" }, { - "duration": "19.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:media:youtube:2019" }, { - "duration": "80.0", + "duration": "74.0", "name": "system_health.common_desktop/browse:media:youtubetv:2019" }, { - "duration": "89.0", + "duration": "83.0", "name": "system_health.common_desktop/browse:media:youtubetv_watch:2020" }, { @@ -3328,27 +3392,27 @@ "name": "system_health.common_desktop/browse:news:cnn:2021" }, { - "duration": "55.0", + "duration": "56.0", "name": "system_health.common_desktop/browse:news:flipboard:2020" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:news:hackernews:2020" }, { - "duration": "82.0", + "duration": "80.0", "name": "system_health.common_desktop/browse:news:nytimes:2020" }, { - "duration": "75.0", + "duration": "66.0", "name": "system_health.common_desktop/browse:news:reddit:2020" }, { - "duration": "57.0", + "duration": "59.0", "name": "system_health.common_desktop/browse:search:google:2020" }, { - "duration": "41.0", + "duration": "43.0", "name": "system_health.common_desktop/browse:search:google_india:2021" }, { @@ -3356,263 +3420,263 @@ "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll:2018" }, { - "duration": "19.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll:2018" }, { - "duration": "60.0", + "duration": "53.0", "name": "system_health.common_desktop/browse:social:twitter:2018" }, { - "duration": "76.0", + "duration": "70.0", "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll:2018" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll:2018" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:autocad:2021" }, { - "duration": "43.0", + "duration": "44.0", "name": "system_health.common_desktop/browse:tools:docs_scrolling" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:gmail-compose:2020" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:gmail-labelclick:2020" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:gmail-openconversation:2020" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:gmail-search:2020" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:maps:2019" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:photoshop:2021" }, { - "duration": "175.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:photoshop_warm:2021" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse:tools:sheets:2019" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/browse_accessibility:media:youtube" }, { - "duration": "35.0", + "duration": "37.0", "name": "system_health.common_desktop/browse_accessibility:tech:codesearch:2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "system_health.common_desktop/load:chrome:blank" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load:games:alphabetty:2018" }, { - "duration": "25.0", + "duration": "26.0", "name": "system_health.common_desktop/load:games:bubbles:2020" }, { - "duration": "25.0", + "duration": "26.0", "name": "system_health.common_desktop/load:games:lazors" }, { - "duration": "30.0", + "duration": "31.0", "name": "system_health.common_desktop/load:games:miniclip:2018" }, { - "duration": "30.0", + "duration": "31.0", "name": "system_health.common_desktop/load:games:spychase:2018" }, { - "duration": "29.0", + "duration": "40.0", "name": "system_health.common_desktop/load:media:9gag" }, { - "duration": "27.0", + "duration": "28.0", "name": "system_health.common_desktop/load:media:dailymotion:2019" }, { - "duration": "28.0", + "duration": "30.0", "name": "system_health.common_desktop/load:media:facebook_feed:desktop:2020" }, { - "duration": "28.0", + "duration": "29.0", "name": "system_health.common_desktop/load:media:facebook_photos:2018" }, { - "duration": "28.0", + "duration": "29.0", "name": "system_health.common_desktop/load:media:facebook_photos:desktop:2020" }, { - "duration": "27.0", + "duration": "29.0", "name": "system_health.common_desktop/load:media:flickr:2018" }, { - "duration": "25.0", + "duration": "27.0", "name": "system_health.common_desktop/load:media:google_images:2018" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/load:media:imgur:2018" }, { - "duration": "30.0", + "duration": "31.0", "name": "system_health.common_desktop/load:media:soundcloud:2018" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load:media:youtube:2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "system_health.common_desktop/load:media:youtubelivingroom:2020" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load:news:bbc:2018" }, { - "duration": "27.0", + "duration": "29.0", "name": "system_health.common_desktop/load:news:cnn:2020" }, { - "duration": "28.0", + "duration": "29.0", "name": "system_health.common_desktop/load:news:flipboard" }, { - "duration": "24.0", + "duration": "26.0", "name": "system_health.common_desktop/load:news:hackernews:2018" }, { - "duration": "30.0", + "duration": "32.0", "name": "system_health.common_desktop/load:news:nytimes:2018" }, { - "duration": "27.0", + "duration": "28.0", "name": "system_health.common_desktop/load:news:qq:2018" }, { - "duration": "29.0", + "duration": "30.0", "name": "system_health.common_desktop/load:news:reddit:2018" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load:news:wikipedia:2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "system_health.common_desktop/load:search:amazon:2018" }, { - "duration": "25.0", + "duration": "26.0", "name": "system_health.common_desktop/load:search:baidu:2018" }, { - "duration": "27.0", + "duration": "28.0", "name": "system_health.common_desktop/load:search:ebay:2018" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load:search:flipkart:2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "system_health.common_desktop/load:search:google:2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "system_health.common_desktop/load:search:taobao:2018" }, { - "duration": "25.0", + "duration": "26.0", "name": "system_health.common_desktop/load:search:yahoo:2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "system_health.common_desktop/load:search:yandex:2018" }, { - "duration": "26.0", + "duration": "27.0", "name": "system_health.common_desktop/load:social:instagram:2018" }, { - "duration": "28.0", + "duration": "29.0", "name": "system_health.common_desktop/load:social:pinterest:2019" }, { - "duration": "27.0", + "duration": "28.0", "name": "system_health.common_desktop/load:social:vk:2018" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/load:tools:chat:2020" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/load:tools:docs:2019" }, { - "duration": "27.0", + "duration": "29.0", "name": "system_health.common_desktop/load:tools:drive:2019" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/load:tools:gmail:2019" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load:tools:stackoverflow:2018" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load:tools:weather:2019" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load_accessibility:media:wikipedia:2018" }, { - "duration": "26.0", + "duration": "28.0", "name": "system_health.common_desktop/load_accessibility:shopping:amazon:2018" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/long_running:tools:gmail-background" }, { - "duration": "11.0", + "duration": "13.0", "name": "system_health.common_desktop/long_running:tools:gmail-foreground" }, { - "duration": "55.0", + "duration": "56.0", "name": "system_health.common_desktop/play:media:google_play_music" }, { - "duration": "60.0", + "duration": "54.0", "name": "system_health.common_desktop/play:media:soundcloud:2018" }, { - "duration": "32.0", + "duration": "33.0", "name": "system_health.memory_desktop/browse:media:googleplaystore:2021" }, { @@ -3620,15 +3684,15 @@ "name": "system_health.memory_desktop/browse:media:imgur" }, { - "duration": "93.0", + "duration": "95.0", "name": "system_health.memory_desktop/browse:media:pinterest:2018" }, { - "duration": "66.0", + "duration": "67.0", "name": "system_health.memory_desktop/browse:media:tumblr:2018" }, { - "duration": "10.0", + "duration": "12.0", "name": "system_health.memory_desktop/browse:media:youtube:2019" }, { @@ -3636,11 +3700,11 @@ "name": "system_health.memory_desktop/browse:media:youtubetv:2019" }, { - "duration": "76.0", + "duration": "78.0", "name": "system_health.memory_desktop/browse:media:youtubetv_watch:2020" }, { - "duration": "45.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:news:cnn:2021" }, { @@ -3652,7 +3716,7 @@ "name": "system_health.memory_desktop/browse:news:hackernews:2020" }, { - "duration": "73.0", + "duration": "72.0", "name": "system_health.memory_desktop/browse:news:nytimes:2020" }, { @@ -3660,35 +3724,35 @@ "name": "system_health.memory_desktop/browse:news:reddit:2020" }, { - "duration": "48.0", + "duration": "49.0", "name": "system_health.memory_desktop/browse:search:google:2020" }, { - "duration": "32.0", + "duration": "33.0", "name": "system_health.memory_desktop/browse:search:google_india:2021" }, { - "duration": "68.0", + "duration": "69.0", "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll:2018" }, { - "duration": "10.0", + "duration": "12.0", "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll:2018" }, { - "duration": "48.0", + "duration": "50.0", "name": "system_health.memory_desktop/browse:social:twitter:2018" }, { - "duration": "10.0", + "duration": "12.0", "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll:2018" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll:2018" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:tools:autocad:2021" }, { @@ -3696,19 +3760,19 @@ "name": "system_health.memory_desktop/browse:tools:docs_scrolling" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:tools:gmail-compose:2020" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:tools:gmail-labelclick:2020" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:tools:gmail-openconversation:2020" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:tools:gmail-search:2020" }, { @@ -3716,39 +3780,39 @@ "name": "system_health.memory_desktop/browse:tools:maps:2019" }, { - "duration": "10.0", + "duration": "12.0", "name": "system_health.memory_desktop/browse:tools:photoshop:2021" }, { - "duration": "10.0", + "duration": "12.0", "name": "system_health.memory_desktop/browse:tools:photoshop_warm:2021" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse:tools:sheets:2019" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/browse_accessibility:media:youtube" }, { - "duration": "27.0", + "duration": "32.0", "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch:2018" }, { - "duration": "16.0", + "duration": "17.0", "name": "system_health.memory_desktop/load:chrome:blank" }, { - "duration": "20.0", + "duration": "18.0", "name": "system_health.memory_desktop/load:games:alphabetty:2018" }, { - "duration": "19.0", + "duration": "17.0", "name": "system_health.memory_desktop/load:games:bubbles:2020" }, { - "duration": "19.0", + "duration": "22.0", "name": "system_health.memory_desktop/load:games:lazors" }, { @@ -3760,7 +3824,7 @@ "name": "system_health.memory_desktop/load:games:spychase:2018" }, { - "duration": "25.0", + "duration": "22.0", "name": "system_health.memory_desktop/load:media:9gag" }, { @@ -3776,11 +3840,11 @@ "name": "system_health.memory_desktop/load:media:facebook_photos:2018" }, { - "duration": "22.0", + "duration": "23.0", "name": "system_health.memory_desktop/load:media:facebook_photos:desktop:2020" }, { - "duration": "21.0", + "duration": "22.0", "name": "system_health.memory_desktop/load:media:flickr:2018" }, { @@ -3792,7 +3856,7 @@ "name": "system_health.memory_desktop/load:media:imgur:2018" }, { - "duration": "24.0", + "duration": "25.0", "name": "system_health.memory_desktop/load:media:soundcloud:2018" }, { @@ -3800,15 +3864,15 @@ "name": "system_health.memory_desktop/load:media:youtube:2018" }, { - "duration": "20.0", + "duration": "21.0", "name": "system_health.memory_desktop/load:media:youtubelivingroom:2020" }, { - "duration": "20.0", + "duration": "18.0", "name": "system_health.memory_desktop/load:news:bbc:2018" }, { - "duration": "22.0", + "duration": "19.0", "name": "system_health.memory_desktop/load:news:cnn:2020" }, { @@ -3836,11 +3900,11 @@ "name": "system_health.memory_desktop/load:news:wikipedia:2018" }, { - "duration": "20.0", + "duration": "18.0", "name": "system_health.memory_desktop/load:search:amazon:2018" }, { - "duration": "19.0", + "duration": "17.0", "name": "system_health.memory_desktop/load:search:baidu:2018" }, { @@ -3852,19 +3916,19 @@ "name": "system_health.memory_desktop/load:search:flipkart:2018" }, { - "duration": "20.0", + "duration": "21.0", "name": "system_health.memory_desktop/load:search:google:2018" }, { - "duration": "20.0", + "duration": "21.0", "name": "system_health.memory_desktop/load:search:taobao:2018" }, { - "duration": "19.0", + "duration": "20.0", "name": "system_health.memory_desktop/load:search:yahoo:2018" }, { - "duration": "20.0", + "duration": "21.0", "name": "system_health.memory_desktop/load:search:yandex:2018" }, { @@ -3872,7 +3936,7 @@ "name": "system_health.memory_desktop/load:social:instagram:2018" }, { - "duration": "22.0", + "duration": "23.0", "name": "system_health.memory_desktop/load:social:pinterest:2019" }, { @@ -3880,7 +3944,7 @@ "name": "system_health.memory_desktop/load:social:vk:2018" }, { - "duration": "8.0", + "duration": "6.0", "name": "system_health.memory_desktop/load:tools:chat:2020" }, { @@ -3908,55 +3972,55 @@ "name": "system_health.memory_desktop/load_accessibility:media:wikipedia:2018" }, { - "duration": "19.0", + "duration": "23.0", "name": "system_health.memory_desktop/load_accessibility:shopping:amazon:2018" }, { - "duration": "145.0", + "duration": "147.0", "name": "system_health.memory_desktop/long_running:tools:gmail-background" }, { - "duration": "141.0", + "duration": "144.0", "name": "system_health.memory_desktop/long_running:tools:gmail-foreground" }, { - "duration": "5.0", + "duration": "6.0", "name": "system_health.memory_desktop/play:media:google_play_music" }, { - "duration": "48.0", + "duration": "50.0", "name": "system_health.memory_desktop/play:media:soundcloud:2018" }, { - "duration": "53.0", + "duration": "54.0", "name": "v8.browsing_desktop-future/browse:media:googleplaystore:2021" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:media:imgur" }, { - "duration": "142.0", + "duration": "112.0", "name": "v8.browsing_desktop-future/browse:media:pinterest:2018" }, { - "duration": "116.0", + "duration": "84.0", "name": "v8.browsing_desktop-future/browse:media:tumblr:2018" }, { - "duration": "54.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:media:youtube:2019" }, { - "duration": "117.0", + "duration": "87.0", "name": "v8.browsing_desktop-future/browse:media:youtubetv:2019" }, { - "duration": "126.0", + "duration": "184.0", "name": "v8.browsing_desktop-future/browse:media:youtubetv_watch:2020" }, { - "duration": "68.0", + "duration": "66.0", "name": "v8.browsing_desktop-future/browse:news:cnn:2021" }, { @@ -3964,203 +4028,203 @@ "name": "v8.browsing_desktop-future/browse:news:flipboard:2020" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:news:hackernews:2020" }, { - "duration": "54.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:news:nytimes:2020" }, { - "duration": "116.0", + "duration": "80.0", "name": "v8.browsing_desktop-future/browse:news:reddit:2020" }, { - "duration": "70.0", + "duration": "71.0", "name": "v8.browsing_desktop-future/browse:search:google:2020" }, { - "duration": "53.0", + "duration": "54.0", "name": "v8.browsing_desktop-future/browse:search:google_india:2021" }, { - "duration": "97.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll:2018" }, { - "duration": "114.0", + "duration": "80.0", "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll:2018" }, { - "duration": "96.0", + "duration": "65.0", "name": "v8.browsing_desktop-future/browse:social:twitter:2018" }, { - "duration": "113.0", + "duration": "83.0", "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll:2018" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:autocad:2021" }, { - "duration": "55.0", + "duration": "56.0", "name": "v8.browsing_desktop-future/browse:tools:docs_scrolling" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:gmail-compose:2020" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:gmail-labelclick:2020" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:gmail-openconversation:2020" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:gmail-search:2020" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:maps:2019" }, { - "duration": "54.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:photoshop:2021" }, { - "duration": "223.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:photoshop_warm:2021" }, { - "duration": "24.0", + "duration": "25.0", "name": "v8.browsing_desktop-future/browse:tools:sheets:2019" }, { - "duration": "68.0", + "duration": "51.0", "name": "v8.browsing_desktop/browse:media:googleplaystore:2021" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:media:imgur" }, { - "duration": "126.0", + "duration": "109.0", "name": "v8.browsing_desktop/browse:media:pinterest:2018" }, { - "duration": "101.0", + "duration": "82.0", "name": "v8.browsing_desktop/browse:media:tumblr:2018" }, { - "duration": "39.0", + "duration": "58.0", "name": "v8.browsing_desktop/browse:media:youtube:2019" }, { - "duration": "101.0", + "duration": "120.0", "name": "v8.browsing_desktop/browse:media:youtubetv:2019" }, { - "duration": "110.0", + "duration": "134.0", "name": "v8.browsing_desktop/browse:media:youtubetv_watch:2020" }, { - "duration": "83.0", + "duration": "63.0", "name": "v8.browsing_desktop/browse:news:cnn:2021" }, { - "duration": "82.0", + "duration": "65.0", "name": "v8.browsing_desktop/browse:news:flipboard:2020" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:news:hackernews:2020" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:news:nytimes:2020" }, { - "duration": "101.0", + "duration": "77.0", "name": "v8.browsing_desktop/browse:news:reddit:2020" }, { - "duration": "85.0", + "duration": "68.0", "name": "v8.browsing_desktop/browse:search:google:2020" }, { - "duration": "68.0", + "duration": "52.0", "name": "v8.browsing_desktop/browse:search:google_india:2021" }, { - "duration": "111.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll:2018" }, { - "duration": "93.0", + "duration": "76.0", "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll:2018" }, { - "duration": "80.0", + "duration": "62.0", "name": "v8.browsing_desktop/browse:social:twitter:2018" }, { - "duration": "97.0", + "duration": "116.0", "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll:2018" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:autocad:2021" }, { - "duration": "70.0", + "duration": "53.0", "name": "v8.browsing_desktop/browse:tools:docs_scrolling" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:gmail-compose:2020" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:gmail-labelclick:2020" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:gmail-openconversation:2020" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:gmail-search:2020" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:maps:2019" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:photoshop:2021" }, { - "duration": "207.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:photoshop_warm:2021" }, { - "duration": "39.0", + "duration": "22.0", "name": "v8.browsing_desktop/browse:tools:sheets:2019" }, { - "duration": "34.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/AdsAMPAds_cold" }, { @@ -4168,7 +4232,7 @@ "name": "v8.runtime_stats.top_25/AdsAMPAds_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsAMPAds_warm" }, { @@ -4180,43 +4244,43 @@ "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_warm" }, { @@ -4224,15 +4288,15 @@ "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_warm" }, { - "duration": "34.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_cold" }, { @@ -4240,7 +4304,7 @@ "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_warm" }, { @@ -4248,15 +4312,15 @@ "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_warm" }, { - "duration": "41.0", + "duration": "42.0", "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_cold" }, { @@ -4264,23 +4328,23 @@ "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_hot" }, { - "duration": "53.0", + "duration": "54.0", "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://edition.cnn.com_cold" }, { - "duration": "48.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/http://edition.cnn.com_hot" }, { - "duration": "52.0", + "duration": "38.0", "name": "v8.runtime_stats.top_25/http://edition.cnn.com_warm" }, { - "duration": "34.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_cold" }, { @@ -4288,63 +4352,63 @@ "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_hot" }, { - "duration": "39.0", + "duration": "40.0", "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://inbox.google.com_cold" }, { - "duration": "49.0", + "duration": "47.0", "name": "v8.runtime_stats.top_25/http://inbox.google.com_hot" }, { - "duration": "44.0", + "duration": "42.0", "name": "v8.runtime_stats.top_25/http://inbox.google.com_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_cold" }, { - "duration": "173.0", + "duration": "194.0", "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_hot" }, { - "duration": "215.0", + "duration": "216.0", "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://meta.discourse.org_cold" }, { - "duration": "49.0", + "duration": "47.0", "name": "v8.runtime_stats.top_25/http://meta.discourse.org_hot" }, { - "duration": "45.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/http://meta.discourse.org_warm" }, { - "duration": "43.0", + "duration": "36.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_cold" }, { - "duration": "42.0", + "duration": "48.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_hot" }, { - "duration": "38.0", + "duration": "40.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_hot" }, { @@ -4352,35 +4416,35 @@ "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_cold" }, { - "duration": "42.0", + "duration": "46.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_hot" }, { - "duration": "61.0", + "duration": "68.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_warm" }, { - "duration": "33.0", + "duration": "45.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_cold" }, { - "duration": "42.0", + "duration": "164.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_hot" }, { - "duration": "52.0", + "duration": "198.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_hot" }, { @@ -4388,71 +4452,71 @@ "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_cold" }, { - "duration": "49.0", + "duration": "47.0", "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_hot" }, { - "duration": "44.0", + "duration": "42.0", "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://weibo.com_cold" }, { - "duration": "48.0", + "duration": "46.0", "name": "v8.runtime_stats.top_25/http://weibo.com_hot" }, { - "duration": "44.0", + "duration": "96.0", "name": "v8.runtime_stats.top_25/http://weibo.com_warm" }, { - "duration": "39.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://world.taobao.com_cold" }, { - "duration": "48.0", + "duration": "44.0", "name": "v8.runtime_stats.top_25/http://world.taobao.com_hot" }, { - "duration": "44.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/http://world.taobao.com_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_cold" }, { - "duration": "43.0", + "duration": "44.0", "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_hot" }, { - "duration": "38.0", + "duration": "93.0", "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_warm" }, { - "duration": "38.0", + "duration": "36.0", "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_cold" }, { - "duration": "48.0", + "duration": "45.0", "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_hot" }, { @@ -4460,55 +4524,55 @@ "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_cold" }, { - "duration": "43.0", + "duration": "44.0", "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_hot" }, { - "duration": "38.0", + "duration": "67.0", "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_warm" }, { - "duration": "39.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_cold" }, { - "duration": "48.0", + "duration": "44.0", "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_hot" }, { - "duration": "44.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_warm" }, { - "duration": "39.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_cold" }, { - "duration": "49.0", + "duration": "58.0", "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_hot" }, { - "duration": "44.0", + "duration": "40.0", "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_cold" }, { - "duration": "51.0", + "duration": "49.0", "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_hot" }, { - "duration": "46.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_warm" }, { - "duration": "34.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/http://www.qq.com_cold" }, { @@ -4516,23 +4580,23 @@ "name": "v8.runtime_stats.top_25/http://www.qq.com_hot" }, { - "duration": "39.0", + "duration": "40.0", "name": "v8.runtime_stats.top_25/http://www.qq.com_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://www.reddit.com_cold" }, { - "duration": "44.0", + "duration": "45.0", "name": "v8.runtime_stats.top_25/http://www.reddit.com_hot" }, { - "duration": "38.0", + "duration": "40.0", "name": "v8.runtime_stats.top_25/http://www.reddit.com_warm" }, { - "duration": "34.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_cold" }, { @@ -4540,63 +4604,63 @@ "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_hot" }, { - "duration": "40.0", + "duration": "41.0", "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_cold" }, { - "duration": "50.0", + "duration": "48.0", "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_hot" }, { - "duration": "45.0", + "duration": "42.0", "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_hot" }, { - "duration": "37.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_warm" }, { - "duration": "39.0", + "duration": "37.0", "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_cold" }, { - "duration": "48.0", + "duration": "46.0", "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_hot" }, { - "duration": "43.0", + "duration": "41.0", "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_warm" }, { - "duration": "84.0", + "duration": "76.0", "name": "v8.runtime_stats.top_25/https://adwords.google.com_cold" }, { - "duration": "221.0", + "duration": "219.0", "name": "v8.runtime_stats.top_25/https://adwords.google.com_hot" }, { - "duration": "221.0", + "duration": "219.0", "name": "v8.runtime_stats.top_25/https://adwords.google.com_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_cold" }, { - "duration": "42.0", + "duration": "43.0", "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_hot" }, { @@ -4604,19 +4668,19 @@ "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_warm" }, { - "duration": "10.0", + "duration": "11.0", "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_cold" }, { - "duration": "10.0", + "duration": "11.0", "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_hot" }, { - "duration": "10.0", + "duration": "11.0", "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_warm" }, { - "duration": "34.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_cold" }, { @@ -4624,59 +4688,59 @@ "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_hot" }, { - "duration": "50.0", + "duration": "49.0", "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_warm" }, { - "duration": "39.0", + "duration": "40.0", "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_cold" }, { - "duration": "43.0", + "duration": "44.0", "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_warm" }, { - "duration": "40.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_cold" }, { - "duration": "51.0", + "duration": "45.0", "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_hot" }, { - "duration": "46.0", + "duration": "41.0", "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_warm" }, { - "duration": "33.0", + "duration": "34.0", "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_cold" }, { - "duration": "43.0", + "duration": "44.0", "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_hot" }, { - "duration": "38.0", + "duration": "39.0", "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_warm" }, { - "duration": "34.0", + "duration": "35.0", "name": "v8.runtime_stats.top_25/https://www.youtube.com_cold" }, { - "duration": "45.0", + "duration": "46.0", "name": "v8.runtime_stats.top_25/https://www.youtube.com_hot" }, { - "duration": "63.0", + "duration": "42.0", "name": "v8.runtime_stats.top_25/https://www.youtube.com_warm" }, { - "duration": "113.0", + "duration": "119.0", "name": "wasmpspdfkit/https://pspdfkit.com/webassembly-benchmark/" }, { @@ -4684,63 +4748,63 @@ "name": "webrtc/10s_datachannel_transfer" }, { - "duration": "26.0", + "duration": "27.0", "name": "webrtc/canvas_capture_peer_connection" }, { - "duration": "36.0", + "duration": "37.0", "name": "webrtc/codec_constraints_h264" }, { - "duration": "36.0", + "duration": "37.0", "name": "webrtc/codec_constraints_vp8" }, { - "duration": "36.0", + "duration": "37.0", "name": "webrtc/codec_constraints_vp9" }, { - "duration": "25.0", + "duration": "26.0", "name": "webrtc/hd_local_stream_10s" }, { - "duration": "25.0", + "duration": "26.0", "name": "webrtc/insertable_streams_audio_processing" }, { - "duration": "26.0", + "duration": "27.0", "name": "webrtc/insertable_streams_video_processing_camera_canvas2d_video" }, { - "duration": "25.0", + "duration": "27.0", "name": "webrtc/insertable_streams_video_processing_camera_noop_video" }, { - "duration": "26.0", + "duration": "27.0", "name": "webrtc/insertable_streams_video_processing_camera_webgl_pc" }, { - "duration": "25.0", + "duration": "27.0", "name": "webrtc/insertable_streams_video_processing_camera_webgl_video" }, { - "duration": "26.0", + "duration": "27.0", "name": "webrtc/insertable_streams_video_processing_pc_webgl_video" }, { - "duration": "26.0", + "duration": "27.0", "name": "webrtc/insertable_streams_video_processing_video_webgl_video" }, { - "duration": "13.0", + "duration": "15.0", "name": "webrtc/multiple_peerconnections" }, { - "duration": "21.0", + "duration": "23.0", "name": "webrtc/negotiate-timing" }, { - "duration": "13.0", + "duration": "15.0", "name": "webrtc/pause_play_peerconnections" } ] \ No newline at end of file
diff --git a/tools/perf/core/shard_maps/win-10_laptop_low_end-perf_map.json b/tools/perf/core/shard_maps/win-10_laptop_low_end-perf_map.json index 21a0ff8..a684e4e 100644 --- a/tools/perf/core/shard_maps/win-10_laptop_low_end-perf_map.json +++ b/tools/perf/core/shard_maps/win-10_laptop_low_end-perf_map.json
@@ -5,16 +5,7 @@ "abridged": false }, "blink_perf.accessibility": { - "abridged": false - }, - "blink_perf.bindings": { - "abridged": false - }, - "blink_perf.css": { - "abridged": false - }, - "blink_perf.dom": { - "end": 19, + "end": 8, "abridged": false }, "jetstream2": { @@ -27,27 +18,12 @@ }, "1": { "benchmarks": { - "blink_perf.dom": { - "begin": 19, + "blink_perf.accessibility": { + "begin": 8, "abridged": false }, - "blink_perf.events": { - "abridged": false - }, - "blink_perf.image_decoder": { - "abridged": false - }, - "blink_perf.layout": { - "abridged": false - }, - "blink_perf.owp_storage": { - "abridged": false - }, - "blink_perf.parser": { - "abridged": false - }, - "blink_perf.shadow_dom": { - "end": 11, + "blink_perf.bindings": { + "end": 16, "abridged": false }, "jetstream2": { @@ -60,11 +36,116 @@ }, "2": { "benchmarks": { + "blink_perf.bindings": { + "begin": 16, + "abridged": false + }, + "blink_perf.css": { + "end": 25, + "abridged": false + }, + "jetstream2": { + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "3": { + "benchmarks": { + "blink_perf.css": { + "begin": 25, + "abridged": false + }, + "blink_perf.dom": { + "end": 5, + "abridged": false + }, + "jetstream2": { + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "4": { + "benchmarks": { + "blink_perf.dom": { + "begin": 5, + "end": 20, + "abridged": false + }, + "jetstream2": { + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "5": { + "benchmarks": { + "blink_perf.dom": { + "begin": 20, + "abridged": false + }, + "blink_perf.events": { + "abridged": false + }, + "blink_perf.image_decoder": { + "abridged": false + }, + "blink_perf.layout": { + "end": 63, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "6": { + "benchmarks": { + "blink_perf.layout": { + "begin": 63, + "abridged": false + }, + "blink_perf.owp_storage": { + "abridged": false + }, + "blink_perf.parser": { + "end": 27, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "7": { + "benchmarks": { + "blink_perf.parser": { + "begin": 27, + "abridged": false + }, "blink_perf.shadow_dom": { - "begin": 11, "abridged": false }, "blink_perf.webaudio": { + "end": 7, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "8": { + "benchmarks": { + "blink_perf.webaudio": { + "begin": 7, "abridged": false }, "blink_perf.webcodecs": { @@ -83,21 +164,6 @@ "abridged": false }, "desktop_ui": { - "end": 5, - "abridged": false - }, - "jetstream2": { - "abridged": false - }, - "speedometer2": { - "abridged": false - } - } - }, - "3": { - "benchmarks": { - "desktop_ui": { - "begin": 5, "abridged": false }, "dummy_benchmark.noisy_benchmark_1": { @@ -109,88 +175,6 @@ "jetstream2": { "abridged": false }, - "media.desktop": { - "end": 21, - "abridged": false - }, - "speedometer2": { - "abridged": false - } - } - }, - "4": { - "benchmarks": { - "media.desktop": { - "begin": 21, - "abridged": false - }, - "memory.desktop": { - "abridged": false - }, - "octane": { - "abridged": false - }, - "power.desktop": { - "end": 11, - "abridged": false - }, - "jetstream2": { - "abridged": false - }, - "speedometer2": { - "abridged": false - } - } - }, - "5": { - "benchmarks": { - "power.desktop": { - "begin": 11, - "abridged": false - }, - "rasterize_and_record_micro.top_25": { - "abridged": false - }, - "rendering.desktop": { - "end": 47, - "abridged": false - }, - "speedometer2": { - "abridged": false - } - } - }, - "6": { - "benchmarks": { - "rendering.desktop": { - "begin": 47, - "end": 121, - "abridged": false - }, - "speedometer2": { - "abridged": false - } - } - }, - "7": { - "benchmarks": { - "rendering.desktop": { - "begin": 121, - "end": 190, - "abridged": false - }, - "speedometer2": { - "abridged": false - } - } - }, - "8": { - "benchmarks": { - "rendering.desktop": { - "begin": 190, - "end": 251, - "abridged": false - }, "speedometer2": { "abridged": false } @@ -198,9 +182,11 @@ }, "9": { "benchmarks": { - "rendering.desktop": { - "begin": 251, - "end": 308, + "media.desktop": { + "abridged": false + }, + "memory.desktop": { + "end": 1, "abridged": false }, "speedometer2": { @@ -210,10 +196,191 @@ }, "10": { "benchmarks": { - "rendering.desktop": { - "begin": 308, + "memory.desktop": { + "begin": 1, + "end": 8, "abridged": false }, + "speedometer2": { + "abridged": false + } + } + }, + "11": { + "benchmarks": { + "memory.desktop": { + "begin": 8, + "abridged": false + }, + "octane": { + "abridged": false + }, + "power.desktop": { + "end": 11, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "12": { + "benchmarks": { + "power.desktop": { + "begin": 11, + "abridged": false + }, + "rasterize_and_record_micro.top_25": { + "abridged": false + }, + "rendering.desktop": { + "end": 7, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "13": { + "benchmarks": { + "rendering.desktop": { + "begin": 7, + "end": 32, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "14": { + "benchmarks": { + "rendering.desktop": { + "begin": 32, + "end": 58, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "15": { + "benchmarks": { + "rendering.desktop": { + "begin": 58, + "end": 84, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "16": { + "benchmarks": { + "rendering.desktop": { + "begin": 84, + "end": 111, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "17": { + "benchmarks": { + "rendering.desktop": { + "begin": 111, + "end": 138, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "18": { + "benchmarks": { + "rendering.desktop": { + "begin": 138, + "end": 161, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "19": { + "benchmarks": { + "rendering.desktop": { + "begin": 161, + "end": 184, + "abridged": false + }, + "speedometer2": { + "abridged": false + } + } + }, + "20": { + "benchmarks": { + "rendering.desktop": { + "begin": 184, + "end": 211, + "abridged": false + } + } + }, + "21": { + "benchmarks": { + "rendering.desktop": { + "begin": 211, + "end": 241, + "abridged": false + } + } + }, + "22": { + "benchmarks": { + "rendering.desktop": { + "begin": 241, + "end": 263, + "abridged": false + } + } + }, + "23": { + "benchmarks": { + "rendering.desktop": { + "begin": 263, + "end": 284, + "abridged": false + } + } + }, + "24": { + "benchmarks": { + "rendering.desktop": { + "begin": 284, + "end": 307, + "abridged": false + } + } + }, + "25": { + "benchmarks": { + "rendering.desktop": { + "begin": 307, + "abridged": false + } + } + }, + "26": { + "benchmarks": { "rendering.desktop.notracing": { "abridged": false }, @@ -230,123 +397,207 @@ "abridged": false }, "system_health.common_desktop": { - "end": 23, + "end": 9, "abridged": false } } }, - "11": { + "27": { "benchmarks": { "system_health.common_desktop": { - "begin": 23, - "abridged": false - }, - "system_health.memory_desktop": { - "end": 2, - "abridged": false - }, - "speedometer2": { + "begin": 9, + "end": 38, "abridged": false } } }, - "12": { + "28": { + "benchmarks": { + "system_health.common_desktop": { + "begin": 38, + "end": 70, + "abridged": false + } + } + }, + "29": { + "benchmarks": { + "system_health.common_desktop": { + "begin": 70, + "abridged": false + }, + "system_health.memory_desktop": { + "end": 8, + "abridged": false + } + } + }, + "30": { "benchmarks": { "system_health.memory_desktop": { - "begin": 2, - "end": 31, - "abridged": false - }, - "speedometer2": { + "begin": 8, + "end": 18, "abridged": false } } }, - "13": { + "31": { + "benchmarks": { + "system_health.memory_desktop": { + "begin": 18, + "end": 31, + "abridged": false + } + } + }, + "32": { "benchmarks": { "system_health.memory_desktop": { "begin": 31, - "end": 64, - "abridged": false - }, - "speedometer2": { + "end": 47, "abridged": false } } }, - "14": { + "33": { "benchmarks": { "system_health.memory_desktop": { - "begin": 64, - "end": 77, - "abridged": false - }, - "speedometer2": { + "begin": 47, + "end": 60, "abridged": false } } }, - "15": { + "34": { + "benchmarks": { + "system_health.memory_desktop": { + "begin": 60, + "end": 65, + "abridged": false + } + } + }, + "35": { + "benchmarks": { + "system_health.memory_desktop": { + "begin": 65, + "end": 70, + "abridged": false + } + } + }, + "36": { + "benchmarks": { + "system_health.memory_desktop": { + "begin": 70, + "end": 77, + "abridged": false + } + } + }, + "37": { "benchmarks": { "system_health.memory_desktop": { "begin": 77, "abridged": false }, "v8.browsing_desktop": { - "end": 25, - "abridged": false - }, - "speedometer2": { + "end": 13, "abridged": false } } }, - "16": { + "38": { "benchmarks": { "v8.browsing_desktop": { - "begin": 25, - "abridged": false - }, - "v8.browsing_desktop-future": { + "begin": 13, "end": 28, "abridged": false - }, - "speedometer2": { - "abridged": false } } }, - "17": { + "39": { "benchmarks": { - "v8.browsing_desktop-future": { + "v8.browsing_desktop": { "begin": 28, "abridged": false }, - "v8.runtime_stats.top_25": { - "end": 53, - "abridged": false - }, - "speedometer2": { + "v8.browsing_desktop-future": { + "end": 20, "abridged": false } } }, - "18": { + "40": { "benchmarks": { - "v8.runtime_stats.top_25": { - "begin": 53, - "end": 87, + "v8.browsing_desktop-future": { + "begin": 20, "abridged": false }, - "speedometer2": { + "v8.runtime_stats.top_25": { + "end": 3, "abridged": false } } }, - "19": { + "41": { "benchmarks": { "v8.runtime_stats.top_25": { - "begin": 87, + "begin": 3, + "end": 26, + "abridged": false + } + } + }, + "42": { + "benchmarks": { + "v8.runtime_stats.top_25": { + "begin": 26, + "end": 49, + "abridged": false + } + } + }, + "43": { + "benchmarks": { + "v8.runtime_stats.top_25": { + "begin": 49, + "end": 69, + "abridged": false + } + } + }, + "44": { + "benchmarks": { + "v8.runtime_stats.top_25": { + "begin": 69, + "end": 82, + "abridged": false + } + } + }, + "45": { + "benchmarks": { + "v8.runtime_stats.top_25": { + "begin": 82, + "end": 90, + "abridged": false + } + } + }, + "46": { + "benchmarks": { + "v8.runtime_stats.top_25": { + "begin": 90, + "end": 113, + "abridged": false + } + } + }, + "47": { + "benchmarks": { + "v8.runtime_stats.top_25": { + "begin": 113, "abridged": false }, "wasmpspdfkit": { @@ -354,37 +605,62 @@ }, "webrtc": { "abridged": false - }, - "speedometer2": { - "abridged": false } } }, "extra_infos": { - "num_stories": 1228, - "predicted_min_shard_time": 2054.0, - "predicted_min_shard_index": 13, - "predicted_max_shard_time": 2356.0, - "predicted_max_shard_index": 16, - "shard #0": 2253.0, - "shard #1": 2140.0, - "shard #2": 2164.0, - "shard #3": 2261.0, - "shard #4": 2246.0, - "shard #5": 2258.0, - "shard #6": 2268.0, - "shard #7": 2267.0, - "shard #8": 2264.0, - "shard #9": 2258.0, - "shard #10": 2314.0, - "shard #11": 2245.0, - "shard #12": 2288.0, - "shard #13": 2054.0, - "shard #14": 2291.0, - "shard #15": 2282.0, - "shard #16": 2356.0, - "shard #17": 2306.0, - "shard #18": 2289.0, - "shard #19": 2312.0 + "num_stories": 1230, + "predicted_min_shard_time": 690.0, + "predicted_min_shard_index": 34, + "predicted_max_shard_time": 1227.0, + "predicted_max_shard_index": 47, + "shard #0": 893.0, + "shard #1": 897.0, + "shard #2": 897.0, + "shard #3": 898.0, + "shard #4": 893.0, + "shard #5": 898.0, + "shard #6": 901.0, + "shard #7": 915.0, + "shard #8": 996.0, + "shard #9": 941.0, + "shard #10": 907.0, + "shard #11": 892.0, + "shard #12": 902.0, + "shard #13": 893.0, + "shard #14": 887.0, + "shard #15": 887.0, + "shard #16": 892.0, + "shard #17": 895.0, + "shard #18": 883.0, + "shard #19": 876.0, + "shard #20": 889.0, + "shard #21": 903.0, + "shard #22": 886.0, + "shard #23": 875.0, + "shard #24": 897.0, + "shard #25": 857.0, + "shard #26": 930.0, + "shard #27": 880.0, + "shard #28": 935.0, + "shard #29": 839.0, + "shard #30": 978.0, + "shard #31": 897.0, + "shard #32": 861.0, + "shard #33": 873.0, + "shard #34": 690.0, + "shard #35": 1005.0, + "shard #36": 801.0, + "shard #37": 915.0, + "shard #38": 883.0, + "shard #39": 852.0, + "shard #40": 923.0, + "shard #41": 913.0, + "shard #42": 901.0, + "shard #43": 902.0, + "shard #44": 902.0, + "shard #45": 969.0, + "shard #46": 915.0, + "shard #47": 1227.0 } } \ No newline at end of file
diff --git a/ui/aura/env.cc b/ui/aura/env.cc index 481d7a00..3550a1ae 100644 --- a/ui/aura/env.cc +++ b/ui/aura/env.cc
@@ -149,6 +149,18 @@ last_mouse_location_ = last_mouse_location; } +void Env::SetLastTouchLocation(const aura::Window* target, + const gfx::Point& last_touch_location) { + last_touch_locations_.insert_or_assign(target, last_touch_location); +} + +void Env::SetTouchDown(bool is_touch_down) { + if (!is_touch_down_ && is_touch_down) { + last_touch_locations_.clear(); + } + is_touch_down_ = is_touch_down; +} + void Env::SetGestureRecognizer( std::unique_ptr<ui::GestureRecognizer> gesture_recognizer) { gesture_recognizer_ = std::move(gesture_recognizer); @@ -157,27 +169,17 @@ gfx::Point Env::GetLastPointerPoint(ui::mojom::DragEventSource event_source, Window* window, absl::optional<gfx::Point> fallback) { - if (event_source == ui::mojom::DragEventSource::kTouch && is_touch_down()) { - DCHECK(window); - DCHECK(window->GetRootWindow()); - gfx::PointF touch_point_f; - bool got_touch_point = gesture_recognizer()->GetLastTouchPointForTarget( - window, &touch_point_f); - if (got_touch_point) { - Window* root = window->GetRootWindow(); - DCHECK(root); - DCHECK(root->GetRootWindow()); - DCHECK(aura::client::GetScreenPositionClient(root->GetRootWindow())); - client::GetScreenPositionClient(root->GetRootWindow()) - ->ConvertPointToScreen(root, &touch_point_f); - return gfx::ToFlooredPoint(touch_point_f); + if (event_source == ui::mojom::DragEventSource::kTouch) { + if (is_touch_down()) { + auto iter = last_touch_locations_.find(window); + if (iter != last_touch_locations_.end()) { + return iter->second; + } } - // Fallback when touch state is lost. See http://crbug.com/1162541. if (fallback) return *fallback; } - // TODO(https://crbug.com/1338746): Use last_mouse_location_. return display::Screen::GetScreen()->GetCursorScreenPoint(); }
diff --git a/ui/aura/env.h b/ui/aura/env.h index df3cf69be..2f4a0db 100644 --- a/ui/aura/env.h +++ b/ui/aura/env.h
@@ -9,6 +9,7 @@ #include <set> #include <utility> +#include "base/containers/flat_map.h" #include "base/memory/raw_ptr.h" #include "base/observer_list.h" #include "build/build_config.h" @@ -89,10 +90,12 @@ // coordinates. const gfx::Point& last_mouse_location() const { return last_mouse_location_; } void SetLastMouseLocation(const gfx::Point& last_mouse_location); + void SetLastTouchLocation(const aura::Window* target, + const gfx::Point& last_touch_location); // Whether any touch device is currently down. bool is_touch_down() const { return is_touch_down_; } - void set_touch_down(bool value) { is_touch_down_ = value; } + void SetTouchDown(bool value); void set_context_factory(ui::ContextFactory* context_factory) { context_factory_ = context_factory; @@ -116,8 +119,10 @@ void SetGestureRecognizer( std::unique_ptr<ui::GestureRecognizer> gesture_recognizer); - // The `fallback` parameter allows callers of this API to specify a - // value to be returned in the case of a missing touch state. + // Returns the location of last mouse or touch event. Note that touch makes + // sense only during pressed state, and this will fallback to to the + // 'fallback' value, or mouse pointer location in the case of a missing touch + // state. gfx::Point GetLastPointerPoint(ui::mojom::DragEventSource event_source, aura::Window* window, absl::optional<gfx::Point> fallback); @@ -192,8 +197,9 @@ std::unique_ptr<EnvInputStateController> env_controller_; int mouse_button_flags_ = 0; - // Location of last mouse event, in screen coordinates. + // Location of last mouse event and touch event in screen coordinates. mutable gfx::Point last_mouse_location_; + mutable gfx::Point last_touch_location_; bool is_touch_down_ = false; std::unique_ptr<ui::GestureRecognizer> gesture_recognizer_; @@ -214,6 +220,10 @@ std::vector<aura::WindowTreeHost*> window_tree_hosts_; + // Touch points. The `target` window may be stale and should not be accessed + // other than looking up purpose. + base::flat_map<const aura::Window*, gfx::Point> last_touch_locations_; + raw_ptr<client::CursorShapeClient> cursor_shape_client_ = nullptr; };
diff --git a/ui/aura/env_input_state_controller.cc b/ui/aura/env_input_state_controller.cc index 669dab6..4ba95a31 100644 --- a/ui/aura/env_input_state_controller.cc +++ b/ui/aura/env_input_state_controller.cc
@@ -40,11 +40,12 @@ } void EnvInputStateController::UpdateStateForTouchEvent( + const aura::Window* window, const ui::TouchEvent& event) { switch (event.type()) { case ui::ET_TOUCH_PRESSED: touch_ids_down_ |= (1 << event.pointer_details().id); - env_->set_touch_down(touch_ids_down_ != 0); + env_->SetTouchDown(touch_ids_down_ != 0); break; // Handle ET_TOUCH_CANCELLED only if it has a native event. @@ -55,7 +56,7 @@ case ui::ET_TOUCH_RELEASED: touch_ids_down_ = (touch_ids_down_ | (1 << event.pointer_details().id)) ^ (1 << event.pointer_details().id); - env_->set_touch_down(touch_ids_down_ != 0); + env_->SetTouchDown(touch_ids_down_ != 0); break; case ui::ET_TOUCH_MOVED: @@ -65,6 +66,15 @@ NOTREACHED(); break; } + const gfx::Point& location_in_root = event.root_location(); + const auto* root_window = window->GetRootWindow(); + client::ScreenPositionClient* client = + client::GetScreenPositionClient(root_window); + gfx::Point location_in_screen = location_in_root; + if (client) { + client->ConvertPointToScreen(root_window, &location_in_screen); + } + env_->SetLastTouchLocation(window, location_in_screen); } void EnvInputStateController::SetLastMouseLocation(
diff --git a/ui/aura/env_input_state_controller.h b/ui/aura/env_input_state_controller.h index 810d217..9810d51 100644 --- a/ui/aura/env_input_state_controller.h +++ b/ui/aura/env_input_state_controller.h
@@ -38,7 +38,8 @@ void UpdateStateForMouseEvent(const Window* window, const ui::MouseEvent& event); - void UpdateStateForTouchEvent(const ui::TouchEvent& event); + void UpdateStateForTouchEvent(const Window* window, + const ui::TouchEvent& event); void SetLastMouseLocation(const Window* root_window, const gfx::Point& location_in_root) const; uint32_t touch_ids_down() const { return touch_ids_down_; }
diff --git a/ui/aura/window_event_dispatcher.cc b/ui/aura/window_event_dispatcher.cc index 12e6b56..a63e34b 100644 --- a/ui/aura/window_event_dispatcher.cc +++ b/ui/aura/window_event_dispatcher.cc
@@ -1042,7 +1042,8 @@ return DispatchDetails(); } - Env::GetInstance()->env_controller()->UpdateStateForTouchEvent(*event); + Env::GetInstance()->env_controller()->UpdateStateForTouchEvent(target, + *event); ui::TouchEvent root_relative_event(*event); root_relative_event.set_location_f(event->root_location_f());
diff --git a/ui/aura/window_event_dispatcher_unittest.cc b/ui/aura/window_event_dispatcher_unittest.cc index ff38612..5b54d23 100644 --- a/ui/aura/window_event_dispatcher_unittest.cc +++ b/ui/aura/window_event_dispatcher_unittest.cc
@@ -137,6 +137,13 @@ return client::GetFocusClient(window)->GetFocusedWindow() == window; } +gfx::Point GetLastTouchPoint( + aura::Window* window, + absl::optional<gfx::Point> fallback = absl::nullopt) { + return Env::GetInstance()->GetLastPointerPoint( + ui::mojom::DragEventSource::kTouch, window, fallback); +} + } // namespace using WindowEventDispatcherTest = test::AuraTestBase; @@ -162,6 +169,8 @@ ui::EF_LEFT_MOUSE_BUTTON); DispatchEventUsingWindowDispatcher(&event1); + EXPECT_EQ(gfx::Point(101, 201), Env::GetInstance()->last_mouse_location()); + // Event was tested for non-client area for the target window. EXPECT_EQ(1, delegate1->non_client_count()); EXPECT_EQ(0, delegate2->non_client_count()); @@ -1144,14 +1153,20 @@ EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_PRESSED)); recorder.Reset(); + EXPECT_EQ(location, GetLastTouchPoint(root_window())); + host()->dispatcher()->HoldPointerMoves(); - ui::TouchEvent move(ui::ET_TOUCH_MOVED, location + gfx::Vector2d(100, 100), - ui::EventTimeForNow(), + const gfx::Point next_location = location + gfx::Vector2d(100, 100); + ui::TouchEvent move(ui::ET_TOUCH_MOVED, next_location, ui::EventTimeForNow(), ui::PointerDetails(ui::EventPointerType::kTouch, 0)); DispatchEventUsingWindowDispatcher(&move); + EXPECT_FALSE(recorder.HasReceivedEvent(ui::ET_TOUCH_MOVED)); EXPECT_FALSE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_BEGIN)); + + // The touch location shouldn't be updated yet. + EXPECT_EQ(location, GetLastTouchPoint(root_window())); recorder.Reset(); host()->dispatcher()->ReleasePointerMoves(); @@ -1160,6 +1175,8 @@ EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_MOVED)); EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_BEGIN)); EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_UPDATE)); + // The touch location should be updated after release. + EXPECT_EQ(next_location, GetLastTouchPoint(root_window())); root_window()->RemovePreTargetHandler(&recorder); } @@ -3304,4 +3321,53 @@ window->RemovePreTargetHandler(&recorder); } +TEST_F(WindowEventDispatcherTest, LastTouchPoint) { + class : public ui::EventHandler { + public: + void OnTouchEvent(ui::TouchEvent* event) override { event->SetHandled(); } + } skip_gesture_handler; + auto* env = Env::GetInstance(); + env->AddPreTargetHandler(&skip_gesture_handler); + + test::TestWindowDelegate delegate; + std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate( + &delegate, 1, gfx::Rect(10, 10, 100, 100), root_window())); + + constexpr gfx::Point fallback(-100, -100); + EXPECT_EQ(fallback, GetLastTouchPoint(root_window(), fallback)); + + constexpr gfx::Point location1(20, 20); + ui::TouchEvent pressed(ui::ET_TOUCH_PRESSED, location1, ui::EventTimeForNow(), + ui::PointerDetails(ui::EventPointerType::kTouch, 0)); + DispatchEventUsingWindowDispatcher(&pressed); + + EXPECT_EQ(location1, GetLastTouchPoint(window.get(), fallback)); + EXPECT_EQ(fallback, GetLastTouchPoint(root_window(), fallback)); + + constexpr gfx::Point location2(30, 30); + ui::TouchEvent move(ui::ET_TOUCH_MOVED, location2, ui::EventTimeForNow(), + ui::PointerDetails(ui::EventPointerType::kTouch, 0)); + DispatchEventUsingWindowDispatcher(&move); + EXPECT_EQ(location2, GetLastTouchPoint(window.get(), fallback)); + EXPECT_EQ(fallback, GetLastTouchPoint(root_window(), fallback)); + + constexpr gfx::Point location3(00, 00); + ui::TouchEvent move2(ui::ET_TOUCH_MOVED, location3, ui::EventTimeForNow(), + ui::PointerDetails(ui::EventPointerType::kTouch, 0)); + DispatchEventUsingWindowDispatcher(&move2); + EXPECT_EQ(location3, GetLastTouchPoint(window.get(), fallback)); + EXPECT_EQ(fallback, GetLastTouchPoint(root_window(), fallback)); + + // Delay the release to avoid fling generation. + ui::TouchEvent release(ui::ET_TOUCH_RELEASED, location3, + ui::EventTimeForNow() + base::Seconds(1), + ui::PointerDetails(ui::EventPointerType::kTouch, 0)); + DispatchEventUsingWindowDispatcher(&release); + + EXPECT_EQ(fallback, GetLastTouchPoint(root_window(), fallback)); + EXPECT_EQ(fallback, GetLastTouchPoint(window.get(), fallback)); + + env->RemovePreTargetHandler(&skip_gesture_handler); +} + } // namespace aura
diff --git a/ui/file_manager/file_manager/common/js/lru_cache.ts b/ui/file_manager/file_manager/common/js/lru_cache.ts index 85509208..e632528 100644 --- a/ui/file_manager/file_manager/common/js/lru_cache.ts +++ b/ui/file_manager/file_manager/common/js/lru_cache.ts
@@ -6,8 +6,8 @@ * A linked-list node which holds data for cache entry such as key, value, size. */ class LruCacheNode<T> { - public next: LruCacheNode<T>|null = null; - public prev: LruCacheNode<T>|null = null; + next: LruCacheNode<T>|null = null; + prev: LruCacheNode<T>|null = null; constructor(public key: string, public value: T, public size: number) {} }
diff --git a/ui/file_manager/file_manager/containers/search_container.ts b/ui/file_manager/file_manager/containers/search_container.ts index e3e7521..ec5b65a 100644 --- a/ui/file_manager/file_manager/containers/search_container.ts +++ b/ui/file_manager/file_manager/containers/search_container.ts
@@ -591,7 +591,7 @@ * Returns whether the search container is open. In the open state the user * may enter a search query, interact with options, etc. */ - public isOpen() { + isOpen() { return this.inputState_ === SearchInputState.OPEN; }
diff --git a/ui/file_manager/file_manager/containers/search_container_unittest.ts b/ui/file_manager/file_manager/containers/search_container_unittest.ts index b1219cd..5bba64c 100644 --- a/ui/file_manager/file_manager/containers/search_container_unittest.ts +++ b/ui/file_manager/file_manager/containers/search_container_unittest.ts
@@ -17,7 +17,7 @@ import {SearchContainer} from './search_container.js'; class TestA11yAnnouncer extends A11yAnnounce { - public messages: string[] = []; + messages: string[] = []; override speakA11yMessage(message: string) { this.messages.push(message);
diff --git a/ui/file_manager/file_manager/foreground/js/banner_util_unittest.ts b/ui/file_manager/file_manager/foreground/js/banner_util_unittest.ts index 8efc5c4..32ab4b80 100644 --- a/ui/file_manager/file_manager/foreground/js/banner_util_unittest.ts +++ b/ui/file_manager/file_manager/foreground/js/banner_util_unittest.ts
@@ -18,8 +18,8 @@ function createAndSetVolumeInfo( volumeType: VolumeManagerCommon.VolumeType, volumeId: string|null = null) { class FakeVolumeInfo { - public volumeType: VolumeManagerCommon.VolumeType; - public volumeId: string|null; + volumeType: VolumeManagerCommon.VolumeType; + volumeId: string|null; constructor() { this.volumeType = volumeType; this.volumeId = volumeId;
diff --git a/ui/file_manager/file_manager/foreground/js/file_transfer_controller.ts b/ui/file_manager/file_manager/foreground/js/file_transfer_controller.ts index 6d7ec47..651d514a 100644 --- a/ui/file_manager/file_manager/foreground/js/file_transfer_controller.ts +++ b/ui/file_manager/file_manager/foreground/js/file_transfer_controller.ts
@@ -129,7 +129,7 @@ /** * The array of the pending task IDs. */ - public pendingTaskIds: string[] = []; + pendingTaskIds: string[] = []; /** * File objects for selected files. @@ -1493,7 +1493,7 @@ * Container for defining a copy/move operation. */ export class PastePlan { - public failureUrls: string[] = []; + failureUrls: string[] = []; constructor( public sourceURLs: string[], public sourceEntries: Entry[],
diff --git a/ui/file_manager/file_manager/foreground/js/file_transfer_controller_unittest.ts b/ui/file_manager/file_manager/foreground/js/file_transfer_controller_unittest.ts index 935bda4..5d0fe6f 100644 --- a/ui/file_manager/file_manager/foreground/js/file_transfer_controller_unittest.ts +++ b/ui/file_manager/file_manager/foreground/js/file_transfer_controller_unittest.ts
@@ -34,7 +34,7 @@ import {ListSelectionModel} from './ui/list_selection_model.js'; class TestFileTransferController extends FileTransferController { - public isDocumentWideEvent() { + isDocumentWideEvent() { return super.isDocumentWideEvent_(); } }
diff --git a/ui/ozone/platform/wayland/host/wayland_event_source.cc b/ui/ozone/platform/wayland/host/wayland_event_source.cc index 8e1d393..a747555 100644 --- a/ui/ozone/platform/wayland/host/wayland_event_source.cc +++ b/ui/ozone/platform/wayland/host/wayland_event_source.cc
@@ -603,7 +603,14 @@ if (event->IsLocatedEvent()) { SetRootLocation(event->AsLocatedEvent()); auto* cursor_position = connection_->wayland_cursor_position(); - if (cursor_position) { +#if BUILDFLAG(IS_CHROMEOS_LACROS) + bool update_cursor_position = cursor_position && event->IsMouseEvent(); +#else + // TODO(crbug.com/1488644): Touch event should not update the cursor + // position. + bool update_cursor_position = cursor_position; +#endif + if (update_cursor_position) { cursor_position->OnCursorPositionChanged( GetLocationInScreen(event->AsLocatedEvent())); }
diff --git a/ui/ozone/platform/wayland/host/wayland_exchange_data_provider.cc b/ui/ozone/platform/wayland/host/wayland_exchange_data_provider.cc index b9fa6a2..88837ed0 100644 --- a/ui/ozone/platform/wayland/host/wayland_exchange_data_provider.cc +++ b/ui/ozone/platform/wayland/host/wayland_exchange_data_provider.cc
@@ -116,15 +116,11 @@ continue; } - std::string url_path = url.path(); url::RawCanonOutputT<char16_t> unescaped; - url::DecodeURLEscapeSequences(url_path.data(), url_path.size(), - url::DecodeURLMode::kUTF8OrIsomorphic, - &unescaped); + url::DecodeURLEscapeSequences( + url.path_piece(), url::DecodeURLMode::kUTF8OrIsomorphic, &unescaped); - std::string path8; - base::UTF16ToUTF8(unescaped.data(), unescaped.length(), &path8); - const base::FilePath path(path8); + const base::FilePath path(base::UTF16ToUTF8(unescaped.view())); filenames.emplace_back(path, path.BaseName()); } if (filenames.empty())
diff --git a/ui/ozone/platform/wayland/host/wayland_serial_tracker.cc b/ui/ozone/platform/wayland/host/wayland_serial_tracker.cc index 720b22c..2f0a7084 100644 --- a/ui/ozone/platform/wayland/host/wayland_serial_tracker.cc +++ b/ui/ozone/platform/wayland/host/wayland_serial_tracker.cc
@@ -4,6 +4,7 @@ #include "ui/ozone/platform/wayland/host/wayland_serial_tracker.h" +#include <sstream> #include <vector> #include "base/containers/contains.h" @@ -61,4 +62,23 @@ ResetSerial(SerialType::kKeyPress); } +std::string SerialTracker::ToString() const { + auto tostring = [this](const SerialType serial_type, const std::string& label, + std::ostringstream& out) { + auto serial = GetSerial(serial_type); + out << label; + if (!serial) { + out << "<none>"; + } else { + out << "serial=" << serial->value << ", time=" << serial->timestamp; + }; + }; + std::ostringstream out; + tostring(SerialType::kMouseEnter, "mouse_enter: ", out); + tostring(SerialType::kMousePress, ", mouse_press: ", out); + tostring(SerialType::kTouchPress, ", touch_press: ", out); + tostring(SerialType::kKeyPress, ", key_press: ", out); + return out.str(); +} + } // namespace wl
diff --git a/ui/ozone/platform/wayland/host/wayland_serial_tracker.h b/ui/ozone/platform/wayland/host/wayland_serial_tracker.h index 415c697..e8b9111 100644 --- a/ui/ozone/platform/wayland/host/wayland_serial_tracker.h +++ b/ui/ozone/platform/wayland/host/wayland_serial_tracker.h
@@ -56,6 +56,8 @@ void ClearForTesting(); + std::string ToString() const; + private: const base::TimeTicks base_time_;
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc index e385656..f9ac3ba 100644 --- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc +++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc
@@ -130,7 +130,11 @@ return false; } - VLOG(1) << "Starting DND session."; + VLOG(1) << "Starting DND session. serial=" << serial->value + << ", data_source=" + << (drag_source == DragEventSource::kMouse ? "mouse" : "touch") + << ", serial tracker=" << connection_->serial_tracker().ToString(); + state_ = State::kAttached; origin_window_ = origin; drag_source_ = drag_source; @@ -278,9 +282,7 @@ // Forward cursor location update info to the input handling delegate. #if BUILDFLAG(IS_CHROMEOS_LACROS) - should_process_drag_motion_events_ = - !(static_cast<WaylandToplevelWindow*>(drag_target_window_) - ->IsScreenCoordinatesEnabled()); + should_process_drag_motion_events_ = false; #else // non-lacros platforms never use global coordinates so they always process // drag events. @@ -461,7 +463,14 @@ if (event->type() == ET_MOUSE_MOVED || event->type() == ET_MOUSE_DRAGGED || event->type() == ET_TOUCH_MOVED) { HandleMotionEvent(event->AsLocatedEvent()); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + if (event->type() != ET_TOUCH_MOVED) { + // Pass through touch so that touch position will be updated. + return POST_DISPATCH_STOP_PROPAGATION; + } +#else return POST_DISPATCH_STOP_PROPAGATION; +#endif } return POST_DISPATCH_PERFORM_DEFAULT; }
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc index 3209b4e..50c1bfc 100644 --- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc +++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
@@ -322,24 +322,44 @@ EXPECT_EQ(State::kAttached, drag_controller()->state()); EXPECT_CALL(delegate_, DispatchEvent(_)).WillOnce([&](Event* event) { EXPECT_EQ(ET_TOUCH_MOVED, event->type()); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // On Lacros, touch event will not update the cursor position. + EXPECT_EQ(gfx::Point(0, 0), screen_->GetCursorScreenPoint()); +#else EXPECT_EQ(gfx::Point(10, 10), screen_->GetCursorScreenPoint()); +#endif }); SendDndMotionForWindowDrag({10, 10}); enum TestStep { kDragging, kDropping, kDone } test_step = kDragging; - EXPECT_CALL(delegate_, DispatchEvent(_)).WillOnce([&](Event* event) { - ASSERT_EQ(kDropping, test_step); - EXPECT_EQ(ET_TOUCH_RELEASED, event->type()); - EXPECT_EQ(State::kDropped, drag_controller()->state()); + EXPECT_CALL(delegate_, DispatchEvent(_)) +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // Lacros dispatches TOUCH_MOVED event so that aura can update the touch + // position. + .WillOnce([&](Event* event) { + EXPECT_EQ(ET_TOUCH_MOVED, event->type()); + EXPECT_EQ(gfx::Point(20, 20), event->AsLocatedEvent()->root_location()); + }) +#endif + .WillOnce([&](Event* event) { + EXPECT_EQ(ET_TOUCH_RELEASED, event->type()); + ASSERT_EQ(kDropping, test_step); + EXPECT_EQ(ET_TOUCH_RELEASED, event->type()); + EXPECT_EQ(State::kDropped, drag_controller()->state()); // Ensure PlatformScreen keeps consistent. - gfx::Point expected_point{20, 20}; - expected_point += window_->GetBoundsInDIP().origin().OffsetFromOrigin(); - EXPECT_EQ(expected_point, screen_->GetCursorScreenPoint()); - EXPECT_EQ(window_->GetWidget(), - screen_->GetLocalProcessWidgetAtPoint({20, 20}, {})); - test_step = kDone; - }); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + gfx::Point expected_point{0, 0}; + // On Lacros, touch event will not update the cursor position. +#else + gfx::Point expected_point{20, 20}; + expected_point += window_->GetBoundsInDIP().origin().OffsetFromOrigin(); +#endif + EXPECT_EQ(expected_point, screen_->GetCursorScreenPoint()); + EXPECT_EQ(window_->GetWidget(), + screen_->GetLocalProcessWidgetAtPoint({20, 20}, {})); + test_step = kDone; + }); EXPECT_CALL(delegate_, OnBoundsChanged(_)) .WillOnce([&](const PlatformWindowDelegate::BoundsChange& change) { @@ -769,10 +789,24 @@ DragEventSource::kTouch, /*allow_system_drag=*/false); EXPECT_EQ(State::kAttached, drag_controller()->state()); - EXPECT_CALL(delegate_, DispatchEvent(_)).WillOnce([&](Event* event) { - EXPECT_EQ(ET_TOUCH_MOVED, event->type()); - EXPECT_EQ(gfx::Point(10, 10), screen_->GetCursorScreenPoint()); - }); + EXPECT_CALL(delegate_, DispatchEvent(_)) +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // Lacros dispatches TOUCH_MOVED event so that aura can update the touch + // position. + .WillOnce([&](Event* event) { + EXPECT_EQ(ET_TOUCH_MOVED, event->type()); + EXPECT_EQ(gfx::Point(10, 10), event->AsLocatedEvent()->root_location()); + }) +#endif + .WillOnce([&](Event* event) { + EXPECT_EQ(ET_TOUCH_MOVED, event->type()); +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // On Lacros, touch event will not update the cursor position. + EXPECT_EQ(gfx::Point(0, 0), screen_->GetCursorScreenPoint()); +#else + EXPECT_EQ(gfx::Point(10, 10), screen_->GetCursorScreenPoint()); +#endif + }); SendDndMotionForWindowDrag({10, 10}); auto* move_loop_handler = GetWmMoveLoopHandler(*window_); @@ -840,8 +874,12 @@ SendDndMotionForWindowDrag(location); location.Offset(0, 3); } - +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // On Lacros, touch event will not update the cursor position. + EXPECT_EQ(gfx::Point(0, 0), screen_->GetCursorScreenPoint()); +#else EXPECT_EQ(gfx::Point(30, 42), screen_->GetCursorScreenPoint()); +#endif EXPECT_EQ(target_window->GetWidget(), screen_->GetLocalProcessWidgetAtPoint({50, 50}, {}));
diff --git a/ui/shell_dialogs/select_file_dialog_linux_portal.cc b/ui/shell_dialogs/select_file_dialog_linux_portal.cc index c730fa8..eef069a2 100644 --- a/ui/shell_dialogs/select_file_dialog_linux_portal.cc +++ b/ui/shell_dialogs/select_file_dialog_linux_portal.cc
@@ -865,11 +865,9 @@ encoded_path.remove_prefix(strlen(kFileUriPrefix)); url::RawCanonOutputT<char16_t> decoded_path; - url::DecodeURLEscapeSequences(encoded_path.data(), encoded_path.size(), - url::DecodeURLMode::kUTF8OrIsomorphic, - &decoded_path); - paths.emplace_back(base::UTF16ToUTF8( - base::StringPiece16(decoded_path.data(), decoded_path.length()))); + url::DecodeURLEscapeSequences( + encoded_path, url::DecodeURLMode::kUTF8OrIsomorphic, &decoded_path); + paths.emplace_back(base::UTF16ToUTF8(decoded_path.view())); } return paths;
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.cc index c8f23171..e31ee7c 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.cc +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.cc
@@ -9,9 +9,12 @@ #include "chromeos/ui/base/window_properties.h" #include "ui/aura/client/aura_constants.h" +#include "ui/aura/env.h" #include "ui/aura/window.h" #include "ui/aura/window_delegate.h" #include "ui/events/event.h" +#include "ui/events/event_handler.h" +#include "ui/events/event_target.h" #include "ui/ozone/public/ozone_platform.h" #include "ui/platform_window/extensions/desk_extension.h" #include "ui/platform_window/extensions/pinned_mode_extension.h" @@ -50,6 +53,27 @@ } } +// Chrome do not expect the pointer (mouse/touch) events are dispatched to +// chrome during move loop. The mouse events are already consumed by +// ozone-wayland but touch events are sent to the `aura::WindowEventDispatcher` +// to update the touch location. Consume touch events at system handler level so +// that chrome will not see the touch events. +class ScopedTouchEventDisabler : public ui::EventHandler { + public: + ScopedTouchEventDisabler() { + aura::Env::GetInstance()->AddPreTargetHandler( + this, ui::EventTarget::Priority::kSystem); + } + ScopedTouchEventDisabler(const ScopedTouchEventDisabler&) = delete; + ScopedTouchEventDisabler& operator=(const ScopedTouchEventDisabler&) = delete; + ~ScopedTouchEventDisabler() override { + aura::Env::GetInstance()->RemovePreTargetHandler(this); + } + + // ui::EventHandler: + void OnTouchEvent(ui::TouchEvent* event) override { event->SetHandled(); } +}; + } // namespace namespace views { @@ -147,6 +171,15 @@ properties->wayland_app_id = params.wayland_app_id; } +Widget::MoveLoopResult DesktopWindowTreeHostLacros::RunMoveLoop( + const gfx::Vector2d& drag_offset, + Widget::MoveLoopSource source, + Widget::MoveLoopEscapeBehavior escape_behavior) { + ScopedTouchEventDisabler touch_event_disabler; + return DesktopWindowTreeHostPlatform::RunMoveLoop(drag_offset, source, + escape_behavior); +} + void DesktopWindowTreeHostLacros::OnWindowPropertyChanged(aura::Window* window, const void* key, intptr_t old) {
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.h b/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.h index 1630de0..88ed9243 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.h +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.h
@@ -74,6 +74,10 @@ void AddAdditionalInitProperties( const Widget::InitParams& params, ui::PlatformWindowInitProperties* properties) override; + Widget::MoveLoopResult RunMoveLoop( + const gfx::Vector2d& drag_offset, + Widget::MoveLoopSource source, + Widget::MoveLoopEscapeBehavior escape_behavior) override; // aura::WindowObserver: void OnWindowPropertyChanged(aura::Window* window,
diff --git a/ui/webui/resources/cr_components/most_visited/most_visited.ts b/ui/webui/resources/cr_components/most_visited/most_visited.ts index 028b0ad..53e07196 100644 --- a/ui/webui/resources/cr_components/most_visited/most_visited.ts +++ b/ui/webui/resources/cr_components/most_visited/most_visited.ts
@@ -213,9 +213,9 @@ }; } - public theme: MostVisitedTheme|null; - public reflowOnOverflow: boolean; - public singleRow: boolean; + theme: MostVisitedTheme|null; + reflowOnOverflow: boolean; + singleRow: boolean; private useWhiteTileIcon_: boolean; private columnCount_: number; private rowCount_: number;
diff --git a/ui/webui/resources/cr_components/theme_color_picker/theme_color.ts b/ui/webui/resources/cr_components/theme_color_picker/theme_color.ts index 4fd41b3..ef7e814 100644 --- a/ui/webui/resources/cr_components/theme_color_picker/theme_color.ts +++ b/ui/webui/resources/cr_components/theme_color_picker/theme_color.ts
@@ -55,11 +55,11 @@ }; } - public backgroundColor: SkColor; - public foregroundColor: SkColor; - public baseColor: SkColor; - public checked: boolean; - public backgroundColorHidden: boolean; + backgroundColor: SkColor; + foregroundColor: SkColor; + baseColor: SkColor; + checked: boolean; + backgroundColorHidden: boolean; override connectedCallback() { super.connectedCallback();
diff --git a/ui/webui/resources/cr_elements/cr_segmented_button/cr_segmented_button.ts b/ui/webui/resources/cr_elements/cr_segmented_button/cr_segmented_button.ts index 163dd6b..6c739c72 100644 --- a/ui/webui/resources/cr_elements/cr_segmented_button/cr_segmented_button.ts +++ b/ui/webui/resources/cr_elements/cr_segmented_button/cr_segmented_button.ts
@@ -33,8 +33,8 @@ }; } - public selected: string; - public selectableElements: string; + selected: string; + selectableElements: string; } declare global {
diff --git a/ui/wm/core/transient_window_manager.cc b/ui/wm/core/transient_window_manager.cc index d5632b8..4cad86f2 100644 --- a/ui/wm/core/transient_window_manager.cc +++ b/ui/wm/core/transient_window_manager.cc
@@ -7,7 +7,6 @@ #include <functional> #include "base/auto_reset.h" -#include "base/containers/adapters.h" #include "base/containers/contains.h" #include "base/memory/ptr_util.h" #include "base/observer_list.h" @@ -126,6 +125,7 @@ transient_parent_(nullptr), stacking_target_(nullptr), parent_controls_visibility_(false), + parent_controls_lifetime_(true), show_on_parent_visible_(false), ignore_visibility_changed_event_(false) { window_->AddObserver(this); @@ -261,10 +261,26 @@ // Destroy transient children, only after we've removed ourselves from our // parent, as destroying an active transient child may otherwise attempt to // refocus us. - Windows transient_children(transient_children_); - for (auto* child : transient_children) - delete child; - DCHECK(transient_children_.empty()); + // WindowTracker is used because child window could be deleted while + // iterating. + aura::WindowTracker tracker( + Window::Windows(transient_children_.begin(), transient_children_.end())); + while (!tracker.windows().empty()) { + aura::Window* child = tracker.Pop(); + auto* child_transient_manager = TransientWindowManager::GetIfExists(child); + CHECK(child_transient_manager); + if (child_transient_manager->parent_controls_lifetime_) { + delete child; + } else { + // This transient `child` window is set to outlive its transient parent + // (in this case, the about-to-be destroyed `window` whose transient + // manager is `this`). We need to remove it as a transient child from + // `this`. + RemoveTransientChild(child); + } + } + + CHECK(tracker.windows().empty()); } } // namespace wm
diff --git a/ui/wm/core/transient_window_manager.h b/ui/wm/core/transient_window_manager.h index 66beb86..fa51d9a 100644 --- a/ui/wm/core/transient_window_manager.h +++ b/ui/wm/core/transient_window_manager.h
@@ -61,6 +61,14 @@ parent_controls_visibility_ = parent_controls_visibility; } + // Sets whether the transient parent should control the lifetime of the + // transient child or not. `parent_controls_lifetime_` is default set to true + // and needs to be set to false when the lifetime of the transient child is + // not managed by its transient parent. + void set_parent_controls_lifetime(bool parent_controls_lifetime) { + parent_controls_lifetime_ = parent_controls_lifetime; + } + const Windows& transient_children() const { return transient_children_; } aura::Window* transient_parent() { return transient_parent_; } @@ -101,6 +109,7 @@ RAW_PTR_EXCLUSION aura::Window* stacking_target_; bool parent_controls_visibility_; + bool parent_controls_lifetime_; bool show_on_parent_visible_; bool ignore_visibility_changed_event_;
diff --git a/ui/wm/core/transient_window_manager_unittest.cc b/ui/wm/core/transient_window_manager_unittest.cc index 8b29d43d..980f9e9 100644 --- a/ui/wm/core/transient_window_manager_unittest.cc +++ b/ui/wm/core/transient_window_manager_unittest.cc
@@ -12,6 +12,7 @@ #include "ui/aura/test/test_windows.h" #include "ui/aura/window.h" #include "ui/aura/window_observer.h" +#include "ui/aura/window_tracker.h" #include "ui/wm/core/transient_window_observer.h" #include "ui/wm/core/window_util.h" @@ -497,4 +498,38 @@ EXPECT_EQ(child_4->parent(), container_3.get()); } +// Tests that the lifetime of the transient window will be determined by its +// transient parent by default. But the transient window is still able to +// outlive the transient parent if we explicitly +// `set_parent_controls_lifetime()` to false through its transient window +// manager. +TEST_F(TransientWindowManagerTest, + TransientLifeTimeMayBeControlledByTransientParent) { + // Test that the lifetime of the transient window is controlled by its + // transient parent by default. + std::unique_ptr<Window> parent(CreateTestWindowWithId(0, root_window())); + std::unique_ptr<Window> transient(CreateTransientChild(1, parent.get())); + + aura::WindowTracker tracker({transient.get()}); + + // Release the ownership of the `transient` to avoid double deletion in + // `TransientWindowManager::OnWindowDestroying()`. + transient.release(); + parent.reset(); + EXPECT_TRUE(tracker.windows().empty()); + + std::unique_ptr<Window> new_parent(CreateTestWindowWithId(2, root_window())); + std::unique_ptr<Window> new_transient( + CreateTransientChild(3, new_parent.get())); + + tracker.Add(new_transient.get()); + + // Test that the transient window can outlive its transient parent by setting + // `set_parent_controls_lifetime()` to false. + wm::TransientWindowManager::GetOrCreate(new_transient.get()) + ->set_parent_controls_lifetime(false); + new_parent.reset(); + EXPECT_FALSE(tracker.windows().empty()); +} + } // namespace wm
diff --git a/url/url_canon.h b/url/url_canon.h index 94b4442..d3a7fabf 100644 --- a/url/url_canon.h +++ b/url/url_canon.h
@@ -8,6 +8,8 @@ #include <stdlib.h> #include <string.h> +#include <string_view> + #include "base/component_export.h" #include "base/export_template.h" #include "base/memory/raw_ptr_exclusion.h" @@ -57,6 +59,11 @@ // write the data, then use set_size() to declare the new length(). size_t capacity() const { return buffer_len_; } + // Returns the contents of the buffer as a string_view. + std::basic_string_view<T> view() const { + return std::basic_string_view<T>(data(), length()); + } + // Called by the user of this class to get the output. The output will NOT // be NULL-terminated. Call length() to get the // length. @@ -102,6 +109,8 @@ cur_len_ += str_len; } + void Append(std::basic_string_view<T> str) { Append(str.data(), str.size()); } + void ReserveSizeIfNeeded(size_t estimated_size) { // Reserve a bit extra to account for escaped chars. if (estimated_size > buffer_len_) @@ -278,7 +287,7 @@ // // On error, returns false. The output in this case is undefined. COMPONENT_EXPORT(URL) -bool IDNToASCII(const char16_t* src, int src_len, CanonOutputW* output); +bool IDNToASCII(std::u16string_view src, CanonOutputW* output); // Piece-by-piece canonicalizers ---------------------------------------------- //
diff --git a/url/url_canon_filesystemurl.cc b/url/url_canon_filesystemurl.cc index 0472484..f1a9f1c 100644 --- a/url/url_canon_filesystemurl.cc +++ b/url/url_canon_filesystemurl.cc
@@ -36,7 +36,7 @@ // Scheme (known, so we don't bother running it through the more // complicated scheme canonicalizer). new_parsed->scheme.begin = output->length(); - output->Append("filesystem:", 11); + output->Append("filesystem:"); new_parsed->scheme.len = 10; if (!inner_parsed || !inner_parsed->scheme.is_valid()) @@ -46,7 +46,7 @@ SchemeType inner_scheme_type = SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION; if (CompareSchemeComponent(spec, inner_parsed->scheme, url::kFileScheme)) { new_inner_parsed.scheme.begin = output->length(); - output->Append("file://", 7); + output->Append("file://"); new_inner_parsed.scheme.len = 4; success &= CanonicalizePath(spec, inner_parsed->path, output, &new_inner_parsed.path);
diff --git a/url/url_canon_fileurl.cc b/url/url_canon_fileurl.cc index 712fbce..802fe42 100644 --- a/url/url_canon_fileurl.cc +++ b/url/url_canon_fileurl.cc
@@ -135,7 +135,7 @@ // Scheme (known, so we don't bother running it through the more // complicated scheme canonicalizer). new_parsed->scheme.begin = output->length(); - output->Append("file://", 7); + output->Append("file://"); new_parsed->scheme.len = 4; // If the host is localhost, and the path starts with a Windows drive letter,
diff --git a/url/url_canon_host.cc b/url/url_canon_host.cc index dccb413..4e45839f 100644 --- a/url/url_canon_host.cc +++ b/url/url_canon_host.cc
@@ -214,9 +214,7 @@ } StackBufferW wide_output; - if (!IDNToASCII(url_escaped_host.data(), - url_escaped_host.length(), - &wide_output)) { + if (!IDNToASCII(url_escaped_host.view(), &wide_output)) { // Some error, give up. This will write some reasonable looking // representation of the string to the output. AppendInvalidNarrowString(src, 0, src_len, output); @@ -406,7 +404,7 @@ // we just leave it in place. if (host_info->IsIPAddress()) { output->set_length(output_begin); - output->Append(canon_ip.data(), canon_ip.length()); + output->Append(canon_ip.view()); } } else { // Canonicalization failed. Set BROKEN to notify the caller.
diff --git a/url/url_canon_mailtourl.cc b/url/url_canon_mailtourl.cc index e48b6422..cbd4bb4 100644 --- a/url/url_canon_mailtourl.cc +++ b/url/url_canon_mailtourl.cc
@@ -45,7 +45,7 @@ // Scheme (known, so we don't bother running it through the more // complicated scheme canonicalizer). new_parsed->scheme.begin = output->length(); - output->Append("mailto:", 7); + output->Append("mailto:"); new_parsed->scheme.len = 6; bool success = true;
diff --git a/url/url_canon_unittest.cc b/url/url_canon_unittest.cc index 4da96e4..53bfa609 100644 --- a/url/url_canon_unittest.cc +++ b/url/url_canon_unittest.cc
@@ -2801,33 +2801,33 @@ // Basic ASCII test. std::u16string str = u"hello"; - EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output)); + EXPECT_TRUE(IDNToASCII(str, &output)); EXPECT_EQ(u"hello", std::u16string(output.data())); output.set_length(0); // Mixed ASCII/non-ASCII. str = u"hellö"; - EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output)); + EXPECT_TRUE(IDNToASCII(str, &output)); EXPECT_EQ(u"xn--hell-8qa", std::u16string(output.data())); output.set_length(0); // All non-ASCII. str = u"你好"; - EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output)); + EXPECT_TRUE(IDNToASCII(str, &output)); EXPECT_EQ(u"xn--6qq79v", std::u16string(output.data())); output.set_length(0); // Characters that need mapping (the resulting Punycode is the encoding for // "1⁄4"). str = u"¼"; - EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output)); + EXPECT_TRUE(IDNToASCII(str, &output)); EXPECT_EQ(u"xn--14-c6t", std::u16string(output.data())); output.set_length(0); // String to encode already starts with "xn--", and all ASCII. Should not // modify the string. str = u"xn--hell-8qa"; - EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output)); + EXPECT_TRUE(IDNToASCII(str, &output)); EXPECT_EQ(u"xn--hell-8qa", std::u16string(output.data())); output.set_length(0); @@ -2835,7 +2835,7 @@ // Should fail, due to a special case: if the label starts with "xn--", it // should be parsed as Punycode, which must be all ASCII. str = u"xn--hellö"; - EXPECT_FALSE(IDNToASCII(str.data(), str.length(), &output)); + EXPECT_FALSE(IDNToASCII(str, &output)); output.set_length(0); // String to encode already starts with "xn--", and mixed ASCII/non-ASCII. @@ -2843,7 +2843,7 @@ // which would be a valid ASCII character, U+0044, if the high byte were // ignored. str = u"xn--1⁄4"; - EXPECT_FALSE(IDNToASCII(str.data(), str.length(), &output)); + EXPECT_FALSE(IDNToASCII(str, &output)); output.set_length(0); }
diff --git a/url/url_idna_icu.cc b/url/url_idna_icu.cc index 0a552a8..912cb58 100644 --- a/url/url_idna_icu.cc +++ b/url/url_idna_icu.cc
@@ -11,6 +11,7 @@ #include <ostream> #include "base/check_op.h" +#include "base/numerics/safe_conversions.h" #include "third_party/icu/source/common/unicode/uidna.h" #include "third_party/icu/source/common/unicode/utypes.h" #include "url/url_canon_icu.h" @@ -90,7 +91,7 @@ // conversions in our code. In addition, consider using icu::IDNA's UTF-8/ASCII // version with StringByteSink. That way, we can avoid C wrappers and additional // string conversion. -bool IDNToASCII(const char16_t* src, int src_len, CanonOutputW* output) { +bool IDNToASCII(std::u16string_view src, CanonOutputW* output) { DCHECK(output->length() == 0); // Output buffer is assumed empty. UIDNA* uidna = GetUIDNA(); @@ -98,8 +99,9 @@ while (true) { UErrorCode err = U_ZERO_ERROR; UIDNAInfo info = UIDNA_INFO_INITIALIZER; - int output_length = uidna_nameToASCII(uidna, src, src_len, output->data(), - output->capacity(), &info, &err); + int output_length = uidna_nameToASCII( + uidna, src.data(), base::checked_cast<int32_t>(src.size()), + output->data(), output->capacity(), &info, &err); // Ignore various errors for web compatibility. The options are specified // by the WHATWG URL Standard. See
diff --git a/url/url_idna_icu_alternatives_android.cc b/url/url_idna_icu_alternatives_android.cc index b94f100..878e885 100644 --- a/url/url_idna_icu_alternatives_android.cc +++ b/url/url_idna_icu_alternatives_android.cc
@@ -18,13 +18,12 @@ // This uses the JDK's conversion function, which uses IDNA 2003, unlike the // ICU implementation. -bool IDNToASCII(const char16_t* src, int src_len, CanonOutputW* output) { +bool IDNToASCII(std::u16string_view src, CanonOutputW* output) { DCHECK_EQ(0u, output->length()); // Output buffer is assumed empty. JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> java_src = - base::android::ConvertUTF16ToJavaString( - env, std::u16string_view(src, src_len)); + base::android::ConvertUTF16ToJavaString(env, src); ScopedJavaLocalRef<jstring> java_result = android::Java_IDNStringUtil_idnToASCII(env, java_src); // NULL indicates failure.
diff --git a/url/url_idna_icu_alternatives_ios.mm b/url/url_idna_icu_alternatives_ios.mm index 2741859..c36a618 100644 --- a/url/url_idna_icu_alternatives_ios.mm +++ b/url/url_idna_icu_alternatives_ios.mm
@@ -16,9 +16,9 @@ // Only allow ASCII to avoid ICU dependency. Use NSString+IDN // to convert non-ASCII URL prior to passing to API. -bool IDNToASCII(const char16_t* src, int src_len, CanonOutputW* output) { - if (base::IsStringASCII(std::u16string_view(src, src_len))) { - output->Append(src, src_len); +bool IDNToASCII(std::u16string_view src, CanonOutputW* output) { + if (base::IsStringASCII(src)) { + output->Append(src); return true; } DCHECK(false) << "IDN URL support is not available.";
diff --git a/url/url_util.cc b/url/url_util.cc index 81b54621..9258cfc 100644 --- a/url/url_util.cc +++ b/url/url_util.cc
@@ -833,19 +833,18 @@ charset_converter, output, out_parsed); } -void DecodeURLEscapeSequences(const char* input, - int length, +void DecodeURLEscapeSequences(std::string_view input, DecodeURLMode mode, CanonOutputW* output) { - if (length <= 0) + if (input.empty()) { return; + } STACK_UNINITIALIZED RawCanonOutputT<char> unescaped_chars; - size_t length_size_t = static_cast<size_t>(length); - for (size_t i = 0; i < length_size_t; i++) { + for (size_t i = 0; i < input.length(); i++) { if (input[i] == '%') { unsigned char ch; - if (DecodeEscaped(input, &i, length_size_t, &ch)) { + if (DecodeEscaped(input.data(), &i, input.length(), &ch)) { unescaped_chars.push_back(ch); } else { // Invalid escape sequence, copy the percent literal. @@ -894,13 +893,13 @@ } } -void EncodeURIComponent(const char* input, int length, CanonOutput* output) { - for (int i = 0; i < length; ++i) { - unsigned char c = static_cast<unsigned char>(input[i]); - if (IsComponentChar(c)) +void EncodeURIComponent(std::string_view input, CanonOutput* output) { + for (unsigned char c : input) { + if (IsComponentChar(c)) { output->push_back(c); - else + } else { AppendEscapedChar(c, output); + } } }
diff --git a/url/url_util.h b/url/url_util.h index 4084bd6a..8c94c7a 100644 --- a/url/url_util.h +++ b/url/url_util.h
@@ -299,15 +299,14 @@ // Unescapes the given string using URL escaping rules. COMPONENT_EXPORT(URL) -void DecodeURLEscapeSequences(const char* input, - int length, +void DecodeURLEscapeSequences(std::string_view input, DecodeURLMode mode, CanonOutputW* output); // Escapes the given string as defined by the JS method encodeURIComponent. See // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent COMPONENT_EXPORT(URL) -void EncodeURIComponent(const char* input, int length, CanonOutput* output); +void EncodeURIComponent(std::string_view input, CanonOutput* output); // Returns true if `c` is a character that does not require escaping in // encodeURIComponent.
diff --git a/url/url_util_unittest.cc b/url/url_util_unittest.cc index 47ac7f08..a8ed6a4 100644 --- a/url/url_util_unittest.cc +++ b/url/url_util_unittest.cc
@@ -260,14 +260,12 @@ for (size_t i = 0; i < std::size(decode_cases); i++) { const char* input = decode_cases[i].input; RawCanonOutputT<char16_t> output; - DecodeURLEscapeSequences(input, strlen(input), - DecodeURLMode::kUTF8OrIsomorphic, &output); + DecodeURLEscapeSequences(input, DecodeURLMode::kUTF8OrIsomorphic, &output); EXPECT_EQ(decode_cases[i].output, base::UTF16ToUTF8(std::u16string( output.data(), output.length()))); RawCanonOutputT<char16_t> output_utf8; - DecodeURLEscapeSequences(input, strlen(input), DecodeURLMode::kUTF8, - &output_utf8); + DecodeURLEscapeSequences(input, DecodeURLMode::kUTF8, &output_utf8); EXPECT_EQ(decode_cases[i].output, base::UTF16ToUTF8( std::u16string(output_utf8.data(), output_utf8.length()))); @@ -276,8 +274,7 @@ // Our decode should decode %00 const char zero_input[] = "%00"; RawCanonOutputT<char16_t> zero_output; - DecodeURLEscapeSequences(zero_input, strlen(zero_input), DecodeURLMode::kUTF8, - &zero_output); + DecodeURLEscapeSequences(zero_input, DecodeURLMode::kUTF8, &zero_output); EXPECT_NE("%00", base::UTF16ToUTF8(std::u16string(zero_output.data(), zero_output.length()))); @@ -302,14 +299,13 @@ for (const auto& test : utf8_decode_cases) { const char* input = test.input; RawCanonOutputT<char16_t> output_iso; - DecodeURLEscapeSequences(input, strlen(input), - DecodeURLMode::kUTF8OrIsomorphic, &output_iso); + DecodeURLEscapeSequences(input, DecodeURLMode::kUTF8OrIsomorphic, + &output_iso); EXPECT_EQ(std::u16string(test.expected_iso.data()), std::u16string(output_iso.data(), output_iso.length())); RawCanonOutputT<char16_t> output_utf8; - DecodeURLEscapeSequences(input, strlen(input), DecodeURLMode::kUTF8, - &output_utf8); + DecodeURLEscapeSequences(input, DecodeURLMode::kUTF8, &output_utf8); EXPECT_EQ(std::u16string(test.expected_utf8.data()), std::u16string(output_utf8.data(), output_utf8.length())); } @@ -342,7 +338,7 @@ for (size_t i = 0; i < std::size(encode_cases); i++) { const char* input = encode_cases[i].input; RawCanonOutputT<char> buffer; - EncodeURIComponent(input, strlen(input), &buffer); + EncodeURIComponent(input, &buffer); std::string output(buffer.data(), buffer.length()); EXPECT_EQ(encode_cases[i].output, output); }